diff --git a/packages/core/drizzle.config.ts b/cloud/packages/core/drizzle.config.ts similarity index 100% rename from packages/core/drizzle.config.ts rename to cloud/packages/core/drizzle.config.ts diff --git a/packages/core/migrations/0000_flaky_matthew_murdock.sql b/cloud/packages/core/migrations/0000_flaky_matthew_murdock.sql similarity index 100% rename from packages/core/migrations/0000_flaky_matthew_murdock.sql rename to cloud/packages/core/migrations/0000_flaky_matthew_murdock.sql diff --git a/packages/core/migrations/0001_nifty_sauron.sql b/cloud/packages/core/migrations/0001_nifty_sauron.sql similarity index 100% rename from packages/core/migrations/0001_nifty_sauron.sql rename to cloud/packages/core/migrations/0001_nifty_sauron.sql diff --git a/packages/core/migrations/0002_simple_outlaw_kid.sql b/cloud/packages/core/migrations/0002_simple_outlaw_kid.sql similarity index 100% rename from packages/core/migrations/0002_simple_outlaw_kid.sql rename to cloud/packages/core/migrations/0002_simple_outlaw_kid.sql diff --git a/packages/core/migrations/0002_tiny_toad_men.sql b/cloud/packages/core/migrations/0002_tiny_toad_men.sql similarity index 100% rename from packages/core/migrations/0002_tiny_toad_men.sql rename to cloud/packages/core/migrations/0002_tiny_toad_men.sql diff --git a/packages/core/migrations/0003_first_big_bertha.sql b/cloud/packages/core/migrations/0003_first_big_bertha.sql similarity index 100% rename from packages/core/migrations/0003_first_big_bertha.sql rename to cloud/packages/core/migrations/0003_first_big_bertha.sql diff --git a/packages/core/migrations/0004_amused_mattie_franklin.sql b/cloud/packages/core/migrations/0004_amused_mattie_franklin.sql similarity index 100% rename from packages/core/migrations/0004_amused_mattie_franklin.sql rename to cloud/packages/core/migrations/0004_amused_mattie_franklin.sql diff --git a/packages/core/migrations/0005_aspiring_stature.sql b/cloud/packages/core/migrations/0005_aspiring_stature.sql similarity index 100% rename from packages/core/migrations/0005_aspiring_stature.sql rename to cloud/packages/core/migrations/0005_aspiring_stature.sql diff --git a/packages/core/migrations/0006_worthless_dreadnoughts.sql b/cloud/packages/core/migrations/0006_worthless_dreadnoughts.sql similarity index 100% rename from packages/core/migrations/0006_worthless_dreadnoughts.sql rename to cloud/packages/core/migrations/0006_worthless_dreadnoughts.sql diff --git a/packages/core/migrations/0007_warm_secret_warriors.sql b/cloud/packages/core/migrations/0007_warm_secret_warriors.sql similarity index 100% rename from packages/core/migrations/0007_warm_secret_warriors.sql rename to cloud/packages/core/migrations/0007_warm_secret_warriors.sql diff --git a/packages/core/migrations/0008_third_mindworm.sql b/cloud/packages/core/migrations/0008_third_mindworm.sql similarity index 100% rename from packages/core/migrations/0008_third_mindworm.sql rename to cloud/packages/core/migrations/0008_third_mindworm.sql diff --git a/packages/core/migrations/0009_luxuriant_wraith.sql b/cloud/packages/core/migrations/0009_luxuriant_wraith.sql similarity index 100% rename from packages/core/migrations/0009_luxuriant_wraith.sql rename to cloud/packages/core/migrations/0009_luxuriant_wraith.sql diff --git a/packages/core/migrations/0010_certain_dust.sql b/cloud/packages/core/migrations/0010_certain_dust.sql similarity index 100% rename from packages/core/migrations/0010_certain_dust.sql rename to cloud/packages/core/migrations/0010_certain_dust.sql diff --git a/packages/core/migrations/0011_simple_azazel.sql b/cloud/packages/core/migrations/0011_simple_azazel.sql similarity index 100% rename from packages/core/migrations/0011_simple_azazel.sql rename to cloud/packages/core/migrations/0011_simple_azazel.sql diff --git a/packages/core/migrations/0012_glorious_jetstream.sql b/cloud/packages/core/migrations/0012_glorious_jetstream.sql similarity index 100% rename from packages/core/migrations/0012_glorious_jetstream.sql rename to cloud/packages/core/migrations/0012_glorious_jetstream.sql diff --git a/packages/core/migrations/0013_neat_colleen_wing.sql b/cloud/packages/core/migrations/0013_neat_colleen_wing.sql similarity index 100% rename from packages/core/migrations/0013_neat_colleen_wing.sql rename to cloud/packages/core/migrations/0013_neat_colleen_wing.sql diff --git a/packages/core/migrations/0014_thin_groot.sql b/cloud/packages/core/migrations/0014_thin_groot.sql similarity index 100% rename from packages/core/migrations/0014_thin_groot.sql rename to cloud/packages/core/migrations/0014_thin_groot.sql diff --git a/packages/core/migrations/0015_handy_giant_man.sql b/cloud/packages/core/migrations/0015_handy_giant_man.sql similarity index 100% rename from packages/core/migrations/0015_handy_giant_man.sql rename to cloud/packages/core/migrations/0015_handy_giant_man.sql diff --git a/packages/core/migrations/0016_melted_johnny_storm.sql b/cloud/packages/core/migrations/0016_melted_johnny_storm.sql similarity index 100% rename from packages/core/migrations/0016_melted_johnny_storm.sql rename to cloud/packages/core/migrations/0016_melted_johnny_storm.sql diff --git a/packages/core/migrations/0017_zippy_nico_minoru.sql b/cloud/packages/core/migrations/0017_zippy_nico_minoru.sql similarity index 100% rename from packages/core/migrations/0017_zippy_nico_minoru.sql rename to cloud/packages/core/migrations/0017_zippy_nico_minoru.sql diff --git a/packages/core/migrations/0018_solid_enchantress.sql b/cloud/packages/core/migrations/0018_solid_enchantress.sql similarity index 100% rename from packages/core/migrations/0018_solid_enchantress.sql rename to cloud/packages/core/migrations/0018_solid_enchantress.sql diff --git a/packages/core/migrations/0019_charming_namorita.sql b/cloud/packages/core/migrations/0019_charming_namorita.sql similarity index 100% rename from packages/core/migrations/0019_charming_namorita.sql rename to cloud/packages/core/migrations/0019_charming_namorita.sql diff --git a/packages/core/migrations/0020_vengeful_wallop.sql b/cloud/packages/core/migrations/0020_vengeful_wallop.sql similarity index 100% rename from packages/core/migrations/0020_vengeful_wallop.sql rename to cloud/packages/core/migrations/0020_vengeful_wallop.sql diff --git a/packages/core/migrations/0021_real_skreet.sql b/cloud/packages/core/migrations/0021_real_skreet.sql similarity index 100% rename from packages/core/migrations/0021_real_skreet.sql rename to cloud/packages/core/migrations/0021_real_skreet.sql diff --git a/packages/core/migrations/0022_clean_living_lightning.sql b/cloud/packages/core/migrations/0022_clean_living_lightning.sql similarity index 100% rename from packages/core/migrations/0022_clean_living_lightning.sql rename to cloud/packages/core/migrations/0022_clean_living_lightning.sql diff --git a/packages/core/migrations/0023_flawless_steel_serpent.sql b/cloud/packages/core/migrations/0023_flawless_steel_serpent.sql similarity index 100% rename from packages/core/migrations/0023_flawless_steel_serpent.sql rename to cloud/packages/core/migrations/0023_flawless_steel_serpent.sql diff --git a/packages/core/migrations/0024_damp_cerise.sql b/cloud/packages/core/migrations/0024_damp_cerise.sql similarity index 100% rename from packages/core/migrations/0024_damp_cerise.sql rename to cloud/packages/core/migrations/0024_damp_cerise.sql diff --git a/packages/core/migrations/0025_bitter_jack_flag.sql b/cloud/packages/core/migrations/0025_bitter_jack_flag.sql similarity index 100% rename from packages/core/migrations/0025_bitter_jack_flag.sql rename to cloud/packages/core/migrations/0025_bitter_jack_flag.sql diff --git a/packages/core/migrations/meta/0000_snapshot.json b/cloud/packages/core/migrations/meta/0000_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0000_snapshot.json rename to cloud/packages/core/migrations/meta/0000_snapshot.json diff --git a/packages/core/migrations/meta/0001_snapshot.json b/cloud/packages/core/migrations/meta/0001_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0001_snapshot.json rename to cloud/packages/core/migrations/meta/0001_snapshot.json diff --git a/packages/core/migrations/meta/0002_snapshot.json b/cloud/packages/core/migrations/meta/0002_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0002_snapshot.json rename to cloud/packages/core/migrations/meta/0002_snapshot.json diff --git a/packages/core/migrations/meta/0003_snapshot.json b/cloud/packages/core/migrations/meta/0003_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0003_snapshot.json rename to cloud/packages/core/migrations/meta/0003_snapshot.json diff --git a/packages/core/migrations/meta/0004_snapshot.json b/cloud/packages/core/migrations/meta/0004_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0004_snapshot.json rename to cloud/packages/core/migrations/meta/0004_snapshot.json diff --git a/packages/core/migrations/meta/0005_snapshot.json b/cloud/packages/core/migrations/meta/0005_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0005_snapshot.json rename to cloud/packages/core/migrations/meta/0005_snapshot.json diff --git a/packages/core/migrations/meta/0006_snapshot.json b/cloud/packages/core/migrations/meta/0006_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0006_snapshot.json rename to cloud/packages/core/migrations/meta/0006_snapshot.json diff --git a/packages/core/migrations/meta/0007_snapshot.json b/cloud/packages/core/migrations/meta/0007_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0007_snapshot.json rename to cloud/packages/core/migrations/meta/0007_snapshot.json diff --git a/packages/core/migrations/meta/0008_snapshot.json b/cloud/packages/core/migrations/meta/0008_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0008_snapshot.json rename to cloud/packages/core/migrations/meta/0008_snapshot.json diff --git a/packages/core/migrations/meta/0009_snapshot.json b/cloud/packages/core/migrations/meta/0009_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0009_snapshot.json rename to cloud/packages/core/migrations/meta/0009_snapshot.json diff --git a/packages/core/migrations/meta/0010_snapshot.json b/cloud/packages/core/migrations/meta/0010_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0010_snapshot.json rename to cloud/packages/core/migrations/meta/0010_snapshot.json diff --git a/packages/core/migrations/meta/0011_snapshot.json b/cloud/packages/core/migrations/meta/0011_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0011_snapshot.json rename to cloud/packages/core/migrations/meta/0011_snapshot.json diff --git a/packages/core/migrations/meta/0012_snapshot.json b/cloud/packages/core/migrations/meta/0012_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0012_snapshot.json rename to cloud/packages/core/migrations/meta/0012_snapshot.json diff --git a/packages/core/migrations/meta/0013_snapshot.json b/cloud/packages/core/migrations/meta/0013_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0013_snapshot.json rename to cloud/packages/core/migrations/meta/0013_snapshot.json diff --git a/packages/core/migrations/meta/0014_snapshot.json b/cloud/packages/core/migrations/meta/0014_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0014_snapshot.json rename to cloud/packages/core/migrations/meta/0014_snapshot.json diff --git a/packages/core/migrations/meta/0015_snapshot.json b/cloud/packages/core/migrations/meta/0015_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0015_snapshot.json rename to cloud/packages/core/migrations/meta/0015_snapshot.json diff --git a/packages/core/migrations/meta/0016_snapshot.json b/cloud/packages/core/migrations/meta/0016_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0016_snapshot.json rename to cloud/packages/core/migrations/meta/0016_snapshot.json diff --git a/packages/core/migrations/meta/0017_snapshot.json b/cloud/packages/core/migrations/meta/0017_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0017_snapshot.json rename to cloud/packages/core/migrations/meta/0017_snapshot.json diff --git a/packages/core/migrations/meta/0018_snapshot.json b/cloud/packages/core/migrations/meta/0018_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0018_snapshot.json rename to cloud/packages/core/migrations/meta/0018_snapshot.json diff --git a/packages/core/migrations/meta/0019_snapshot.json b/cloud/packages/core/migrations/meta/0019_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0019_snapshot.json rename to cloud/packages/core/migrations/meta/0019_snapshot.json diff --git a/packages/core/migrations/meta/0020_snapshot.json b/cloud/packages/core/migrations/meta/0020_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0020_snapshot.json rename to cloud/packages/core/migrations/meta/0020_snapshot.json diff --git a/packages/core/migrations/meta/0021_snapshot.json b/cloud/packages/core/migrations/meta/0021_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0021_snapshot.json rename to cloud/packages/core/migrations/meta/0021_snapshot.json diff --git a/packages/core/migrations/meta/0022_snapshot.json b/cloud/packages/core/migrations/meta/0022_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0022_snapshot.json rename to cloud/packages/core/migrations/meta/0022_snapshot.json diff --git a/packages/core/migrations/meta/0023_snapshot.json b/cloud/packages/core/migrations/meta/0023_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0023_snapshot.json rename to cloud/packages/core/migrations/meta/0023_snapshot.json diff --git a/packages/core/migrations/meta/0024_snapshot.json b/cloud/packages/core/migrations/meta/0024_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0024_snapshot.json rename to cloud/packages/core/migrations/meta/0024_snapshot.json diff --git a/packages/core/migrations/meta/0025_snapshot.json b/cloud/packages/core/migrations/meta/0025_snapshot.json similarity index 100% rename from packages/core/migrations/meta/0025_snapshot.json rename to cloud/packages/core/migrations/meta/0025_snapshot.json diff --git a/packages/core/migrations/meta/_journal.json b/cloud/packages/core/migrations/meta/_journal.json similarity index 100% rename from packages/core/migrations/meta/_journal.json rename to cloud/packages/core/migrations/meta/_journal.json diff --git a/packages/core/package.json b/cloud/packages/core/package.json similarity index 100% rename from packages/core/package.json rename to cloud/packages/core/package.json diff --git a/packages/core/src/account/index.ts b/cloud/packages/core/src/account/index.ts similarity index 100% rename from packages/core/src/account/index.ts rename to cloud/packages/core/src/account/index.ts diff --git a/packages/core/src/actor.ts b/cloud/packages/core/src/actor.ts similarity index 100% rename from packages/core/src/actor.ts rename to cloud/packages/core/src/actor.ts diff --git a/packages/core/src/base-game/base-game.sql.ts b/cloud/packages/core/src/base-game/base-game.sql.ts similarity index 100% rename from packages/core/src/base-game/base-game.sql.ts rename to cloud/packages/core/src/base-game/base-game.sql.ts diff --git a/packages/core/src/base-game/index.ts b/cloud/packages/core/src/base-game/index.ts similarity index 100% rename from packages/core/src/base-game/index.ts rename to cloud/packages/core/src/base-game/index.ts diff --git a/packages/core/src/categories/categories.sql.ts b/cloud/packages/core/src/categories/categories.sql.ts similarity index 100% rename from packages/core/src/categories/categories.sql.ts rename to cloud/packages/core/src/categories/categories.sql.ts diff --git a/packages/core/src/categories/index.ts b/cloud/packages/core/src/categories/index.ts similarity index 100% rename from packages/core/src/categories/index.ts rename to cloud/packages/core/src/categories/index.ts diff --git a/packages/core/src/client/index.ts b/cloud/packages/core/src/client/index.ts similarity index 100% rename from packages/core/src/client/index.ts rename to cloud/packages/core/src/client/index.ts diff --git a/packages/core/src/client/steam.ts b/cloud/packages/core/src/client/steam.ts similarity index 100% rename from packages/core/src/client/steam.ts rename to cloud/packages/core/src/client/steam.ts diff --git a/packages/core/src/client/types.ts b/cloud/packages/core/src/client/types.ts similarity index 100% rename from packages/core/src/client/types.ts rename to cloud/packages/core/src/client/types.ts diff --git a/packages/core/src/client/utils.ts b/cloud/packages/core/src/client/utils.ts similarity index 100% rename from packages/core/src/client/utils.ts rename to cloud/packages/core/src/client/utils.ts diff --git a/packages/core/src/common.ts b/cloud/packages/core/src/common.ts similarity index 100% rename from packages/core/src/common.ts rename to cloud/packages/core/src/common.ts diff --git a/packages/core/src/context.ts b/cloud/packages/core/src/context.ts similarity index 100% rename from packages/core/src/context.ts rename to cloud/packages/core/src/context.ts diff --git a/packages/core/src/drizzle/index.ts b/cloud/packages/core/src/drizzle/index.ts similarity index 100% rename from packages/core/src/drizzle/index.ts rename to cloud/packages/core/src/drizzle/index.ts diff --git a/packages/core/src/drizzle/transaction.ts b/cloud/packages/core/src/drizzle/transaction.ts similarity index 100% rename from packages/core/src/drizzle/transaction.ts rename to cloud/packages/core/src/drizzle/transaction.ts diff --git a/packages/core/src/drizzle/types.ts b/cloud/packages/core/src/drizzle/types.ts similarity index 100% rename from packages/core/src/drizzle/types.ts rename to cloud/packages/core/src/drizzle/types.ts diff --git a/packages/core/src/email/index.ts b/cloud/packages/core/src/email/index.ts similarity index 100% rename from packages/core/src/email/index.ts rename to cloud/packages/core/src/email/index.ts diff --git a/packages/core/src/error.ts b/cloud/packages/core/src/error.ts similarity index 100% rename from packages/core/src/error.ts rename to cloud/packages/core/src/error.ts diff --git a/packages/core/src/event.ts b/cloud/packages/core/src/event.ts similarity index 100% rename from packages/core/src/event.ts rename to cloud/packages/core/src/event.ts diff --git a/packages/core/src/examples.ts b/cloud/packages/core/src/examples.ts similarity index 100% rename from packages/core/src/examples.ts rename to cloud/packages/core/src/examples.ts diff --git a/packages/core/src/friend/friend.sql.ts b/cloud/packages/core/src/friend/friend.sql.ts similarity index 100% rename from packages/core/src/friend/friend.sql.ts rename to cloud/packages/core/src/friend/friend.sql.ts diff --git a/packages/core/src/friend/index.ts b/cloud/packages/core/src/friend/index.ts similarity index 100% rename from packages/core/src/friend/index.ts rename to cloud/packages/core/src/friend/index.ts diff --git a/packages/core/src/game/game.sql.ts b/cloud/packages/core/src/game/game.sql.ts similarity index 100% rename from packages/core/src/game/game.sql.ts rename to cloud/packages/core/src/game/game.sql.ts diff --git a/packages/core/src/game/index.ts b/cloud/packages/core/src/game/index.ts similarity index 100% rename from packages/core/src/game/index.ts rename to cloud/packages/core/src/game/index.ts diff --git a/packages/core/src/images/images.sql.ts b/cloud/packages/core/src/images/images.sql.ts similarity index 100% rename from packages/core/src/images/images.sql.ts rename to cloud/packages/core/src/images/images.sql.ts diff --git a/packages/core/src/images/index.ts b/cloud/packages/core/src/images/index.ts similarity index 100% rename from packages/core/src/images/index.ts rename to cloud/packages/core/src/images/index.ts diff --git a/packages/core/src/library/index.ts b/cloud/packages/core/src/library/index.ts similarity index 100% rename from packages/core/src/library/index.ts rename to cloud/packages/core/src/library/index.ts diff --git a/packages/core/src/library/library.sql.ts b/cloud/packages/core/src/library/library.sql.ts similarity index 100% rename from packages/core/src/library/library.sql.ts rename to cloud/packages/core/src/library/library.sql.ts diff --git a/packages/core/src/polar/index.ts b/cloud/packages/core/src/polar/index.ts similarity index 100% rename from packages/core/src/polar/index.ts rename to cloud/packages/core/src/polar/index.ts diff --git a/packages/core/src/realtime/index.ts b/cloud/packages/core/src/realtime/index.ts similarity index 100% rename from packages/core/src/realtime/index.ts rename to cloud/packages/core/src/realtime/index.ts diff --git a/packages/core/src/steam/index.ts b/cloud/packages/core/src/steam/index.ts similarity index 100% rename from packages/core/src/steam/index.ts rename to cloud/packages/core/src/steam/index.ts diff --git a/packages/core/src/steam/steam.sql.ts b/cloud/packages/core/src/steam/steam.sql.ts similarity index 100% rename from packages/core/src/steam/steam.sql.ts rename to cloud/packages/core/src/steam/steam.sql.ts diff --git a/packages/core/src/user/index.ts b/cloud/packages/core/src/user/index.ts similarity index 100% rename from packages/core/src/user/index.ts rename to cloud/packages/core/src/user/index.ts diff --git a/packages/core/src/user/user.sql.ts b/cloud/packages/core/src/user/user.sql.ts similarity index 100% rename from packages/core/src/user/user.sql.ts rename to cloud/packages/core/src/user/user.sql.ts diff --git a/packages/core/src/utils/fn.ts b/cloud/packages/core/src/utils/fn.ts similarity index 100% rename from packages/core/src/utils/fn.ts rename to cloud/packages/core/src/utils/fn.ts diff --git a/packages/core/src/utils/helper.ts b/cloud/packages/core/src/utils/helper.ts similarity index 100% rename from packages/core/src/utils/helper.ts rename to cloud/packages/core/src/utils/helper.ts diff --git a/packages/core/src/utils/id.ts b/cloud/packages/core/src/utils/id.ts similarity index 100% rename from packages/core/src/utils/id.ts rename to cloud/packages/core/src/utils/id.ts diff --git a/packages/core/src/utils/index.ts b/cloud/packages/core/src/utils/index.ts similarity index 100% rename from packages/core/src/utils/index.ts rename to cloud/packages/core/src/utils/index.ts diff --git a/packages/core/src/utils/invite.ts b/cloud/packages/core/src/utils/invite.ts similarity index 100% rename from packages/core/src/utils/invite.ts rename to cloud/packages/core/src/utils/invite.ts diff --git a/packages/core/src/utils/log.ts b/cloud/packages/core/src/utils/log.ts similarity index 100% rename from packages/core/src/utils/log.ts rename to cloud/packages/core/src/utils/log.ts diff --git a/packages/core/sst-env.d.ts b/cloud/packages/core/sst-env.d.ts similarity index 100% rename from packages/core/sst-env.d.ts rename to cloud/packages/core/sst-env.d.ts diff --git a/packages/core/tsconfig.json b/cloud/packages/core/tsconfig.json similarity index 100% rename from packages/core/tsconfig.json rename to cloud/packages/core/tsconfig.json diff --git a/packages/functions/.gitignore b/cloud/packages/functions/.gitignore similarity index 100% rename from packages/functions/.gitignore rename to cloud/packages/functions/.gitignore diff --git a/cloud/packages/functions/.gitkeep b/cloud/packages/functions/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/functions/README.md b/cloud/packages/functions/README.md similarity index 100% rename from packages/functions/README.md rename to cloud/packages/functions/README.md diff --git a/packages/functions/package.json b/cloud/packages/functions/package.json similarity index 100% rename from packages/functions/package.json rename to cloud/packages/functions/package.json diff --git a/packages/functions/src/api/account.ts b/cloud/packages/functions/src/api/account.ts similarity index 100% rename from packages/functions/src/api/account.ts rename to cloud/packages/functions/src/api/account.ts diff --git a/packages/functions/src/api/friend.ts b/cloud/packages/functions/src/api/friend.ts similarity index 100% rename from packages/functions/src/api/friend.ts rename to cloud/packages/functions/src/api/friend.ts diff --git a/packages/functions/src/api/game.ts b/cloud/packages/functions/src/api/game.ts similarity index 100% rename from packages/functions/src/api/game.ts rename to cloud/packages/functions/src/api/game.ts diff --git a/packages/functions/src/api/index.ts b/cloud/packages/functions/src/api/index.ts similarity index 100% rename from packages/functions/src/api/index.ts rename to cloud/packages/functions/src/api/index.ts diff --git a/packages/functions/src/api/realtime/actor-core.ts b/cloud/packages/functions/src/api/realtime/actor-core.ts similarity index 100% rename from packages/functions/src/api/realtime/actor-core.ts rename to cloud/packages/functions/src/api/realtime/actor-core.ts diff --git a/packages/functions/src/api/realtime/index.ts b/cloud/packages/functions/src/api/realtime/index.ts similarity index 100% rename from packages/functions/src/api/realtime/index.ts rename to cloud/packages/functions/src/api/realtime/index.ts diff --git a/packages/functions/src/api/steam.ts b/cloud/packages/functions/src/api/steam.ts similarity index 100% rename from packages/functions/src/api/steam.ts rename to cloud/packages/functions/src/api/steam.ts diff --git a/packages/functions/src/api/utils/auth.ts b/cloud/packages/functions/src/api/utils/auth.ts similarity index 100% rename from packages/functions/src/api/utils/auth.ts rename to cloud/packages/functions/src/api/utils/auth.ts diff --git a/packages/functions/src/api/utils/error.ts b/cloud/packages/functions/src/api/utils/error.ts similarity index 100% rename from packages/functions/src/api/utils/error.ts rename to cloud/packages/functions/src/api/utils/error.ts diff --git a/packages/functions/src/api/utils/hook.ts b/cloud/packages/functions/src/api/utils/hook.ts similarity index 100% rename from packages/functions/src/api/utils/hook.ts rename to cloud/packages/functions/src/api/utils/hook.ts diff --git a/packages/functions/src/api/utils/index.ts b/cloud/packages/functions/src/api/utils/index.ts similarity index 100% rename from packages/functions/src/api/utils/index.ts rename to cloud/packages/functions/src/api/utils/index.ts diff --git a/packages/functions/src/api/utils/result.ts b/cloud/packages/functions/src/api/utils/result.ts similarity index 100% rename from packages/functions/src/api/utils/result.ts rename to cloud/packages/functions/src/api/utils/result.ts diff --git a/packages/functions/src/api/utils/validator.ts b/cloud/packages/functions/src/api/utils/validator.ts similarity index 100% rename from packages/functions/src/api/utils/validator.ts rename to cloud/packages/functions/src/api/utils/validator.ts diff --git a/packages/functions/src/auth/adapters/discord.ts b/cloud/packages/functions/src/auth/adapters/discord.ts similarity index 100% rename from packages/functions/src/auth/adapters/discord.ts rename to cloud/packages/functions/src/auth/adapters/discord.ts diff --git a/packages/functions/src/auth/adapters/github.ts b/cloud/packages/functions/src/auth/adapters/github.ts similarity index 100% rename from packages/functions/src/auth/adapters/github.ts rename to cloud/packages/functions/src/auth/adapters/github.ts diff --git a/packages/functions/src/auth/adapters/index.ts b/cloud/packages/functions/src/auth/adapters/index.ts similarity index 100% rename from packages/functions/src/auth/adapters/index.ts rename to cloud/packages/functions/src/auth/adapters/index.ts diff --git a/packages/functions/src/auth/adapters/password.ts b/cloud/packages/functions/src/auth/adapters/password.ts similarity index 100% rename from packages/functions/src/auth/adapters/password.ts rename to cloud/packages/functions/src/auth/adapters/password.ts diff --git a/packages/functions/src/auth/index.ts b/cloud/packages/functions/src/auth/index.ts similarity index 100% rename from packages/functions/src/auth/index.ts rename to cloud/packages/functions/src/auth/index.ts diff --git a/packages/functions/src/auth/ui/base.tsx b/cloud/packages/functions/src/auth/ui/base.tsx similarity index 100% rename from packages/functions/src/auth/ui/base.tsx rename to cloud/packages/functions/src/auth/ui/base.tsx diff --git a/packages/functions/src/auth/ui/css.ts b/cloud/packages/functions/src/auth/ui/css.ts similarity index 100% rename from packages/functions/src/auth/ui/css.ts rename to cloud/packages/functions/src/auth/ui/css.ts diff --git a/packages/functions/src/auth/ui/index.ts b/cloud/packages/functions/src/auth/ui/index.ts similarity index 100% rename from packages/functions/src/auth/ui/index.ts rename to cloud/packages/functions/src/auth/ui/index.ts diff --git a/packages/functions/src/auth/ui/oauth2.tsx b/cloud/packages/functions/src/auth/ui/oauth2.tsx similarity index 100% rename from packages/functions/src/auth/ui/oauth2.tsx rename to cloud/packages/functions/src/auth/ui/oauth2.tsx diff --git a/packages/functions/src/auth/ui/password.tsx b/cloud/packages/functions/src/auth/ui/password.tsx similarity index 100% rename from packages/functions/src/auth/ui/password.tsx rename to cloud/packages/functions/src/auth/ui/password.tsx diff --git a/packages/functions/src/auth/ui/select.tsx b/cloud/packages/functions/src/auth/ui/select.tsx similarity index 100% rename from packages/functions/src/auth/ui/select.tsx rename to cloud/packages/functions/src/auth/ui/select.tsx diff --git a/packages/functions/src/auth/utils/discord.ts b/cloud/packages/functions/src/auth/utils/discord.ts similarity index 100% rename from packages/functions/src/auth/utils/discord.ts rename to cloud/packages/functions/src/auth/utils/discord.ts diff --git a/packages/functions/src/auth/utils/github.ts b/cloud/packages/functions/src/auth/utils/github.ts similarity index 100% rename from packages/functions/src/auth/utils/github.ts rename to cloud/packages/functions/src/auth/utils/github.ts diff --git a/packages/functions/src/auth/utils/index.ts b/cloud/packages/functions/src/auth/utils/index.ts similarity index 100% rename from packages/functions/src/auth/utils/index.ts rename to cloud/packages/functions/src/auth/utils/index.ts diff --git a/packages/functions/src/events/index.ts b/cloud/packages/functions/src/events/index.ts similarity index 100% rename from packages/functions/src/events/index.ts rename to cloud/packages/functions/src/events/index.ts diff --git a/packages/functions/src/queues/retry.ts b/cloud/packages/functions/src/queues/retry.ts similarity index 100% rename from packages/functions/src/queues/retry.ts rename to cloud/packages/functions/src/queues/retry.ts diff --git a/packages/functions/src/realtime/authorizer.ts b/cloud/packages/functions/src/realtime/authorizer.ts similarity index 100% rename from packages/functions/src/realtime/authorizer.ts rename to cloud/packages/functions/src/realtime/authorizer.ts diff --git a/packages/functions/src/realtime/create.ts b/cloud/packages/functions/src/realtime/create.ts similarity index 100% rename from packages/functions/src/realtime/create.ts rename to cloud/packages/functions/src/realtime/create.ts diff --git a/packages/functions/src/realtime/subscriber.ts b/cloud/packages/functions/src/realtime/subscriber.ts similarity index 100% rename from packages/functions/src/realtime/subscriber.ts rename to cloud/packages/functions/src/realtime/subscriber.ts diff --git a/packages/functions/src/subjects.ts b/cloud/packages/functions/src/subjects.ts similarity index 100% rename from packages/functions/src/subjects.ts rename to cloud/packages/functions/src/subjects.ts diff --git a/packages/functions/src/utils/patch-logger.ts b/cloud/packages/functions/src/utils/patch-logger.ts similarity index 100% rename from packages/functions/src/utils/patch-logger.ts rename to cloud/packages/functions/src/utils/patch-logger.ts diff --git a/packages/functions/sst-env.d.ts b/cloud/packages/functions/sst-env.d.ts similarity index 100% rename from packages/functions/sst-env.d.ts rename to cloud/packages/functions/sst-env.d.ts diff --git a/packages/functions/tsconfig.json b/cloud/packages/functions/tsconfig.json similarity index 100% rename from packages/functions/tsconfig.json rename to cloud/packages/functions/tsconfig.json diff --git a/packages/maitred/go.mod b/cloud/packages/maitred/go.mod similarity index 100% rename from packages/maitred/go.mod rename to cloud/packages/maitred/go.mod diff --git a/packages/maitred/go.sum b/cloud/packages/maitred/go.sum similarity index 100% rename from packages/maitred/go.sum rename to cloud/packages/maitred/go.sum diff --git a/packages/maitred/internal/auth/auth.go b/cloud/packages/maitred/internal/auth/auth.go similarity index 100% rename from packages/maitred/internal/auth/auth.go rename to cloud/packages/maitred/internal/auth/auth.go diff --git a/packages/maitred/internal/containers/containers.go b/cloud/packages/maitred/internal/containers/containers.go similarity index 100% rename from packages/maitred/internal/containers/containers.go rename to cloud/packages/maitred/internal/containers/containers.go diff --git a/packages/maitred/internal/containers/docker.go b/cloud/packages/maitred/internal/containers/docker.go similarity index 100% rename from packages/maitred/internal/containers/docker.go rename to cloud/packages/maitred/internal/containers/docker.go diff --git a/packages/maitred/internal/flags.go b/cloud/packages/maitred/internal/flags.go similarity index 100% rename from packages/maitred/internal/flags.go rename to cloud/packages/maitred/internal/flags.go diff --git a/packages/maitred/internal/handler.go b/cloud/packages/maitred/internal/handler.go similarity index 100% rename from packages/maitred/internal/handler.go rename to cloud/packages/maitred/internal/handler.go diff --git a/packages/maitred/internal/realtime/managed.go b/cloud/packages/maitred/internal/realtime/managed.go similarity index 100% rename from packages/maitred/internal/realtime/managed.go rename to cloud/packages/maitred/internal/realtime/managed.go diff --git a/packages/maitred/internal/realtime/messages.go b/cloud/packages/maitred/internal/realtime/messages.go similarity index 100% rename from packages/maitred/internal/realtime/messages.go rename to cloud/packages/maitred/internal/realtime/messages.go diff --git a/packages/maitred/internal/realtime/realtime.go b/cloud/packages/maitred/internal/realtime/realtime.go similarity index 100% rename from packages/maitred/internal/realtime/realtime.go rename to cloud/packages/maitred/internal/realtime/realtime.go diff --git a/packages/maitred/internal/realtime/utils.go b/cloud/packages/maitred/internal/realtime/utils.go similarity index 100% rename from packages/maitred/internal/realtime/utils.go rename to cloud/packages/maitred/internal/realtime/utils.go diff --git a/packages/maitred/internal/resource/resource.go b/cloud/packages/maitred/internal/resource/resource.go similarity index 100% rename from packages/maitred/internal/resource/resource.go rename to cloud/packages/maitred/internal/resource/resource.go diff --git a/packages/maitred/internal/system/gpu.go b/cloud/packages/maitred/internal/system/gpu.go similarity index 100% rename from packages/maitred/internal/system/gpu.go rename to cloud/packages/maitred/internal/system/gpu.go diff --git a/packages/maitred/internal/system/gpu_intel.go b/cloud/packages/maitred/internal/system/gpu_intel.go similarity index 100% rename from packages/maitred/internal/system/gpu_intel.go rename to cloud/packages/maitred/internal/system/gpu_intel.go diff --git a/packages/maitred/internal/system/gpu_intel_i915.go b/cloud/packages/maitred/internal/system/gpu_intel_i915.go similarity index 100% rename from packages/maitred/internal/system/gpu_intel_i915.go rename to cloud/packages/maitred/internal/system/gpu_intel_i915.go diff --git a/packages/maitred/internal/system/gpu_intel_xe.go b/cloud/packages/maitred/internal/system/gpu_intel_xe.go similarity index 100% rename from packages/maitred/internal/system/gpu_intel_xe.go rename to cloud/packages/maitred/internal/system/gpu_intel_xe.go diff --git a/packages/maitred/internal/system/gpu_nvidia.go b/cloud/packages/maitred/internal/system/gpu_nvidia.go similarity index 100% rename from packages/maitred/internal/system/gpu_nvidia.go rename to cloud/packages/maitred/internal/system/gpu_nvidia.go diff --git a/packages/maitred/internal/system/id.go b/cloud/packages/maitred/internal/system/id.go similarity index 100% rename from packages/maitred/internal/system/id.go rename to cloud/packages/maitred/internal/system/id.go diff --git a/packages/maitred/internal/system/resources.go b/cloud/packages/maitred/internal/system/resources.go similarity index 100% rename from packages/maitred/internal/system/resources.go rename to cloud/packages/maitred/internal/system/resources.go diff --git a/packages/maitred/main.go b/cloud/packages/maitred/main.go similarity index 100% rename from packages/maitred/main.go rename to cloud/packages/maitred/main.go diff --git a/packages/maitred/package.json b/cloud/packages/maitred/package.json similarity index 100% rename from packages/maitred/package.json rename to cloud/packages/maitred/package.json diff --git a/packages/maitred/sst-env.d.ts b/cloud/packages/maitred/sst-env.d.ts similarity index 100% rename from packages/maitred/sst-env.d.ts rename to cloud/packages/maitred/sst-env.d.ts diff --git a/infra/app.ts b/infra/app.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/server/pkg/PKGBUILD b/packages/server/pkg/PKGBUILD index c172511e..95256d12 100644 --- a/packages/server/pkg/PKGBUILD +++ b/packages/server/pkg/PKGBUILD @@ -11,22 +11,22 @@ depends=('rust' 'git' 'rustup' 'pkgconf' 'wayland') source=("nestri::git+https://github.com/nestriness/nestri.git") sha512sums=('SKIP') pkgver() { - cd "$srcdir/${pkgname%-git}" - printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" + cd "$srcdir/${pkgname%-git}" + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" } prepare() { - cd "$srcdir/${pkgname%-git}" + cd "$srcdir/${pkgname%-git}" } build() { - cd "$srcdir/${pkgname%-git}/packages/server" - - CARGO_TARGET_DIR="./build" sudo cargo build -j$(nproc) + cd "$srcdir/${pkgname%-git}/packages/server" + + CARGO_TARGET_DIR="./build" sudo cargo build -j$(nproc) } package() { - cd "$srcdir/${pkgname%-git}/packages/server" + cd "$srcdir/${pkgname%-git}/packages/server" - install -m755 -Dt "${pkgdir}/usr/bin" build/release/nestri -} \ No newline at end of file + install -m755 -Dt "${pkgdir}/usr/bin" build/release/nestri +} diff --git a/packages/ui/.eslintrc.cjs b/packages/ui/.eslintrc.cjs deleted file mode 100644 index 74abe5a9..00000000 --- a/packages/ui/.eslintrc.cjs +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true, - node: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:qwik/recommended", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - tsconfigRootDir: __dirname, - project: ["./tsconfig.json"], - ecmaVersion: 2021, - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: ["@typescript-eslint"], - rules: { - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-this-alias": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/ban-ts-comment": "off", - "prefer-spread": "off", - "no-case-declarations": "off", - "no-console": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/consistent-type-imports": "warn", - "@typescript-eslint/no-unnecessary-condition": "warn", - }, -}; \ No newline at end of file diff --git a/cloud/packages/core/.gitkeep b/packages/ui/.gitkeep similarity index 100% rename from cloud/packages/core/.gitkeep rename to packages/ui/.gitkeep diff --git a/packages/ui/globals.css b/packages/ui/globals.css deleted file mode 100644 index 5ce3e3dc..00000000 --- a/packages/ui/globals.css +++ /dev/null @@ -1,520 +0,0 @@ -@tailwind components; -@tailwind base; -@tailwind utilities; - -@font-face { - font-family: 'Basement Grotesque'; - font-style: normal; - font-display: swap; - font-weight: 800; - src: url("/fonts/BasementGrotesque-Black.woff2") format('woff2'), url("/fonts/BasementGrotesque-Black.woff") format('woff'); -} - -@layer base { - - html { - width: 100%; - height: 100%; - } - - html, - html * { - scrollbar-color: theme("colors.gray.700") theme("colors.gray.300"); - scrollbar-width: thin; - scroll-behavior: smooth; - } - - *::selection { - background-color: theme("colors.primary.100"); - color: theme("colors.primary.500"); - } - - *::-moz-selection { - background-color: theme("colors.primary.100"); - color: theme("colors.primary.500"); - } - - html.dark *::selection { - background-color: theme("colors.primary.500"); - color: theme("colors.primary.100"); - } - - html.dark *::-moz-selection { - background-color: theme("colors.primary.500"); - color: theme("colors.primary.100"); - } - - html.dark, - html.dark * { - scrollbar-color: theme("colors.gray.300") theme("colors.gray.700"); - scrollbar-width: thin; - } - - @media (prefers-color-scheme: dark) { - *::selection { - background-color: theme("colors.primary.500"); - color: theme("colors.primary.100"); - } - - *::-moz-selection { - background-color: theme("colors.primary.500"); - color: theme("colors.primary.100"); - } - - html, - html * { - scrollbar-color: theme("colors.gray.300") theme("colors.gray.700"); - scrollbar-width: thin; - } - } - - input:-webkit-autofill, - input:-webkit-autofill:focus { - transition: background-color 0s 600000s, color 0s 600000s !important; - } - -} - -.marquee-container { - width: 100%; - padding: 1rem; - scale: var(--scale); -} - -.marquee-container[data-spill=true]::after { - --padding-x: 1rem; - --padding-y: 1rem; - content: ""; - position: fixed; - top: 50%; - left: 50%; - background: hsl(10 80% 0% / 0.25); - width: calc(var(--scale) * 10000vw); - height: calc(var(--scale) * 10000vh); - pointer-events: none; - translate: -50% -50%; - mask: - linear-gradient(white, white) 50% 50% / 100% 100% no-repeat, - linear-gradient(white, white) 50% 50% / calc(100cqi + (var(--padding-x) * 2)) calc(100cqh + (var(--padding-y) * 2)) no-repeat; - mask-composite: exclude; -} - -.marquee-container:not([data-spill=true]) { - overflow: hidden; -} - -[data-direction=horizontal] { - height: 100%; -} - -[data-direction=vertical] { - width: 100%; -} - -.marquee-container ul { - display: flex; - padding: 0; - margin: 0; - list-style-type: none; -} - -[data-reverse=true] * { - animation-direction: reverse !important; -} - -[data-translate=track][data-direction=horizontal] ul { - --destination-x: -100%; - animation: track-translate calc(var(--speed) * 1s) infinite linear; -} - -[data-translate=track][data-direction=vertical] ul { - --destination-y: -100%; - animation: track-translate calc(var(--speed) * 1s) infinite linear; -} - -[data-translate=track][data-direction=horizontal][data-pad=true] ul { - --destination-x: calc((100% / -3) * 2); - translate: calc(100% / -3) 0; -} - -[data-translate=track][data-direction=vertical][data-pad=true] ul { - --destination-y: calc((100% / -3) * 2); - translate: 0 calc(100% / -3); -} - - -[data-pad-diff=true] .pad { - background: hsl(0 0% 10%); - color: hsl(0 0% 98%); -} - -@keyframes track-translate { - to { - translate: var(--destination-x, 0) var(--destination-y, 0); - } -} - -[data-direction=horizontal] ul { - height: max-content; - width: fit-content; - align-items: center; -} - -[data-direction=vertical] ul { - width: 100%; - height: fit-content; - justify-items: center; - flex-direction: column; -} - -[data-play-state=running] :is(ul, li) { - animation-play-state: running !important; -} - -[data-play-state=paused] :is(ul, li) { - animation-play-state: paused !important; -} - - -/* The animation stuff */ -@media(prefers-reduced-motion: no-preference) { - [data-translate=items] ul { - gap: 0; - } - - [data-translate=items][data-direction=horizontal].marquee-container { - padding-inline: 0; - } - - [data-translate=items][data-direction=vertical].marquee-container { - padding-block: 0; - } - - [data-translate=items][data-spill=true][data-direction=horizontal].marquee-container::after { - --padding-x: 0rem; - } - - [data-translate=items][data-direction=vertical][data-spill=true].marquee-container::after { - --padding-y: 0rem; - } - - [data-pause-on-hover=true]:hover li { - animation-play-state: paused !important; - } - - [data-translate=items] li { - --duration: calc(var(--speed) * 1s); - --delay: calc((var(--duration) / var(--count)) * (var(--index, 0) - (var(--count) * 0.5))); - animation: slide var(--duration) calc(var(--delay) - (var(--count) * 0.5s)) infinite linear paused; - translate: var(--origin-x) var(--origin-y); - } - - [data-translate=items][data-direction=horizontal] li { - --origin-x: calc(((var(--count) - var(--index)) + var(--inset, 0)) * 100%); - --origin-y: 0; - --destination-x: calc(calc((var(--index) + 1 + var(--outset, 0)) * -100%)); - --destination-y: 0; - } - - [data-translate=items][data-direction=vertical] li { - --origin-x: 0; - --origin-y: calc(((var(--count) - var(--index)) + var(--inset, 0)) * 100%); - --destination-x: 0; - --destination-y: calc(calc((var(--index) + 1 + var(--outset, 0)) * -100%)); - } - - @keyframes slide { - 100% { - translate: var(--destination-x) var(--destination-y); - } - } -} - -.marquee-animation { - -webkit-animation: loop-animate 60s linear infinite; - animation: loop-animate 60s linear infinite; -} - -@keyframes loop-animate { - 0% { - -webkit-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - } - - 100% { - -webkit-transform: translateX(-50%); - -ms-transform: translateX(-50%); - transform: translateX(-50%); - } -} - -.digit_timing { - transition: translate 1s linear(0, 0.0009 8.51%, -0.0047 19.22%, 0.0016 22.39%, 0.023 27.81%, - 0.0237 30.08%, 0.0144 31.81%, -0.0051 33.48%, -0.1116 39.25%, -0.1181 40.59%, - -0.1058 41.79%, -0.0455, 0.0701 45.34%, 0.9702 55.19%, 1.0696 56.97%, - 1.0987 57.88%, 1.1146 58.82%, 1.1181 59.83%, 1.1092 60.95%, 1.0057 66.48%, - 0.986 68.14%, 0.9765 69.84%, 0.9769 72.16%, 0.9984 77.61%, 1.0047 80.79%, - 0.9991 91.48%, 1); - translate: 0 calc((var(--v) + 1) * (var(--line-height) * -1)); -} - -.modal-sheet { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: slideFromRight; -} - -.modal::backdrop, -.modal-sheet::backdrop { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: fadeIn; -} - -.modal-sheet[data-closing] { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: slideToRight; -} - -.tooltip[data-closing], -.tooltip[data-closed] { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: fadeOut; -} - -.tooltip[data-opening], -.tooltip[data-opened] { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: fadeIn; -} - - -.modal[data-closing]::backdrop, -.modal-sheet[data-closing]::backdrop { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: fadeOut; -} - -.modal { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: modalIn; -} - -.modal[data-closing] { - animation-duration: 0.5s; - animation-timing-function: cubic-bezier(0.32, 0.72, 0, 1); - touch-action: none; - will-change: transform; - transition: transform 0.5s cubic-bezier(0.32, 0.72, 0, 1); - animation-name: modalOut; -} - -@keyframes slideFromRight { - from { - transform: translate3d(var(--initial-transform, 100%), 0, 0); - } - - to { - transform: translate3d(0, 0, 0); - } -} - -@keyframes slideToRight { - to { - transform: translate3d(var(--initial-transform, 100%), 0, 0); - } -} - -@keyframes fadeIn { - from { - opacity: 0; - } - - to { - opacity: 1; - } -} - -@keyframes fadeOut { - to { - opacity: 0; - } -} - -@keyframes modalIn { - from { - opacity: 0; - scale: 0.9; - } - - to { - opacity: 1; - scale: 1; - } -} - -@keyframes modalOut { - to { - opacity: 0; - scale: 0.9; - } -} - -[data-component="spinner"] { - --spinner-size: 20px; - --spinner-color: #000; - - @media (prefers-color-scheme: dark) { - --spinner-color: #FFF; - } - - height: var(--spinner-size, 20px); - width: var(--spinner-size, 20px); - margin-left: calc(var(--spinner-size, 20px)*-1px); - /* display: none; */ - - &>div { - position: relative; - top: 50%; - left: 50%; - height: var(--spinner-size, 20px); - width: var(--spinner-size, 20px); - } - - &>div>div { - animation: spin 1.2s linear infinite; - background: var(--spinner-color); - border-radius: 9999px; - height: 8%; - left: -10%; - position: absolute; - top: -3.9%; - width: 24%; - } - - &>div>div:first-child { - animation-delay: -1.2s; - transform: rotate(.0001deg) translate(146%); - } - - &>div>div:nth-child(2) { - animation-delay: -1.1s; - transform: rotate(30deg) translate(146%); - } - - &>div>div:nth-child(3) { - animation-delay: -1s; - transform: rotate(60deg) translate(146%); - } - - &>div>div:nth-child(4) { - animation-delay: -.9s; - transform: rotate(90deg) translate(146%); - } - - &>div>div:nth-child(5) { - animation-delay: -.8s; - transform: rotate(120deg) translate(146%); - } - - &>div>div:nth-child(6) { - animation-delay: -.7s; - transform: rotate(150deg) translate(146%); - } - - &>div>div:nth-child(7) { - animation-delay: -.6s; - transform: rotate(180deg) translate(146%); - } - - &>div>div:nth-child(8) { - animation-delay: -.5s; - transform: rotate(210deg) translate(146%); - } - - &>div>div:nth-child(9) { - animation-delay: -.4s; - transform: rotate(240deg) translate(146%); - } - - &>div>div:nth-child(10) { - animation-delay: -.3s; - transform: rotate(270deg) translate(146%); - } - - &>div>div:nth-child(11) { - animation-delay: -.2s; - transform: rotate(300deg) translate(146%); - } - - &>div>div:nth-child(12) { - animation-delay: -.1s; - transform: rotate(330deg) translate(146%); - } -} - -@keyframes spin { - 0% { - opacity: 1; - } - - 100% { - opacity: .15; - } -} - -@keyframes bgRotate { - to { - content: var(--tw-content); - transform: rotate(1turn) - } -} - -@keyframes playing { - - 0%, - to { - height: 3px - } - - 50% { - height: 12px - } -} - -.shadow-browser { - box-shadow: 0 30.0333px 63.0111px rgba(45, 48, 57, .09), 0 12.5472px 26.3245px rgba(45, 48, 57, .065), 0 6.70834px 14.0744px rgba(45, 48, 57, .054), 0 3.76064px 7.88997px rgba(45, 48, 57, .045), 0 1.99725px 4.1903px rgba(45, 48, 57, .036), 0 .831099px 1.74368px rgba(45, 48, 57, .025); - border-radius: 7.07px; -} - -.bg-radial-gradient { - filter: blur(32px); - background-image: linear-gradient(90deg, rgb(239, 118, 70), rgb(251, 91, 88), rgb(255, 61, 116), rgb(249, 33, 149), rgb(227, 34, 188), rgb(181, 94, 230), rgb(118, 128, 252), rgb(0, 150, 255), rgb(0, 183, 255), rgb(0, 208, 242), rgb(0, 227, 184), rgb(70, 239, 111));; -} \ No newline at end of file diff --git a/packages/ui/package.json b/packages/ui/package.json deleted file mode 100644 index 4089a1a6..00000000 --- a/packages/ui/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "@nestri/ui", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "files": [ - "tailwind.config.js", - "postcss.config.js", - "globals.css" - ], - "exports": { - ".": "./src/index.ts", - "./react": "./src/react/index.ts", - "./globals.css": "./globals.css", - "./postcss.config": "./postcss.config.js", - "./tailwind.config": "./tailwind.config.js", - "./image": "./src/image/index.ts", - "./design": "./src/design/index.ts" - }, - "scripts": { - "lint": "eslint . --max-warnings 0" - }, - "devDependencies": { - "@builder.io/qwik": "^1.8.0", - "@builder.io/qwik-city": "^1.8.0", - "@builder.io/qwik-react": "0.5.0", - "@fluejs/noscroll": "^1.0.0", - "@fontsource-variable/bricolage-grotesque": "^5.0.1", - "@fontsource/geist-mono": "^5.1.0", - "@fontsource/geist-sans": "^5.1.0", - "@fontsource-variable/mona-sans": "^5.0.1", - "@modular-forms/qwik": "^0.29.0", - "@nestri/core": "*", - "@qwik-ui/headless": "^0.6.4", - "@types/eslint": "^8.56.5", - "@types/node": "^20.11.24", - "@types/nprogress": "^0.2.3", - "@types/react": "^18.2.28", - "@types/react-dom": "^18.2.13", - "@typescript-eslint/eslint-plugin": "latest", - "@typescript-eslint/parser": "latest", - "autoprefixer": "^10.4.20", - "body-scroll-lock-upgrade": "^1.1.0", - "clsx": "^2.1.1", - "eslint": "^8.57.0", - "eslint-plugin-qwik": "latest", - "focus-trap": "^7.5.4", - "framer-motion": "^11.3.24", - "nprogress": "^0.2.0", - "postcss": "^8.4.41", - "prettier": "latest", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-wrap-balancer": "^1.1.1", - "tailwind-merge": "^2.4.0", - "tailwind-variants": "^0.2.1", - "tailwindcss": "^3.4.17", - "tailwindcss-animate": "^1.0.7", - "typescript": "^5.3.3", - "valibot": "^0.42.1" - } -} \ No newline at end of file diff --git a/packages/ui/post.config.js b/packages/ui/post.config.js deleted file mode 100644 index ba7a7e40..00000000 --- a/packages/ui/post.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; \ No newline at end of file diff --git a/packages/ui/postcss.config.js b/packages/ui/postcss.config.js deleted file mode 100644 index 63889e76..00000000 --- a/packages/ui/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; \ No newline at end of file diff --git a/packages/ui/src/avatar.tsx b/packages/ui/src/avatar.tsx deleted file mode 100644 index 055dcc9d..00000000 --- a/packages/ui/src/avatar.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { component$ } from "@builder.io/qwik"; - -const DEFAULT_COLORS = ['#6A5ACD', '#E63525','#20B2AA', '#E87D58']; - -const getModulo = (value: number, divisor: number, useEvenCheck?: number) => { - const remainder = value % divisor; - if (useEvenCheck && Math.floor(value / Math.pow(10, useEvenCheck) % 10) % 2 === 0) { - return -remainder; - } - return remainder; -}; - -const generateColors = (name: string, colors = DEFAULT_COLORS) => { - const hashCode = name.split('').reduce((acc, char) => { - acc = ((acc << 5) - acc) + char.charCodeAt(0); - return acc & acc; - }, 0); - - const hash = Math.abs(hashCode); - const numColors = colors.length; - - return Array.from({ length: 3 }, (_, index) => ({ - color: colors[(hash + index) % numColors], - translateX: getModulo(hash * (index + 1), 4, 1), - translateY: getModulo(hash * (index + 1), 4, 2), - scale: 1.2 + getModulo(hash * (index + 1), 2) / 10, - rotate: getModulo(hash * (index + 1), 360, 1) - })); -}; -type Props = { - name: string; - size?: number; - class?:string; - colors?: string[] -} - -export default component$(({ class:className, name, size = 80, colors = DEFAULT_COLORS }: Props) => { - const colorData = generateColors(name, colors); - - return ( - - {`Fallback avatar for ${name}`} - - - - - - - - - - - - - - - - - ) -}) \ No newline at end of file diff --git a/packages/ui/src/book.tsx b/packages/ui/src/book.tsx deleted file mode 100644 index 02bcaecc..00000000 --- a/packages/ui/src/book.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { component$ } from "@builder.io/qwik"; -import { cn } from "./design"; - -type Props = { - bgColor?: string; - textColor?: string; - title?: string; - class?: string; -} -export default component$(({ bgColor = "hsla(0,0%,89%,1)", textColor = "#000", title = "Design Engineering at Vercel", class: className }: Props) => { - return ( -
-
-
-
-
-
- {title} -
-
-
-
-
-
-
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx deleted file mode 100644 index b500f5d7..00000000 --- a/packages/ui/src/card.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { $, component$, type PropsOf, useVisibleTask$ } from "@builder.io/qwik"; -import { Modal, Portal } from "@nestri/ui"; -import { cn } from "@nestri/ui/design" -import { BasicImageLoader } from "./image"; - -interface Props extends PropsOf<"div"> { - game: { - name: string; - id: number; - }, - size: "xs" | "small" | "large"; - titleWidth: number; - titleHeight: number; -} - -//TODO: Show gradient animation while image loads - -export const Card = component$(({ titleWidth, titleHeight, game, size, ...props }: Props) => { - - const modalUrl = `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/library_hero.jpg`; - const imageUrl = size == "large" ? `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/header.jpg` : `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/library_600x900_2x.jpg`; - const modalTitleUrl = `https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/${game.id}/logo.png` - const loadModalImages = $(() => { - return Promise.all([modalUrl, modalTitleUrl].map(url => { - return new Promise((resolve, reject) => { - const img = new Image(); - // img.crossOrigin = "anonymous" - img.onload = () => resolve(img); - img.onerror = reject; - img.src = url; - }); - })); - }); - - // eslint-disable-next-line qwik/no-use-visible-task - useVisibleTask$(async () => { - await loadModalImages(); - }); - - return ( - - {size === "large" ? ( - -
-
-
-

Continue Playing

-

{game.name}

-
-
-
- {[1, 2, 3, 4, 5].map((_, index) => ( -
- -
- ))} -
- - JD the Smith  - {"and"}  - {"15 others"}  - {"are playing"} - -
-
-
-
- -
-
) : size == "small" ? ( - -
-
-

{game.name}

-
-
-
- -
-
- ) : ( - - - - )} - -
-
- -
- - - ) -}); \ No newline at end of file diff --git a/packages/ui/src/constants.ts b/packages/ui/src/constants.ts deleted file mode 100644 index 43ec81f7..00000000 --- a/packages/ui/src/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const CONSTANTS = { - githubLink: "https://github.com/nestrilabs/nestri#start", - enterpriseContact: "mailto:enterprise@nestri.io" -} \ No newline at end of file diff --git a/packages/ui/src/design/button-variants.ts b/packages/ui/src/design/button-variants.ts deleted file mode 100644 index 3e12889b..00000000 --- a/packages/ui/src/design/button-variants.ts +++ /dev/null @@ -1,178 +0,0 @@ -// The solid and outlined variants are based on CSS Pro 3D Buttons code (https://csspro.com/css-3d-buttons/) - -import { tv } from "tailwind-variants"; - -export type ButtonVariantProps = { - variant?: keyof typeof buttonVariants | undefined; - intent?: keyof typeof solid.variants.intent; - size?: keyof typeof baseButton.variants.size; -}; -export type ButtonVariantIconProps = { - type?: keyof typeof buttonIcon.variants.type; - size?: keyof typeof buttonIcon.variants.size; -}; - -const baseButton = tv({ - base: "group font-title flex justify-center select-none gap-1.5 items-center rounded-lg outline-2 outline-offset-2 focus-visible:outline outline-primary-6000 disabled:text-gray-400 disabled:border disabled:border-gray-300 dark:disabled:bg-gray-500/10 disabled:bg-gray-200 disabled:shadow-none disabled:hover:brightness-100 dark:disabled:text-gray-700 dark:disabled:shadow-none disabled:cursor-not-allowed dark:disabled:border dark:disabled:border-gray-700", // dark:disabled:[background-image:none] - variants: { - size: { - xs: "text-sm h-7 px-3", - sm: "text-sm h-8 px-3.5", - md: "text-base h-9 px-4", - lg: "text-base h-10 px-5", - xl: "text-lg h-12 px-6", - }, - iconOnlyButtonSize: { - xs: "size-7", - sm: "size-8", - md: "size-9", - lg: "size-10", - xl: "size-12", - }, - defaultVariants: { - intent: "primary", - size: "md", - }, - }, -}); - -const link = tv({ - // extend: baseButton, - // base: "group transition-shadows relative ml-1.5 font-medium shadow-[inset_0_-0.2em_0_0_theme(colors.primary.200)] dark:shadow-[inset_0_-0.2em_0_0_theme(colors.primary.600)] duration-300 ease-out hover:shadow-[inset_0_-1em_0_0_theme(colors.primary.200)] dark:hover:shadow-[inset_0_-1em_0_0_theme(colors.primary.600)] text-primary-950 font-medium dark:text-primary-50", //"relative text-primary-950 font-medium dark:text-primary-50 hover:after:w-[calc(100%+2px)] focus:after:w-[calc(100%+2px)] px-1 after:-bottom-1 transition-all duration-[.2s] ease-[cubic-bezier(.165,.84,.44,1)] after:w-0 after:h-0.5 after:bg-primary-950 dark:after:bg-primary-50 after:absolute after:left-0 after:transition-[width] after:duration-[.2s] focus:shadow-none outline-none" - base: "group relative ml-1.5 font-medium border-b-2 border-primary-950 dark:border-primary-50 hover:border-primary-950/60 dark:hover:border-primary-50/60 hover:text-primary-950/70 dark:hover:text-primary-50/70 text-primary-950 font-medium dark:text-primary-50", //"relative text-primary-950 font-medium dark:text-primary-50 hover:after:w-[calc(100%+2px)] focus:after:w-[calc(100%+2px)] px-1 after:-bottom-1 transition-all duration-[.2s] ease-[cubic-bezier(.165,.84,.44,1)] after:w-0 after:h-0.5 after:bg-primary-950 dark:after:bg-primary-50 after:absolute after:left-0 after:transition-[width] after:duration-[.2s] focus:shadow-none outline-none" - variants: { - size: { - xs: "text-sm h-7 px-3", - sm: "text-sm h-8 px-3.5", - md: "text-base h-9 px-4", - lg: "text-base h-10 px-5", - xl: "text-lg h-12 px-6", - }, - iconOnlyButtonSize: { - xs: "size-7", - sm: "size-8", - md: "size-9", - lg: "size-10", - xl: "size-12", - }, - defaultVariants: { - intent: "primary", - size: "md", - }, - }, -}); - -const solid = tv({ - extend: baseButton, - base: "bg-gradient-to-b [box-shadow:rgba(255,255,255,0.25)_0px_1px_0px_0px_inset,var(--btn-border-color)_0px_0px_0px_1px] text-white hover:brightness-[1.1] transition-[filter] duration-150 ease-in-out active:brightness-95 dark:border-t dark:shadow-white/10 disabled:from-gray-200 disabled:to-gray-200 dark:disabled:text-gray-400 dark:disabled:from-gray-800 dark:disabled:to-gray-800", - variants: { - intent: { - primary: - "from-primary-500 to-primary-600 [--btn-border-color:theme(colors.primary.600)] dark:border-primary-500/75", - secondary: - "from-secondary-500 to-secondary-600 [--btn-border-color:theme(colors.secondary.700)] dark:border-secondary-400/75", - accent: "from-accent-500 to-accent-600 [--btn-border-color:theme(colors.accent.700)] dark:border-accent-400/75", - danger: "from-danger-500 to-danger-600 [--btn-border-color:theme(colors.danger.700)] dark:border-danger-400/75", - info: "from-info-500 to-info-600 [--btn-border-color:theme(colors.info.700)] dark:border-info-400/75", - success: - "from-success-500 to-success-600 [--btn-border-color:theme(colors.success.700)] dark:border-success-400/75", - warning: - "from-warning-400 to-warning-500 text-warning-950 [--btn-border-color:theme(colors.warning.600)] dark:border-warning-300", - gray: "from-gray-500 to-gray-600 [--btn-border-color:theme(colors.gray.700)] dark:border-gray-500", - neutral: - "bg-gray-900 [background-image:radial-gradient(76%_151%_at_52%_-52%,rgba(255,255,255,0.5)_0%,transparent_100%)] [box-shadow:rgba(255,255,255,0.3)_0px_1px_0px_0px_inset,theme(colors.gray.950)_0px_0px_0px_1px] hover:brightness-125 dark:bg-white dark:text-gray-950 dark:border-gray-300", - }, - }, -}); - -const outlined = tv({ - extend: baseButton, - base: "[--outline-radial-opacity:0.6] dark:[background-image:none] [--inner-border-color:1] dark:[--inner-border-color:0] dark:[--outline-radial-opacity:0.2] [background-image:radial-gradient(76%_151%_at_52%_-52%,rgba(255,255,255,var(--outline-radial-opacity))_0%,transparent_100%)] [box-shadow:rgba(255,255,255,var(--inner-border-color))_0px_1px_0px_0px_inset,var(--btn-border-color)_0px_0px_0px_1px,0px_1px_2px_rgba(0,0,0,0.1)] hover:brightness-[0.98] active:brightness-100 transtion-[filter] ease-in-out duration-150", - variants: { - intent: { - primary: - "[--btn-border-color:theme(colors.primary.200)] dark:[--btn-border-color:theme(colors.primary.500/0.3)] text-primary-800 bg-primary-50 dark:text-primary-300 dark:bg-primary-500/5 dark:hover:bg-primary-500/10 dark:active:bg-primary-500/5", - secondary: - "[--btn-border-color:theme(colors.secondary.200)] dark:[--btn-border-color:theme(colors.secondary.500/0.3)] text-secondary-800 bg-secondary-50 dark:text-secondary-300 dark:bg-secondary-500/5 dark:hover:bg-secondary-500/10 dark:active:bg-secondary-500/5", - accent: "[--btn-border-color:theme(colors.accent.200)] dark:[--btn-border-color:theme(colors.accent.500/0.3)] text-accent-800 bg-accent-50 dark:text-accent-300 dark:bg-accent-500/5 dark:hover:bg-accent-500/10 dark:active:bg-accent-500/5", - danger: "[--btn-border-color:theme(colors.danger.200)] dark:[--btn-border-color:theme(colors.danger.500/0.3)] text-danger-800 bg-danger-50 dark:text-danger-300 dark:bg-danger-500/5 dark:hover:bg-danger-500/10 dark:active:bg-danger-500/5", - info: "[--btn-border-color:theme(colors.info.200)] dark:[--btn-border-color:theme(colors.info.500/0.3)] text-info-800 bg-info-50 dark:text-info-300 dark:bg-info-500/5 dark:hover:bg-info-500/10 dark:active:bg-info-500/5", - success: - "[--btn-border-color:theme(colors.success.200)] dark:[--btn-border-color:theme(colors.success.500/0.3)] text-success-800 bg-success-100 dark:text-success-300 dark:bg-success-500/5 dark:hover:bg-success-500/10 dark:active:bg-success-500/5", - warning: - "[--btn-border-color:theme(colors.warning.200)] dark:[--btn-border-color:theme(colors.warning.500/0.3)] text-warning-800 bg-warning-50 dark:text-warning-300 dark:bg-warning-500/5 dark:hover:bg-warning-500/10 dark:active:bg-warning-500/5", - gray: "[--btn-border-color:theme(colors.gray.200)] dark:[--btn-border-color:theme(colors.gray.500/0.3)] text-gray-800 bg-gray-50 dark:text-gray-300 dark:bg-gray-500/5 dark:hover:bg-gray-500/10 dark:active:bg-gray-500/5", - neutral: - "[--btn-border-color:theme(colors.gray.300)] dark:[--btn-border-color:theme(colors.gray.700)] text-gray-800 bg-gray-100 dark:text-white dark:bg-gray-500/5 dark:hover:bg-gray-500/10 dark:active:bg-gray-500/5", - }, - }, -}); - -const soft = tv({ - extend: baseButton, - variants: { - intent: { - primary: - "text-primary-700 bg-primary-100 hover:bg-primary-200/75 active:bg-primary-100 dark:text-primary-300 dark:bg-primary-500/10 dark:hover:bg-primary-500/15 dark:active:bg-primary-500/10", - secondary: - "text-secondary-700 bg-secondary-100 hover:bg-secondary-200/75 active:bg-secondary-100 dark:text-secondary-300 dark:bg-secondary-500/10 dark:hover:bg-secondary-500/15 dark:active:bg-secondary-500/10", - accent: "text-accent-700 bg-accent-100 hover:bg-accent-200/75 active:bg-accent-100 dark:text-accent-300 dark:bg-accent-500/10 dark:hover:bg-accent-500/15 dark:active:bg-accent-500/10", - danger: "text-danger-700 bg-danger-100 hover:bg-danger-200/75 active:bg-danger-100 dark:text-danger-300 dark:bg-danger-500/10 dark:hover:bg-danger-500/15 dark:active:bg-danger-500/10", - info: "text-info-700 bg-info-100 hover:bg-info-200/75 active:bg-info-100 dark:text-info-300 dark:bg-info-500/10 dark:hover:bg-info-500/15 dark:active:bg-info-500/10", - success: - "text-success-700 bg-success-100 hover:bg-success-200/75 active:bg-success-100 dark:text-success-300 dark:bg-success-500/10 dark:hover:bg-success-500/15 dark:active:bg-success-500/10", - warning: - "text-warning-700 bg-warning-100 hover:bg-warning-200/75 active:bg-warning-100 dark:text-warning-300 dark:bg-warning-500/10 dark:hover:bg-warning-500/15 dark:active:bg-warning-500/10", - gray: "text-gray-800 bg-gray-100 hover:bg-gray-200/75 active:bg-gray-100 dark:text-gray-300 dark:bg-gray-500/10 dark:hover:bg-gray-500/15 dark:active:bg-gray-500/10", - neutral: - "text-gray-950 bg-gray-100 hover:bg-gray-950 hover:text-white active:text-white active:bg-gray-900 dark:text-gray-300 dark:bg-gray-500/10 dark:hover:bg-white dark:hover:text-gray-950 dark:active:bg-gray-200 dark:active:text-gray-950", - }, - }, -}); - -const ghost = tv({ - extend: baseButton, - variants: { - intent: { - primary: - "hover:bg-gray-100 active:bg-primary-200/75 dark:hover:bg-gray-800 dark:active:bg-primary-500/15", - secondary: - "text-secondary-600 hover:bg-secondary-100 active:bg-secondary-200/75 dark:text-secondary-400 dark:hover:bg-secondary-500/10 dark:active:bg-secondary-500/15", - accent: "text-accent-600 hover:bg-accent-100 active:bg-accent-200/75 dark:text-accent-400 dark:hover:bg-accent-500/10 dark:active:bg-accent-500/15", - danger: "text-danger-600 hover:bg-danger-100 active:bg-danger-200/75 dark:text-danger-400 dark:hover:bg-danger-500/10 dark:active:bg-danger-500/15", - info: "text-info-600 hover:bg-info-100 active:bg-info-200/75 dark:text-info-400 dark:hover:bg-info-500/10 dark:active:bg-info-500/15", - success: - "text-success-600 hover:bg-success-100 active:bg-success-200/75 dark:text-success-400 dark:hover:bg-success-500/10 dark:active:bg-success-500/15", - warning: - "text-warning-600 hover:bg-warning-100 active:bg-warning-200/75 dark:text-warning-400 dark:hover:bg-warning-500/10 dark:active:bg-warning-500/15", - gray: "text-gray-800 hover:bg-gray-100 active:bg-gray-200/75 dark:text-gray-300 dark:hover:bg-gray-500/10 dark:active:bg-gray-500/15", - neutral: - "text-gray-950 hover:bg-gray-950 hover:text-white active:text-white active:bg-gray-900 dark:text-white dark:hover:bg-white dark:hover:text-gray-950 dark:active:bg-gray-200 dark:active:text-gray-950", - }, - }, -}); - -export const buttonIcon = tv({ - variants: { - type: { - leading: "-ml-1", - trailing: "-mr-1", - only: "m-auto", - }, - size: { - xs: "size-3.5", - sm: "size-4", - md: "size-[1.125rem]", - lg: "size-5", - xl: "size-6", - }, - }, -}); - -export const buttonVariants = { - solid, - outlined, - soft, - ghost, - link -}; \ No newline at end of file diff --git a/packages/ui/src/design/form.ts b/packages/ui/src/design/form.ts deleted file mode 100644 index 0b422708..00000000 --- a/packages/ui/src/design/form.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { tv } from "tailwind-variants"; - -export const form = tv({ - slots: { - label: "text-nowrap text-[--title-text-color]", - input: "[--btn-radius:lg] w-full px-[--input-px] bg-transparent peer transition-[outline] placeholder-[--placeholder-text-color] text-[--title-text-color] rounded-[--btn-radius] disabled:opacity-50", - message: "mt-2 text-[--caption-text-color]", - icon: "absolute inset-y-0 my-auto text-[--placeholder-text-color] pointer-events-none", - field: "relative group *:has-[:disabled]:opacity-50 *:has-[:disabled]:pointer-events-none data-[invalid]:[--caption-text-color:theme(colors.danger.600)] dark:data-[invalid]:[--caption-text-color:theme(colors.danger.400)] data-[valid]:[--caption-text-color:theme(colors.success.600)] dark:data-[valid]:[--caption-text-color:theme(colors.success.400)]", - textarea: "py-[calc(var(--input-px)/1.5)] h-auto", - }, - variants: { - variant: { - outlined: { - input: "outline-2 focus:outline-primary-600 -outline-offset-1 focus:outline border data-[invalid]:border-danger-600 focus:data-[invalid]:outline-danger-600 dark:data-[invalid]:border-danger-500 dark:focus:data-[invalid]:outline-danger-500 data-[valid]:border-success-600 focus:data-[valid]:outline-success-600 dark:data-[valid]:border-success-500 dark:focus:data-[valid]:outline-success-500", - }, - soft: { - input: "outline-none bg-[--ui-soft-bg] focus:brightness-95 dark:focus:brightness-105 data-[invalid]:[--ui-soft-bg:theme(colors.danger.100)] dark:data-[invalid]:[--ui-soft-bg:theme(colors.danger.800/0.25)] data-[valid]:[--ui-soft-bg:theme(colors.success.100)] dark:data-[valid]:[--ui-soft-bg:theme(colors.success.800/0.25)]", - }, - mixed: { - input: "placeholder-gray-950/50 dark:placeholder-gray-50/50 shadow-sm hover:shadow-lg dark:hover:shadow-sm shadow-gray-950/50 dark:shadow-gray-50 outline-2 focus:outline-primary-600 focus:outline -outline-offset-1 border border-primary-950 dark:border-primary-50 bg-gray-100 dark:bg-gray-800 data-[invalid]:border-2 data-[invalid]:border-danger-600 focus:data-[invalid]:outline-danger-600 dark:data-[invalid]:border-danger-500 dark:focus:data-[invalid]:outline-danger-500 data-[valid]:border-success-600 focus:data-[valid]:outline-success-600 dark:data-[valid]:border-success-500 dark:focus:data-[valid]:outline-success-500", - }, - plain: { - input: "rounded-none px-0 outline-none bg-transparent invalid:text-danger-600 dark:invalid:text-danger-400", - }, - bottomOutlined: { - input: "rounded-none transition-[border] px-0 focus:outline-none border-b focus:border-b-2 focus:border-primary-600 data-[invalid]:border-danger-400 dark:data-[invalid]:border-danger-600 data-[valid]:border-success-400 dark:data-[valid]:border-success-600", - }, - }, - size: { - xs: { - message: "text-xs", - }, - sm: { - label: "text-sm", - message: "text-sm", - input: "text-sm h-8 [--input-px:theme(spacing[2.5])]", - field: "[--input-px:theme(spacing[2.5])]", - }, - md: { - label: "text-base", - message: "text-base", - input: "text-sm h-9 [--input-px:theme(spacing[3])]", - field: "[--input-px:theme(spacing[3])]", - }, - lg: { - label: "text-lg", - input: "text-base h-10 [--input-px:theme(spacing[4])]", - field: "[--input-px:theme(spacing[4])]", - }, - xl: { - label: "text-xl", - input: "text-base h-12 [--input-px:theme(spacing[5])]", - field: "[--input-px:theme(spacing[5])]", - }, - }, - fancy: { - true: { - input: "shadow-inner shadow-gray-950/5 dark:shadow-gray-950/35", - } - }, - floating: { - true: { - label: "absolute block inset-y-0 text-base left-[--input-px] h-fit text-nowrap my-auto text-[--caption-text-color] pointer-events-none transition duration-150 scale-[.8] origin-top-left peer-placeholder-shown:scale-100 peer-focus:scale-[.8] peer-placeholder-shown:translate-y-0", - }, - }, - asTextarea: { - true: { - label: "top-[calc(var(--input-px)/1.5)] mt-0", - }, - }, - }, - compoundVariants: [ - { - floating: true, - variant: ["bottomOutlined", "plain"], - class: { - input: "px-0", - label: "left-0", - }, - }, - { - floating: true, - variant: ["outlined", "soft", "bottomOutlined", "mixed"], - size: "xl", - class: { - field: "[--input-px:theme(spacing[2.5])]", - input: "pt-3.5 h-14", - label: "-translate-y-2.5 peer-focus:-translate-y-2.5", - }, - }, - { - floating: true, - variant: ["soft", "bottomOutlined"], - size: "lg", - class: { - input: "pt-4 h-12", - label: "-translate-y-2 peer-focus:-translate-y-2", - }, - }, - { - floating: true, - variant: ["outlined", "mixed"], - size: "lg", - class: { - input: "h-12", - label: "-translate-y-[21.5px] peer-focus:-translate-y-[21.5px]", - }, - }, - { - floating: true, - variant: ["outlined", "bottomOutlined", "mixed"], - size: "md", - class: { - input: "h-9", - label: "-translate-y-[15.5px] peer-focus:-translate-y-[15.5px]", - }, - }, - { - floating: true, - variant: ["outlined", "bottomOutlined", "mixed"], - size: "sm", - class: { - input: "h-8", - label: "text-base -translate-y-[13.5px] peer-focus:-translate-y-[13.5px] peer-placeholder-shown:text-sm peer-focus:text-base", - }, - }, - { - floating: true, - size: ["sm", "md", "lg"], - variant: ["outlined", "mixed"], - class: { - label: "peer-placeholder-shown:before:scale-x-0 peer-focus:before:scale-x-100 before:scale-x-100 before:absolute peer-placeholder-shown:before:transition-none before:transition-none peer-focus:before:transition peer-focus:before:delay-[.01s] before:duration-500 before:-z-[1] peer-placeholder-shown:before:-top-[9px] before:top-[48%] peer-focus:before:top-[44%] before:-inset-x-1 before:h-0.5 before:my-auto group-has-[:focus]:before:h-[3px] before:bg-white dark:before:bg-[--ui-bg]", - }, - }, - { - floating: true, - variant: ["outlined", "mixed"], - class: { - label: "translate-x-px", - }, - }, - { - floating: true, - asTextarea: true, - size: ["lg", "xl"], - variant: "bottomOutlined", - class: { - input: "pt-0", - }, - }, - { - variant: "plain", - class: { - input: "py-0", - }, - }, - { - floating: true, - asTextarea: true, - size: ["xl"], - class: { - input: "pt-7", - label: "-translate-y-1 peer-focus:-translate-y-1", - }, - }, - { - floating: true, - asTextarea: true, - size: ["lg"], - class: { - input: "pt-6", - label: "-translate-y-1 peer-focus:-translate-y-1 before:hidden", - }, - }, - { - floating: true, - asTextarea: true, - size: ["md"], - variant: ["outlined", "bottomOutlined", "mixed"], - class: { - label: "-translate-y-[17.5px] peer-focus:-translate-y-[17.5px]", - }, - }, - { - floating: true, - asTextarea: true, - size: ["sm"], - variant: ["outlined", "bottomOutlined", "mixed"], - class: { - label: "-translate-y-4 peer-focus:-translate-y-4", - }, - }, - ], -}); - -export type FormProps = { - variant?: keyof typeof form.variants.variant; - size?: keyof typeof form.variants.size; - floating?: boolean; - asTextarea?: boolean; -}; - -export type InputProps = Omit & { - size?: Exclude; - fancy?: boolean; -}; - -export type LabelProps = FormProps & { - size?: Exclude; -}; - -export type MessageProps = { - size?: Exclude; -}; \ No newline at end of file diff --git a/packages/ui/src/design/index.ts b/packages/ui/src/design/index.ts deleted file mode 100644 index 8cbbd2ec..00000000 --- a/packages/ui/src/design/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./button-variants" -export * from "./typography" -export * from "./utils" -export * from "./form" \ No newline at end of file diff --git a/packages/ui/src/design/typography.ts b/packages/ui/src/design/typography.ts deleted file mode 100644 index 2e276733..00000000 --- a/packages/ui/src/design/typography.ts +++ /dev/null @@ -1,401 +0,0 @@ -import { tv } from "tailwind-variants"; - -export const base = tv({ - variants: { - weight: { - black: "font-black", - bold: "font-bold", - semibold: "font-semibold", - medium: "font-medium", - normal: "font-normal", - }, - align: { - left: "text-left", - center: "text-center", - right: "text-right", - }, - }, - defaultVariants: { - size: "xl", - weight: "normal", - }, -}); - -export const caption = tv( - { - extend: base, - base: "text-gray-500", - variants: { - size: { - xs: "text-xs", - sm: "text-sm", - base: "text-base", - }, - neutral: { - true: "text-gray-950 dark:text-white", - }, - }, - defaultVariants: { - size: "sm", - weight: "normal", - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const text = tv( - { - extend: base, - base: "text-gray-700", - variants: { - size: { - sm: "text-sm", - base: "text-base", - lg: "text-lg", - xl: "text-xl", - }, - neutral: { - true: "text-gray-950 dark:text-white", - }, - }, - defaultVariants: { - size: "base", - weight: "normal", - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const list = tv( - { - extend: text, - base: "list-outside pl-4", - variants: { - type: { - disc: "list-disc", - decimal: "list-decimal", - none: "list-none", - }, - inside: { - true: "list-outside pl-0", - }, - }, - defaultVariants: { - size: "base", - type: "disc", - weight: "normal", - inside: false, - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const link = tv( - { - extend: base, - base: "transition", - variants: { - size: { - xs: "text-xs", - sm: "text-sm", - base: "text-base", - lg: "text-lg", - xl: "text-xl", - }, - intent: { - primary: - "text-primary-600 hover:text-primary-700 dark:text-primary-400 dark:hover:text-primary-500", - secondary: - "text-secondary-600 hover:text-secondary-700 dark:text-secondary-400 dark:hover:text-secondary-500", - accent: "text-accent-600 hover:text-accent-700 dark:text-accent-400 dark:hover:text-accent-500", - info: "text-info-600 hover:text-info-700 dark:text-info-400 dark:hover:text-info-500", - danger: "text-danger-600 hover:text-danger-700 dark:text-danger-400 dark:hover:text-danger-500", - success: - "text-success-600 hover:text-success-700 dark:text-success-400 dark:hover:text-success-500", - warning: - "text-warning-700 hover:text-warning-600 dark:text-warning-400 dark:hover:text-warning-500", - gray: "text-gray-700", - neutral: - "text-gray-950 hover:text-gray-800 dark:text-white dark:hover:text-gray-200", - }, - variant: { - plain: "", - underlined: "underline", - ghost: "hover:underline", - animated: - "relative before:absolute before:inset-x-0 before:bottom-0 before:h-px before:scale-x-0 before:origin-right hover:before:origin-left hover:before:scale-x-100 before:transition before:duration-200", - }, - visited: { - true: "visited:text-accent-600 dark:visited:text-accent-400", - }, - }, - compoundVariants: [ - { - variant: ["plain", "ghost", "underlined"], - intent: "gray", - class: "hover:text-gray-950 dark:hover:text-white", - }, - { - variant: "animated", - intent: "primary", - class: "before:bg-primary-600/50 dark:before:bg-primary-400/50", - }, - { - variant: "animated", - intent: "info", - class: "before:bg-info-600/50 dark:before:bg-info-400/50", - }, - { - variant: "animated", - intent: "neutral", - class: "before:bg-gray-950/50 dark:before:bg-white/50", - }, - { - variant: "animated", - intent: "gray", - class: "before:bg-gray-600/50 dark:before:bg-gray-400/50", - }, - { - variant: "animated", - intent: "secondary", - class: "before:bg-secondary-600/50 dark:before:bg-secondary-400/50", - }, - { - variant: "animated", - intent: "accent", - class: "before:bg-accent-600/50 dark:before:bg-accent-400/50", - }, - { - variant: "animated", - intent: "danger", - class: "before:bg-danger-600/50 dark:before:bg-danger-400/50", - }, - { - variant: "animated", - intent: "success", - class: "before:bg-success-600/50 dark:before:bg-success-400/50", - }, - { - variant: "animated", - intent: "warning", - class: "before:bg-warning-600/50 dark:before:bg-warning-400/50", - }, - { - variant: "underlined", - intent: "primary", - class: "decoration-primary-600/50 dark:decoration-primary-400/50", - }, - { - variant: "underlined", - intent: "info", - class: "decoration-info-600/50 dark:decoration-info-400/50", - }, - { - variant: "underlined", - intent: "gray", - class: "decoration-gray-600/50 dark:decoration-gray-400/50", - }, - { - variant: "underlined", - intent: "neutral", - class: "decoration-gray-950/25 dark:decoration-white/25", - }, - { - variant: "underlined", - intent: "secondary", - class: "decoration-secondary-600/50 dark:decoration-secondary-400/50", - }, - { - variant: "underlined", - intent: "accent", - class: "decoration-accent-600/50 dark:decoration-accent-400/50", - }, - { - variant: "underlined", - intent: "danger", - class: "decoration-danger-600/50 dark:decoration-danger-400/50", - }, - { - variant: "underlined", - intent: "success", - class: "decoration-success-600/50 dark:decoration-success-400/50", - }, - { - variant: "underlined", - intent: "warning", - class: "decoration-warning-600/50 dark:decoration-warning-400/50", - }, - ], - defaultVariants: { - intent: "primary", - variant: "ghost", - size: "base", - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const display = tv( - { - extend: base, - base: "block text-gray-950 dark:text-gray-50", - variants: { - size: { - "4xl": "text-4xl", - "5xl": "text-5xl", - "6xl": "text-6xl", - "7xl": "text-7xl", - "8xl": "text-8xl", - "9xl": "text-9xl", - }, - }, - defaultVariants: { - size: "6xl", - weight: "bold", - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const title = tv( - { - extend: base, - base: "block text-gray-950", - variants: { - size: { - base: "text-base", - lg: "text-lg", - xl: "text-xl", - "2xl": "text-2xl", - "3xl": "text-3xl", - }, - }, - defaultVariants: { - size: "xl", - weight: "semibold", - }, - }, - { - responsiveVariants: ["sm", "md", "lg", "xl", "2xl"], - }, -); - -export const codeTheme = tv({ - base: "text-sm inline-block border rounded-md py-px px-1", - variants: { - intent: { - primary: - "bg-primary-50 text-primary-600 dark:text-primary-300 border-primary-200 dark:border-primary-500/20 dark:bg-primary-500/5", - secondary: - "bg-secondary-50 text-secondary-600 dark:text-secondary-300 border-secondary-200 dark:border-secondary-500/20 dark:bg-secondary-500/5", - accent: "bg-accent-50 text-accent-600 dark:text-accent-300 border-accent-200 dark:border-accent-500/20 dark:bg-accent-500/5", - gray: "bg-gray-50 text-gray-700 dark:border-gray-500/20 dark:bg-gray-500/5 dark:border-gray-500/20", - neutral: "bg-gray-50 text-gray-950 dark:text-white dark:bg-gray-500/5 dark:border-gray-500/20", - }, - }, - defaultVariants: { - intent: "gray", - }, -}); - -export const kbdTheme = tv({ - base: "inline-flex items-center justify-center text-gray-800 dark:text-white h-5 text-[11px] min-w-5 px-1.5 rounded font-sans bg-gray-100 dark:bg-white/10 ring-1 border-b border-t border-t-white border-b-gray-200 dark:border-t-transparent dark:border-b-gray-950 ring-gray-300 dark:ring-white/15", -}); - -export type CodeThemeProps = { - intent?: keyof typeof codeTheme.variants.intent; -}; - -export type Weight = keyof typeof base.variants.weight; -export type Align = keyof typeof base.variants.align; - -type BaseTextProps = { - weight?: Weight; - align?: Align; -}; - -export type CaptionProps = BaseTextProps & { - size?: keyof typeof caption.variants.size; - neutral?: boolean; -}; - -export type TextProps = BaseTextProps & { - size?: keyof typeof text.variants.size; - neutral?: boolean; -}; - -export type ListProps = BaseTextProps & { - size?: keyof typeof text.variants.size; - type?: keyof typeof list.variants.type; - inside?: boolean; - neutral?: boolean; -}; - -export type LinkProps = BaseTextProps & { - size?: keyof typeof text.variants.size | keyof typeof link.variants.size; - variant?: keyof typeof link.variants.variant; - intent?: keyof typeof link.variants.intent; - visited?: boolean; -}; - -export type TitleProps = BaseTextProps & { - size?: keyof typeof title.variants.size; -}; - -export type TitleSizeProp = - | TitleProps["size"] - | { - initial?: TitleProps["size"]; - sm?: TitleProps["size"]; - md?: TitleProps["size"]; - lg?: TitleProps["size"]; - xl?: TitleProps["size"]; - xxl?: TitleProps["size"]; - }; - -export type TextSizeProp = - | TextProps["size"] - | { - initial?: TextProps["size"]; - sm?: TextProps["size"]; - md?: TextProps["size"]; - lg?: TextProps["size"]; - xl?: TextProps["size"]; - xxl?: TextProps["size"]; - }; - -export type DisplayProps = BaseTextProps & { - size?: keyof typeof display.variants.size; -}; - -export type TextWeightProp = - | Weight - | { - initial?: Weight; - sm?: Weight; - md?: Weight; - lg?: Weight; - xl?: Weight; - xxl?: Weight; - }; - -export type TextAlignProp = - | Align - | { - initial?: Align; - sm?: Align; - md?: Align; - lg?: Align; - xl?: Align; - xxl?: Align; - }; \ No newline at end of file diff --git a/packages/ui/src/design/utils.ts b/packages/ui/src/design/utils.ts deleted file mode 100644 index 1b07da65..00000000 --- a/packages/ui/src/design/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { twMerge } from "tailwind-merge" -import { type ClassValue, clsx } from "clsx" - -export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)) -} \ No newline at end of file diff --git a/packages/ui/src/fonts.tsx b/packages/ui/src/fonts.tsx deleted file mode 100644 index 3ed240ca..00000000 --- a/packages/ui/src/fonts.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { component$, Slot } from "@builder.io/qwik"; - -//font-sans or font-body -import "@fontsource/geist-sans/400.css" -import "@fontsource/geist-sans/500.css" -import "@fontsource/geist-sans/600.css" -import "@fontsource/geist-sans/700.css" -// font mono -import "@fontsource/geist-mono/400.css" -import "@fontsource/geist-mono/700.css" -//font-mona -import "@fontsource-variable/mona-sans" -//font-bricolage -import '@fontsource-variable/bricolage-grotesque'; - -export const Fonts = component$(() => { - return ; -}); \ No newline at end of file diff --git a/packages/ui/src/footer-banner.tsx b/packages/ui/src/footer-banner.tsx deleted file mode 100644 index 42736223..00000000 --- a/packages/ui/src/footer-banner.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import Book from "./book"; -import { CONSTANTS } from "./constants"; -import { Link } from "@builder.io/qwik-city"; -import { MotionComponent, transition } from "@nestri/ui/react"; -import { component$, useSignal, useVisibleTask$ } from "@builder.io/qwik"; - -export const FooterBanner = component$(() => { - const docsLinkRef = useSignal() - const bookRef = useSignal() - - // eslint-disable-next-line qwik/no-use-visible-task - useVisibleTask$(() => { - docsLinkRef.value?.addEventListener("mouseenter", () => { - bookRef.value?.classList.add('flip') - }) - docsLinkRef.value?.addEventListener("mouseleave", () => { - bookRef.value?.classList.remove('flip') - }) - return () => { - docsLinkRef.value?.removeEventListener("mouseenter", () => { - bookRef.value?.classList.add('flip') - }) - docsLinkRef.value?.removeEventListener("mouseleave", () => { - bookRef.value?.classList.remove('flip') - }) - } - }) - return ( - -
-
-
- ); -}); \ No newline at end of file diff --git a/packages/ui/src/game-card.tsx b/packages/ui/src/game-card.tsx deleted file mode 100644 index a9882a6b..00000000 --- a/packages/ui/src/game-card.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { component$ } from "@builder.io/qwik" -import { cn } from "@nestri/ui/design" -import { ImageLoader } from "@nestri/ui/image" - -type Game = { - appid: string - name: string - release_date: number - compatibility: string - teams: number -} - -type Props = { - game: Game; - class?: string; -} -export const GameCard = component$(({ game, class: className }: Props) => { - return ( -
-
-
-

{game.name}

- - - - -
- -
-
-
- -
-
-
- - {"Downloaded in "}  - {`${game.teams}`}  - {"Nestri Teams"} - -
-
- {/**For now commented out because we don't have a way to select games yet */} - {/* - */} -
-
-
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/game-store/default.tsx b/packages/ui/src/game-store/default.tsx deleted file mode 100644 index 10879cc2..00000000 --- a/packages/ui/src/game-store/default.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { Modal } from "@qwik-ui/headless"; -import { MotionComponent } from "../react"; -import { component$, type QRL } from "@builder.io/qwik"; - -// const FadeScale = { -// initial: { -// opacity: 0, -// scale: 0.85, -// }, -// animate: { -// opacity: 1, -// scale: 1, -// }, -// exit: { -// opacity: 0, -// scale: 0.85, -// }, -// transition: { -// type: "spring", -// duration: 0.35, -// bounce: 0.1 -// } -// }; - -type StoreSelectProps = { - onSteamPress$: QRL<() => void> -} - -export const StoreSelect = component$(({ onSteamPress$ }: StoreSelectProps) => { - return ( - // - <> -
- - - -
-
-
-

-
- -
- Connect Game Store -

-
-
- -
- Epic Games - -
-
- GOG.com - - - -
-
- Amazon Games - - - -
-
-
- -
-
- - //
- ) -}) - -export const SteamLoad = component$(() => { - return ( - -
- -
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/game-store/index.tsx b/packages/ui/src/game-store/index.tsx deleted file mode 100644 index ac6b1062..00000000 --- a/packages/ui/src/game-store/index.tsx +++ /dev/null @@ -1,9 +0,0 @@ -// import { SteamLoad, StoreSelect } from "./default"; -import { $, component$, useSignal } from "@builder.io/qwik"; - -export default component$(() => { - // const storeSelect = useSignal(true) - return ( - <> - ) -}) \ No newline at end of file diff --git a/packages/ui/src/home/friends.tsx b/packages/ui/src/home/friends.tsx deleted file mode 100644 index a2940093..00000000 --- a/packages/ui/src/home/friends.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { cn } from "../design"; -import Avatar from "../avatar"; -import type Nestri from "@nestri/sdk" -import { Tooltip } from '@qwik-ui/headless'; -import { useNavigate } from "@builder.io/qwik-city"; -import { $, component$, useOnDocument, useSignal, type QRL } from "@builder.io/qwik"; - -type Props = { - getActiveUsers$: QRL<() => Promise> - getSession$: QRL<(profileID: string) => Promise> -} - -const skeletonCrew = new Array(3).fill(0) - -export const HomeFriendsSection = component$(({ getActiveUsers$, getSession$ }: Props) => { - const activeUsers = useSignal() - const nav = useNavigate() - - useOnDocument("load", $(async () => { - const sessionUserData = sessionStorage.getItem("active_user_data") - if (!sessionUserData) { - const users = await getActiveUsers$() - sessionStorage.setItem("active_user_data", JSON.stringify(users)) - activeUsers.value = users - } else { - activeUsers.value = JSON.parse(sessionUserData) - } - })) - - const onWatch = $(async (profileID: string) => { - const session = await getSession$(profileID) - await nav(`/play/${session?.data.id}`) - }) - - return ( -
-
-
-
- - - Find people to play with - -
-
    - {activeUsers.value ? ( - activeUsers.value.slice(0, 3).map((user, key) => ( -
    -
    -
    - {user.avatarUrl ? - ({user.username}) : - ()} -
    -
    -
    - - {`${user.username}`}  - {/*  {user.status && (user.status == "active" && ())} */} - -
    -
    -
    - {user.status ? (user.status == "active" ? "Playing Steam" : user.status) : "Offline"} -
    -
    -
    -
    - {user.status && (user.status == "active" && - ( - - { await onWatch(user.id) }} type="button" class="bg-gray-200 group-hover:bg-gray-300 dark:group-hover:bg-gray-700 transition-all duration-200 ease-in text-gray-600 dark:text-gray-400 dark:bg-gray-800 [&>svg]:size-5 p-2 rounded-full" > - - - - Watch stream -
    - -
    -
    -
    - ))} - - - - - - Invite -
    - -
    -
    -
    - - - - - - more -
    - -
    -
    -
    -
    -
    -
    -
    - )) - ) : - ( - skeletonCrew.map((_, key) => ( -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - )) - ) - } -
    -
-
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/home/games.tsx b/packages/ui/src/home/games.tsx deleted file mode 100644 index 4a61bfe9..00000000 --- a/packages/ui/src/home/games.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import type Nestri from "@nestri/sdk"; -import { useNavigate } from "@builder.io/qwik-city"; -import { $, component$, useOnDocument, useSignal, type QRL } from "@builder.io/qwik"; - -type Props = { - getUserSubscription$: QRL<() => Promise<"Free" | "Pro" | undefined>> - createSession$: QRL<() => Promise> -} - -const skeletonGames = new Array(6).fill(0) - -export const HomeGamesSection = component$(({ getUserSubscription$ }: Props) => { //createSession$ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const nav = useNavigate() - const creatingSession = useSignal(false) - const userSubscription = useSignal<"Free" | "Pro" | undefined>() - - useOnDocument("load", $(async () => { - const userSub = sessionStorage.getItem("subscription_data") - if (userSub) { - userSubscription.value = JSON.parse(userSub) - } else { - const subscription = await getUserSubscription$() - sessionStorage.setItem("subscription_data", JSON.stringify(subscription)) - userSubscription.value = subscription - } - })) - - const onClick = $(async () => { - console.log("clicked") - // creatingSession.value = true - // const sessionID = await createSession$() - // if (sessionID) { - // creatingSession.value = false - // await nav(`/play/${sessionID.id}`) - // } - }); - - - return ( -
-
-
- - - Your Games - - {/* {userSubscription.value ? ( - - ) : ( -
- )} */} -
-
    - {userSubscription.value ? ( -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - Waiting for your first game install -

    Once you have installed a game on your machine, it should appear here

    -
    - -
    - ) : ( -
    - {skeletonGames.map((_, key) => ( -
    -
    -
    - ))} -
    - )} -
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/home/machines.tsx b/packages/ui/src/home/machines.tsx deleted file mode 100644 index 684d1211..00000000 --- a/packages/ui/src/home/machines.tsx +++ /dev/null @@ -1,131 +0,0 @@ -/* eslint-disable qwik/jsx-img */ -import { cn } from "../design"; -import { MotionComponent } from "../react"; -import { $, component$, useOnDocument, useSignal, type QRL } from "@builder.io/qwik"; -import { Link } from "@builder.io/qwik-city"; - -type Props = { - getUserSubscription$: QRL<() => Promise<"Free" | "Pro" | undefined>> -} - -export const HomeMachineSection = component$(({ getUserSubscription$ }: Props) => { - const isHovered = useSignal(false) - const userSubscription = useSignal<"Free" | "Pro" | undefined>() - - useOnDocument("load", $(async () => { - const userSub = sessionStorage.getItem("subscription_data") - if (userSub) { - userSubscription.value = JSON.parse(userSub) - } else { - const subscription = await getUserSubscription$() - sessionStorage.setItem("subscription_data", JSON.stringify(subscription)) - userSubscription.value = subscription - } - })) - - return ( -
-
- {userSubscription.value ? ( - <> - {userSubscription.value == "Pro" ? ( -
- -
-
-
-
-
Steam Machine
-
-
- {/*
*/} -
-
- {userSubscription.value == "Pro" ? "Online" : "Error"} -
-
-
-
- game -
- -
- ) : ( - - )} - - - ) : - new Array(2).fill(0).map((_, key) => ( -
-
-
- )) - } -
-
- ) -}) \ No newline at end of file diff --git a/packages/ui/src/home/nav-bar.tsx b/packages/ui/src/home/nav-bar.tsx deleted file mode 100644 index 2f0262c0..00000000 --- a/packages/ui/src/home/nav-bar.tsx +++ /dev/null @@ -1,393 +0,0 @@ -import { cn } from "../design"; -import Avatar from "../avatar" -import type Nestri from "@nestri/sdk" -import { MotionComponent } from "../react"; -import { Dropdown, Modal } from '@qwik-ui/headless'; -import { useLocation, useNavigate } from "@builder.io/qwik-city"; -import { disablePageScroll, enablePageScroll } from '@fluejs/noscroll'; -import { $, component$, type QRL, useOnDocument, useSignal } from "@builder.io/qwik"; - -type Props = { - getUserProfile$: QRL<() => Promise> -} - - -export const HomeNavBar = component$(({ getUserProfile$ }: Props) => { - const nav = useNavigate() - const inviteEmail = useSignal(''); - const location = useLocation().url - const inviteName = useSignal(''); - const isHolding = useSignal(false); - const newTeamName = useSignal(''); - const isNewTeam = useSignal(false); - const hasScrolled = useSignal(false); - const isNewMember = useSignal(false); - const showInviteSuccess = useSignal(false); - const userProfile = useSignal() - - const onDialogOpen = $((open: boolean) => { - if (open) { - disablePageScroll() - } else { - enablePageScroll() - } - }) - - const handlePointerDown = $(() => { - isHolding.value = true - }); - - const handlePointerUp = $(() => { - isHolding.value = false - }); - - const handleAddTeam = $((e: any) => { - e.preventDefault(); - if (newTeamName.value.trim()) { - // teams.value = [...teams.value, { name: newTeamName.value.trim() }]; - // selectedTeam.value = newTeamName.value.trim() - newTeamName.value = ''; - isNewTeam.value = false; - } - }); - - const handleInvite = $((e: any) => { - e.preventDefault(); - if (inviteName.value && inviteEmail.value) { - // Here you would typically make an API call to send the invitation - console.log('Sending invite to:', { name: inviteName.value, email: inviteEmail.value }); - inviteName.value = ''; - inviteEmail.value = ''; - isNewMember.value = false; - showInviteSuccess.value = true; - setTimeout(() => { - showInviteSuccess.value = false; - }, 3000); - } - }); - - useOnDocument( - 'scroll', - $(() => { - hasScrolled.value = window.scrollY > 0; - }) - ); - - const handleLogout = $(async() => { - await nav(`/auth/logout`) - }); - - const handleLogoutAnimationComplete = $(() => { - if (isHolding.value) { - console.log("fucking hell") - - // isDeleting.value = true; - // Reset the holding state - isHolding.value = false; - handleLogout(); - } - }); - - useOnDocument("load", $(async () => { - const currentProfile = await getUserProfile$() - userProfile.value = currentProfile - })) - - return ( - <> - - - -
-
-
-

Create a team

-
- Continue to start playing with on Pro with increased usage, additional security features, and support -
-
-
-
- - newTeamName.value = e.target!.value} - required value={newTeamName.value} id="name" type="text" placeholder="Enter team name" class="[transition:all_0.3s_cubic-bezier(0.4,0,0.2,1)] w-full bg-transparent px-2 py-3 h-10 border text-black dark:text-white dark:border-gray-700/70 border-gray-300/70 rounded-md text-sm outline-none leading-none focus:ring-gray-300 dark:focus:ring-gray-700 focus:ring-2" /> -
-
-
-
- - Cancel - - -
-
-
-
- - -
- -
-
-

Send an invite

-
- Friends will receive an email allowing them to join this team -
-
-
-
- - inviteName.value = e.target!.value} - id="name" type="text" placeholder="Jane Doe" class="[transition:all_0.3s_cubic-bezier(0.4,0,0.2,1)] w-full bg-transparent px-2 py-3 h-10 border text-black dark:text-white dark:border-gray-700/70 border-gray-300/70 rounded-md text-sm outline-none leading-none focus:ring-gray-300 dark:focus:ring-gray-700 focus:ring-2" /> -
-
- - inviteEmail.value = e.target!.value} - id="email" type="email" placeholder="jane@doe.com" class="[transition:all_0.3s_cubic-bezier(0.4,0,0.2,1)] w-full px-2 bg-transparent py-3 h-10 border text-black dark:text-white dark:border-gray-700/70 border-gray-300/70 rounded-md text-sm outline-none leading-none focus:ring-gray-300 dark:focus:ring-gray-700 focus:ring-2" /> -
-
-
-
- - Cancel - - -
-
-
-
- - ) -}) \ No newline at end of file diff --git a/packages/ui/src/image/basic-image-loader.tsx b/packages/ui/src/image/basic-image-loader.tsx deleted file mode 100644 index 2377a56f..00000000 --- a/packages/ui/src/image/basic-image-loader.tsx +++ /dev/null @@ -1,107 +0,0 @@ -/* eslint-disable qwik/no-use-visible-task */ -import { cn } from '@nestri/ui/design'; -import { component$, useSignal, useTask$, useStyles$, useVisibleTask$ } from '@builder.io/qwik'; - -interface ImageLoaderProps { - src: string; - alt: string; - width?: number; - height?: number; - class?: string; -} - -export const BasicImageLoader = component$((props: ImageLoaderProps) => { - const imageLoaded = useSignal(false); - const hasError = useSignal(false); - const imgRef = useSignal(); - - useStyles$(` - @keyframes gradientShift { - 0% { background-position: 200% 0; } - 100% { background-position: -200% 0; } - } - .loading-animation { - animation: gradientShift 1.5s infinite linear; - background-size: 200% 100%; - } - `); - - useTask$(({ track }) => { - track(() => props.src); - imageLoaded.value = false; - hasError.value = false; - }); - - - useVisibleTask$(async ({ cleanup }) => { - const img = imgRef.value; - if (!img) return; - // const imageData = await imageGetter(); - - const checkImageLoaded = async () => { - if (img.complete && img.naturalHeight !== 0) { - imageLoaded.value = true; - } - }; - - // Check immediately in case the image is already loaded - await checkImageLoaded(); - - // Set up event listeners - const loadHandler = async () => { - imageLoaded.value = true; - }; - const errorHandler = () => { - hasError.value = true; - }; - - img.addEventListener('load', loadHandler); - img.addEventListener('error', errorHandler); - - // Use MutationObserver to detect src changes - const observer = new MutationObserver(checkImageLoaded); - observer.observe(img, { attributes: true, attributeFilter: ['src'] }); - - cleanup(() => { - img.removeEventListener('load', loadHandler); - img.removeEventListener('error', errorHandler); - observer.disconnect(); - }); - }); - - return ( - <> - {!imageLoaded.value && !hasError.value && ( -
- )} - {props.alt} - {hasError.value && ( -

- Error loading image -

- )} - - ); -}); \ No newline at end of file diff --git a/packages/ui/src/image/image-loader.tsx b/packages/ui/src/image/image-loader.tsx deleted file mode 100644 index 1fad1a4e..00000000 --- a/packages/ui/src/image/image-loader.tsx +++ /dev/null @@ -1,195 +0,0 @@ -/* eslint-disable qwik/no-use-visible-task */ -import { cn } from '@nestri/ui/design'; -import { component$, useSignal, useTask$, useStyles$, useVisibleTask$, $ } from '@builder.io/qwik'; - -interface ImageLoaderProps { - src: string; - alt: string; - width?: number; - height?: number; - class?: string; -} - -interface Color { - r: number; - g: number; - b: number; -} - -export const ImageLoader = component$((props: ImageLoaderProps) => { - const imageLoaded = useSignal(false); - const hasError = useSignal(false); - const imgRef = useSignal(); - const shadowColor = useSignal(''); - const imageUrl = `http://localhost:8787/image/cover/${props.src}.avif?width=${props.width}&height=${props.height}&quality=100`; - - useStyles$(` - @keyframes gradientShift { - 0% { background-position: 200% 0; } - 100% { background-position: -200% 0; } - } - .loading-animation { - animation: gradientShift 1.5s infinite linear; - background-size: 200% 100%; - } - `); - - useTask$(({ track }) => { - track(() => props.src); - imageLoaded.value = false; - hasError.value = false; - shadowColor.value = ''; - }); - - const analyzeImage = $((img: HTMLImageElement) => { - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d', { willReadFrequently: true }); - if (!ctx) return; - - // img.crossOrigin = "anonymous" - canvas.width = img.width; - canvas.height = img.height; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - - const sampleSize = 20; - const colors: Color[] = []; - - for (let x = 0; x < sampleSize; x++) { - for (let y = 0; y < sampleSize; y++) { - const px = Math.floor((x / sampleSize) * canvas.width); - const py = Math.floor((y / sampleSize) * canvas.height); - const pixelData = ctx.getImageData(px, py, 1, 1).data; - colors.push({ r: pixelData[0], g: pixelData[1], b: pixelData[2] }); - } - } - - // Function to calculate color saturation - const calculateSaturation = (color: Color) => { - const max = Math.max(color.r, color.g, color.b); - const min = Math.min(color.r, color.g, color.b); - return max === 0 ? 0 : (max - min) / max; - }; - - // Function to calculate color brightness - const calculateBrightness = (color: Color) => { - return (color.r * 299 + color.g * 587 + color.b * 114) / 1000; - }; - - // Find the color with high saturation and brightness - const vibrantColor = colors.reduce((mostVibrant, color) => { - const saturation = calculateSaturation(color); - const brightness = calculateBrightness(color); - const currentSaturation = calculateSaturation(mostVibrant); - const currentBrightness = calculateBrightness(mostVibrant); - - // Prefer colors with high saturation and high brightness - if (saturation > 0.5 && brightness > 100 && (saturation + brightness * 0.01) > (currentSaturation + currentBrightness * 0.01)) { - return color; - } - return mostVibrant; - }, colors[0]); - - // Increase the brightness of the selected color - const enhancedColor = { - r: Math.min(255, vibrantColor.r * 1.2), - g: Math.min(255, vibrantColor.g * 1.2), - b: Math.min(255, vibrantColor.b * 1.2) - }; - - shadowColor.value = `rgb(${Math.round(enhancedColor.r)},${Math.round(enhancedColor.g)},${Math.round(enhancedColor.b)})`; - }); - - useVisibleTask$(async ({ cleanup }) => { - const img = imgRef.value; - if (!img) return; - // const imageData = await imageGetter(); - - const checkImageLoaded = async () => { - if (img.complete && img.naturalHeight !== 0) { - imageLoaded.value = true; - await analyzeImage(img); - } - }; - - // Check immediately in case the image is already loaded - await checkImageLoaded(); - - // Set up event listeners - const loadHandler = async () => { - imageLoaded.value = true; - await analyzeImage(img); - }; - const errorHandler = () => { - hasError.value = true; - }; - - img.addEventListener('load', loadHandler); - img.addEventListener('error', errorHandler); - - // Use MutationObserver to detect src changes - const observer = new MutationObserver(checkImageLoaded); - observer.observe(img, { attributes: true, attributeFilter: ['src'] }); - - cleanup(() => { - img.removeEventListener('load', loadHandler); - img.removeEventListener('error', errorHandler); - observer.disconnect(); - }); - }); - - return ( -
- {!imageLoaded.value && !hasError.value && ( -
- )} - {/* {imageLoaded.value && ( - - ); -}); \ No newline at end of file diff --git a/packages/ui/src/image/image-prefetcher.ts b/packages/ui/src/image/image-prefetcher.ts deleted file mode 100644 index 59767012..00000000 --- a/packages/ui/src/image/image-prefetcher.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { $, useVisibleTask$ } from '@builder.io/qwik'; - -export const setupImageLoader = $(() => { - const imageCache = new Map(); - - const loadImage = async (img: HTMLImageElement) => { - const src = img.getAttribute('data-src'); - console.log('src', src); - if (!src) return; - - // Check if the image is already in the cache - if (imageCache.has(src)) { - img.src = imageCache.get(src); - img.classList.add('loaded'); - return; - } - - // Check if the image is in the browser's cache - const cache = await caches.open('image-cache'); - console.log('cache', cache); - const cachedResponse = await cache.match(src); - - if (cachedResponse) { - const blob = await cachedResponse.blob(); - const objectURL = URL.createObjectURL(blob); - img.src = objectURL; - imageCache.set(src, objectURL); - img.classList.add('loaded'); - } else { - // If not in cache, load the image - try { - const response = await fetch(src); - const blob = await response.blob(); - const objectURL = URL.createObjectURL(blob); - - img.src = objectURL; - imageCache.set(src, objectURL); - img.classList.add('loaded'); - - // Cache the image for future use - cache.put(src, new Response(blob)); - } catch (error) { - console.error('Error loading image:', error); - img.classList.add('error'); - } - } - }; - - const observer = new IntersectionObserver( - (entries) => { - entries.forEach((entry) => { - if (entry.isIntersecting) { - loadImage(entry.target as HTMLImageElement); - observer.unobserve(entry.target); - } - }); - }, - { rootMargin: '50px' } - ); - - const setupImages = () => { - const images = document.querySelectorAll('img[data-src]'); - images.forEach((img) => { - observer.observe(img); - }); - }; - - return setupImages; -}); - -export const useImageLoader = () => { - // eslint-disable-next-line qwik/no-use-visible-task - useVisibleTask$(async () => { - const setup = await setupImageLoader(); - setup(); - }); -}; \ No newline at end of file diff --git a/packages/ui/src/image/index.ts b/packages/ui/src/image/index.ts deleted file mode 100644 index 794ef13f..00000000 --- a/packages/ui/src/image/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./image-loader" -export * from "./basic-image-loader" \ No newline at end of file diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts deleted file mode 100644 index d2c4fc1b..00000000 --- a/packages/ui/src/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export * from "./nav-progress" -export * from "./nav-bar" -export * from "./fonts" -export * from "./input" -export * from "./home/nav-bar" -export * from "./home/machines" -export * from "./home/games" -export * from "./home/friends" -export * from "./game-card" -export * from "./tooltip" -export * from "./react/footer" -export * from "./card" -export * from "./router-head" -export * from "./team-counter" -export * from "./constants" -export * from "./svg" -export * as auth from "./popup" -export * as Modal from "./modal" -export { default as Book } from "./book" -export { default as Portal } from "./portal" -export { default as Avatar } from "./avatar" -export { default as SimpleFooter } from "./simple-footer" -export { default as GameStoreButton } from "./game-store" \ No newline at end of file diff --git a/packages/ui/src/input.tsx b/packages/ui/src/input.tsx deleted file mode 100644 index 36dcf144..00000000 --- a/packages/ui/src/input.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { - form, - cn, - type InputProps as InputVariants, -} from "./design" -import { type QwikIntrinsicElements, component$ } from '@builder.io/qwik'; - -export interface InputComponentProps extends Omit, InputVariants { - label?: string; - includeName?: string; - labelFor?: string; - description?: string; -} - -export const Input = component$(({ labelFor,description, label, variant = "mixed", fancy = false, size = "md", includeName, class: className, ...props }: InputComponentProps) => { - const { input } = form(); - - return ( -
{ - label && labelFor && - } - {description &&

{description}

} -
- {includeName &&

{includeName} 

} - -
-
- ) -}) - -// export const Input = qwikify$(ReactInput) \ No newline at end of file diff --git a/packages/ui/src/modal/index.ts b/packages/ui/src/modal/index.ts deleted file mode 100644 index bdf8893b..00000000 --- a/packages/ui/src/modal/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -//Copied from https://github.com/qwikifiers/qwik-ui/blob/main/packages/kit-headless/src/components/modal/index.ts -//Why? because qwik-ui/headless requires qwik v1.7.2 as a peer dependency, which is causing build errors in the monorepo -// Reference: https://github.com/qwikifiers/qwik-ui/blob/26c17886e9a84de9d0da09f1180ede5fdceb70f3/packages/kit-headless/package.json#L33 - -export { HModalRoot as Root } from './modal-root'; -export { HModalPanel as Panel } from './modal-panel'; -export { HModalContent as Content } from './modal-content'; -export { HModalFooter as Footer } from './modal-footer'; -export { HModalHeader as Header } from './modal-header'; -export { HModalTitle as Title } from './modal-title'; -export { HModalDescription as Description } from './modal-description'; -export { HModalTrigger as Trigger } from './modal-trigger'; -export { HModalClose as Close } from './modal-close'; diff --git a/packages/ui/src/modal/modal-close.tsx b/packages/ui/src/modal/modal-close.tsx deleted file mode 100644 index d9e16260..00000000 --- a/packages/ui/src/modal/modal-close.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { type PropsOf, Slot, component$, useContext, $ } from '@builder.io/qwik'; -import { modalContextId } from './modal-context'; - -export const HModalClose = component$((props: PropsOf<'button'>) => { - const context = useContext(modalContextId); - - const handleClick$ = $(() => { - context.showSig.value = false; - }); - - return ( - - ); -}); diff --git a/packages/ui/src/modal/modal-content.tsx b/packages/ui/src/modal/modal-content.tsx deleted file mode 100644 index dae18aec..00000000 --- a/packages/ui/src/modal/modal-content.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { type PropsOf, Slot, component$ } from '@builder.io/qwik'; - -/** - * @deprecated This component is deprecated and will be removed in future releases. - */ -export const HModalContent = component$((props: PropsOf<'div'>) => { - return ( -
- -
- ); -}); diff --git a/packages/ui/src/modal/modal-context.tsx b/packages/ui/src/modal/modal-context.tsx deleted file mode 100644 index c13e2233..00000000 --- a/packages/ui/src/modal/modal-context.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { type QRL, type Signal, createContextId } from '@builder.io/qwik'; - -export const modalContextId = createContextId('qui-modal'); - -export type ModalContext = { - // core state - localId: string; - showSig: Signal; - onShow$?: QRL<() => void>; - onClose$?: QRL<() => void>; - closeOnBackdropClick?: boolean; - alert?: boolean; -}; diff --git a/packages/ui/src/modal/modal-description.tsx b/packages/ui/src/modal/modal-description.tsx deleted file mode 100644 index 51b7b201..00000000 --- a/packages/ui/src/modal/modal-description.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { type PropsOf, Slot, component$, useContext } from '@builder.io/qwik'; -import { modalContextId } from './modal-context'; - -export type ModalDescriptionProps = PropsOf<'p'>; - -export const HModalDescription = component$((props: ModalDescriptionProps) => { - const context = useContext(modalContextId); - - const descriptionId = `${context.localId}-description`; - - return ( -

- -

- ); -}); diff --git a/packages/ui/src/modal/modal-footer.tsx b/packages/ui/src/modal/modal-footer.tsx deleted file mode 100644 index 326aea39..00000000 --- a/packages/ui/src/modal/modal-footer.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { type PropsOf, Slot, component$ } from '@builder.io/qwik'; - -/** - * @deprecated This component is deprecated and will be removed in future releases. - */ -export const HModalFooter = component$((props: PropsOf<'footer'>) => { - return ( -
- -
- ); -}); diff --git a/packages/ui/src/modal/modal-header.tsx b/packages/ui/src/modal/modal-header.tsx deleted file mode 100644 index 0333cf63..00000000 --- a/packages/ui/src/modal/modal-header.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { type PropsOf, Slot, component$ } from '@builder.io/qwik'; - -/** - * @deprecated This component is deprecated and will be removed in future releases. - */ -export const HModalHeader = component$((props: PropsOf<'header'>) => { - return ( -
- -
- ); -}); diff --git a/packages/ui/src/modal/modal-panel.tsx b/packages/ui/src/modal/modal-panel.tsx deleted file mode 100644 index 964cb50f..00000000 --- a/packages/ui/src/modal/modal-panel.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { - $, - type PropsOf, - type QRL, - type Signal, - Slot, - component$, - useSignal, - useStyles$, - useTask$, - sync$, - useContext, -} from '@builder.io/qwik'; - -import { modalContextId } from './modal-context'; - -import styles from './modal.css?inline'; -import { useModal } from './use-modal'; - -export type ModalProps = Omit, 'open'> & { - onShow$?: QRL<() => void>; - onClose$?: QRL<() => void>; - 'bind:show': Signal; - closeOnBackdropClick?: boolean; - alert?: boolean; -}; - -export const HModalPanel = component$((props: PropsOf<'dialog'>) => { - useStyles$(styles); - const { - activateFocusTrap, - closeModal, - deactivateFocusTrap, - showModal, - trapFocus, - wasModalBackdropClicked, - } = useModal(); - const context = useContext(modalContextId); - - const panelRef = useSignal(); - - useTask$(async function toggleModal({ track, cleanup }) { - const isOpen = track(() => context.showSig.value); - - if (!panelRef.value) return; - - const focusTrap = await trapFocus(panelRef.value); - - if (isOpen) { - // HACK: keep modal scroll position in place with iOS - const storedRequestAnimationFrame = window.requestAnimationFrame; - window.requestAnimationFrame = () => 42; - - await showModal(panelRef.value); - window.requestAnimationFrame = storedRequestAnimationFrame; - await context.onShow$?.(); - activateFocusTrap(focusTrap); - } else { - await closeModal(panelRef.value); - await context.onClose$?.(); - } - - cleanup(async () => { - await deactivateFocusTrap(focusTrap); - }); - }); - - const closeOnBackdropClick$ = $(async (e: MouseEvent) => { - if (context.alert === true || context.closeOnBackdropClick === false) { - return; - } - - // We do not want to close elements that dangle outside of the modal - if (!(e.target instanceof HTMLDialogElement)) { - return; - } - - if (await wasModalBackdropClicked(panelRef.value, e)) { - context.showSig.value = false; - } - }); - - const handleKeyDownSync$ = sync$((e: KeyboardEvent) => { - const keys = [' ', 'Enter']; - - if (e.target instanceof HTMLDialogElement && keys.includes(e.key)) { - e.preventDefault(); - } - - if (e.key === 'Escape') { - e.preventDefault(); - } - }); - - const handleKeyDown$ = $((e: KeyboardEvent) => { - if (e.key === 'Escape') { - // context.showSig.value = false; - e.stopPropagation(); - } - }); - - return ( - { - e.stopPropagation(); - await closeOnBackdropClick$(e); - }} - > - - - ); -}); diff --git a/packages/ui/src/modal/modal-root.tsx b/packages/ui/src/modal/modal-root.tsx deleted file mode 100644 index 5c33e0f0..00000000 --- a/packages/ui/src/modal/modal-root.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { - type PropsOf, - type QRL, - type Signal, - Slot, - component$, - useContextProvider, - useId, - useSignal, -} from '@builder.io/qwik'; -import { type ModalContext, modalContextId } from './modal-context'; - -type ModalRootProps = { - onShow$?: QRL<() => void>; - onClose$?: QRL<() => void>; - 'bind:show'?: Signal; - closeOnBackdropClick?: boolean; - alert?: boolean; -} & PropsOf<'div'>; - -export const HModalRoot = component$((props: ModalRootProps) => { - const localId = useId(); - - const { - 'bind:show': givenShowSig, - closeOnBackdropClick, - onShow$, - onClose$, - alert, - } = props; - - const defaultShowSig = useSignal(false); - const showSig = givenShowSig ?? defaultShowSig; - - const context: ModalContext = { - localId, - showSig, - closeOnBackdropClick, - onShow$, - onClose$, - alert, - }; - - useContextProvider(modalContextId, context); - - return ( -
- -
- ); -}); diff --git a/packages/ui/src/modal/modal-title.tsx b/packages/ui/src/modal/modal-title.tsx deleted file mode 100644 index 9d7b3a63..00000000 --- a/packages/ui/src/modal/modal-title.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { type PropsOf, Slot, component$, useContext } from '@builder.io/qwik'; -import { modalContextId } from './modal-context'; - -export type ModalTitleProps = PropsOf<'h2'>; - -export const HModalTitle = component$((props: ModalTitleProps) => { - const context = useContext(modalContextId); - - const titleId = `${context.localId}-title`; - - return ( -

- -

- ); -}); diff --git a/packages/ui/src/modal/modal-trigger.tsx b/packages/ui/src/modal/modal-trigger.tsx deleted file mode 100644 index 06379678..00000000 --- a/packages/ui/src/modal/modal-trigger.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { type PropsOf, Slot, component$, useContext, $ } from '@builder.io/qwik'; -import { modalContextId } from './modal-context'; - -export const HModalTrigger = component$((props: PropsOf<'button'>) => { - const context = useContext(modalContextId); - - const handleClick$ = $(() => { - context.showSig.value = !context.showSig.value; - }); - - return ( - - ); -}); diff --git a/packages/ui/src/modal/modal.css b/packages/ui/src/modal/modal.css deleted file mode 100644 index 795fe73d..00000000 --- a/packages/ui/src/modal/modal.css +++ /dev/null @@ -1,9 +0,0 @@ -@layer qwik-ui { - /* browsers automatically set an interesting max-width and max-height for dialogs - https://twitter.com/t3dotgg/status/1774350919133691936 - */ - dialog:modal { - max-width: unset; - max-height: unset; - } -} diff --git a/packages/ui/src/modal/use-modal.tsx b/packages/ui/src/modal/use-modal.tsx deleted file mode 100644 index ab374a2d..00000000 --- a/packages/ui/src/modal/use-modal.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import { $ } from '@builder.io/qwik'; -import { type FocusTrap, createFocusTrap } from 'focus-trap'; -import { enableBodyScroll, disableBodyScroll } from 'body-scroll-lock-upgrade'; - -export type WidthState = { - width: number | null; -}; - - -export function useModal() { - /** - * Listens for animation/transition events in order to - * remove Animation-CSS-Classes after animation/transition ended. - */ - const supportClosingAnimation = $((modal: HTMLDialogElement) => { - modal.dataset.closing = ''; - modal.classList.add('modal-closing'); - - const { animationDuration, transitionDuration } = getComputedStyle(modal); - - if (animationDuration !== '0s') { - modal.addEventListener( - 'animationend', - (e) => { - if (e.target === modal) { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }, - { once: true }, - ); - } else if (transitionDuration !== '0s') { - modal.addEventListener( - 'transitionend', - (e) => { - if (e.target === modal) { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }, - { once: true }, - ); - } else if (animationDuration === '0s' && transitionDuration === '0s') { - delete modal.dataset.closing; - modal.classList.remove('modal-closing'); - enableBodyScroll(modal); - modal.close(); - } - }); - - /** - * Traps the focus of the given Modal - * @returns FocusTrap - */ - const trapFocus = $((modal: HTMLDialogElement): FocusTrap => { - return createFocusTrap(modal, { escapeDeactivates: false }); - }); - - const activateFocusTrap = $((focusTrap: FocusTrap | null) => { - try { - focusTrap?.activate(); - } catch { - // Activating the focus trap throws if no tabbable elements are inside the container. - // If this is the case we are fine with not activating the focus trap. - // That's why we ignore the thrown error. - } - }); - - const deactivateFocusTrap = $((focusTrap: FocusTrap | null) => { - focusTrap?.deactivate(); - focusTrap = null; - }); - - /** - * Shows the given Modal. - * Applies a CSS-Class to animate the modal-showing. - * Calls the given callback that is executed after the Modal has been opened. - */ - const showModal = $(async (modal: HTMLDialogElement) => { - disableBodyScroll(modal, { reserveScrollBarGap: true }); - modal.showModal(); - }); - - /** - * Closes the given Modal. - * Applies a CSS-Class to animate the Modal-closing. - * Calls the given callback that is executed after the Modal has been closed. - */ - const closeModal = $(async (modal: HTMLDialogElement) => { - await supportClosingAnimation(modal); - }); - - /** - * Determines if the backdrop of the Modal has been clicked. - */ - const wasModalBackdropClicked = $( - (modal: HTMLDialogElement | undefined, clickEvent: MouseEvent): boolean => { - if (!modal) { - return false; - } - - const rect = modal.getBoundingClientRect(); - - const wasBackdropClicked = - rect.left > clickEvent.clientX || - rect.right < clickEvent.clientX || - rect.top > clickEvent.clientY || - rect.bottom < clickEvent.clientY; - - /** - * If the inside focusable elements are not prevented, such as a button it will also fire a click event. - * - * Hitting the enter or space keys on a button inside of the dialog for example, will fire a "pointer" event. In reality, it fires our onClick$ handler because we have not prevented the default behavior. - * - * This is why we check if the pointerId is -1. - **/ - return (clickEvent as PointerEvent).pointerId === -1 ? false : wasBackdropClicked; - }, - ); - - return { - trapFocus, - activateFocusTrap, - deactivateFocusTrap, - showModal, - closeModal, - wasModalBackdropClicked, - supportClosingAnimation, - }; -} diff --git a/packages/ui/src/nav-bar.tsx b/packages/ui/src/nav-bar.tsx deleted file mode 100644 index d1d5e5dd..00000000 --- a/packages/ui/src/nav-bar.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { $, component$, useOnDocument, useSignal } from "@builder.io/qwik"; -import { Link, useLocation } from "@builder.io/qwik-city"; -import { buttonVariants, cn } from "./design"; - -const navLinks = [ - { - name: "About Us", - href: "/about" - }, - { - name: "Pricing", - href: "/pricing" - }, - { - name: "Login", - href: "/auth/login" - } -] - - -export const NavBar = component$(() => { - const location = useLocation() - - const hasScrolled = useSignal(false); - - useOnDocument( - 'scroll', - $(() => { - hasScrolled.value = window.scrollY > 0; - }) - ); - - return ( - - ) -}) \ No newline at end of file diff --git a/packages/ui/src/nav-progress/index.tsx b/packages/ui/src/nav-progress/index.tsx deleted file mode 100644 index 8bf19acb..00000000 --- a/packages/ui/src/nav-progress/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { component$, useStyles$, useVisibleTask$ } from '@builder.io/qwik' -import { useLocation } from '@builder.io/qwik-city' -import type { NProgressOptions } from 'nprogress' -import nProgress from 'nprogress' -import nProgressStyles from 'nprogress/nprogress.css?inline' -import nPrStyles from './npr.css?inline' - -interface Props { - options?: Partial & - Partial<{ - color: string - height: string - }> -} - -export const NavProgress = component$(({ options = {} }: Props) => { - // const CSS_VAR_PREFIX = '--nav-progress-' - - useStyles$(nProgressStyles + nPrStyles) - - nProgress.configure({ showSpinner: false, ...options }) - - const location = useLocation() - - // eslint-disable-next-line qwik/no-use-visible-task - useVisibleTask$(({ track }) => { - const isNavigating = track(() => location.isNavigating) - if (isNavigating) nProgress.start() - else nProgress.done() - }) - - // return ( - // - // ) - return
-}) \ No newline at end of file diff --git a/packages/ui/src/nav-progress/npr.css b/packages/ui/src/nav-progress/npr.css deleted file mode 100644 index 05504c32..00000000 --- a/packages/ui/src/nav-progress/npr.css +++ /dev/null @@ -1,53 +0,0 @@ -#nprogress .bar { - background: theme("colors.primary.500"); - height: 2px; - z-index: 80; -} - -/* Fancy blur effect */ -#nprogress .peg { - box-shadow: 0 0 10px theme("colors.primary.500"), - 0 0 5px theme("colors.primary.500"); - z-index: 80; -} - -#nprogress .spinner-icon { - border-top-color: theme("colors.primary.500"); - border-left-color: theme("colors.primary.500"); - display: none; -} - -html.dark #nprogress .bar { - background: theme("colors.primary.500"); - height: 2px; -} - -html.dark #nprogress .peg { - box-shadow: 0 0 10px theme("colors.primary.500"), - 0 0 5px theme("colors.primary.500"); -} - -html.dark .spinner-icon { - border-top-color: theme("colors.primary.500"); - border-left-color: theme("colors.primary.500"); - display: none; -} - -@media (prefers-color-scheme: dark) { - - #nprogress .bar { - background: theme("colors.primary.500"); - height: 2px; - } - - #nprogress .peg { - box-shadow: 0 0 10px theme("colors.primary.500"), - 0 0 5px theme("colors.primary.500"); - } - - .spinner-icon { - border-top-color: theme("colors.primary.500"); - border-left-color: theme("colors.primary.500"); - display: none; - } -} \ No newline at end of file diff --git a/packages/ui/src/popup.ts b/packages/ui/src/popup.ts deleted file mode 100644 index 5e674b0b..00000000 --- a/packages/ui/src/popup.ts +++ /dev/null @@ -1,67 +0,0 @@ -export const openWindow = (url: string): Promise => { - return new Promise((resolve) => { - const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); - - if (isMobile) { - // Open in a new tab for mobile devices - const newTab = window.open(url, '_blank'); - localStorage.removeItem("auth_success") - - if (newTab) { - const pollTimer = setInterval(() => { - - if (newTab.closed) { - clearInterval(pollTimer); - resolve(); - - return; - } else if (localStorage.getItem("auth_success")) { - clearInterval(pollTimer); - newTab.location.href = 'about:blank'; - - setTimeout(() => { - newTab.close(); - window.focus(); - //TODO: Navigate and start onboarding - }, 50); - - localStorage.removeItem("auth_success") - - resolve(); - return; - } - }, 300); - } else { - resolve(); // Resolve if popup couldn't be opened - } - - } else { - // Open in a popup for desktop devices - const width = 600; - const height = 600; - const top = window.top!.outerHeight / 2 + window.top!.screenY - (height / 2); - const left = window.top!.outerWidth / 2 + window.top!.screenX - (width / 2); - - const popup = window.open( - url, - 'Nestri Auth Popup', - `width=${width},height=${height},left=${left},top=${top},toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no,` - ); - - if (popup) { - const pollTimer = setInterval(() => { - - if (popup.closed) { - clearInterval(pollTimer); - localStorage.removeItem("auth_success") - resolve(); - return; - } - - }, 300); - } else { - resolve(); // Resolve if popup couldn't be opened - } - } - }); -}; \ No newline at end of file diff --git a/packages/ui/src/portal/assets/play_button_disabled_bg.png b/packages/ui/src/portal/assets/play_button_disabled_bg.png deleted file mode 100644 index 12c9c223..00000000 Binary files a/packages/ui/src/portal/assets/play_button_disabled_bg.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_button_focused_bg.png b/packages/ui/src/portal/assets/play_button_focused_bg.png deleted file mode 100644 index a7ab98cd..00000000 Binary files a/packages/ui/src/portal/assets/play_button_focused_bg.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_button_idle.json b/packages/ui/src/portal/assets/play_button_idle.json deleted file mode 100644 index a1e5cd9d..00000000 --- a/packages/ui/src/portal/assets/play_button_idle.json +++ /dev/null @@ -1,2316 +0,0 @@ -{"frames": [ - -{ - "filename": "loop_190910_00000.png", - "frame": {"x":1,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00001.png", - "frame": {"x":1,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00002.png", - "frame": {"x":1,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00003.png", - "frame": {"x":1,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00004.png", - "frame": {"x":1,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00005.png", - "frame": {"x":1,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00006.png", - "frame": {"x":1,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00007.png", - "frame": {"x":1,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00008.png", - "frame": {"x":1,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00009.png", - "frame": {"x":1,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00010.png", - "frame": {"x":1,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00011.png", - "frame": {"x":1,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00012.png", - "frame": {"x":1,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00013.png", - "frame": {"x":1,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00014.png", - "frame": {"x":1,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00015.png", - "frame": {"x":1,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00016.png", - "frame": {"x":1,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00017.png", - "frame": {"x":1,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00018.png", - "frame": {"x":113,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00019.png", - "frame": {"x":113,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00020.png", - "frame": {"x":113,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00021.png", - "frame": {"x":113,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00022.png", - "frame": {"x":113,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00023.png", - "frame": {"x":113,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00024.png", - "frame": {"x":113,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00025.png", - "frame": {"x":113,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00026.png", - "frame": {"x":113,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00027.png", - "frame": {"x":113,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00028.png", - "frame": {"x":113,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00029.png", - "frame": {"x":113,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00030.png", - "frame": {"x":113,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00031.png", - "frame": {"x":113,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00032.png", - "frame": {"x":113,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00033.png", - "frame": {"x":113,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00034.png", - "frame": {"x":113,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00035.png", - "frame": {"x":113,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00036.png", - "frame": {"x":225,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00037.png", - "frame": {"x":225,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00038.png", - "frame": {"x":225,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00039.png", - "frame": {"x":225,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00040.png", - "frame": {"x":225,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00041.png", - "frame": {"x":225,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00042.png", - "frame": {"x":225,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00043.png", - "frame": {"x":225,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00044.png", - "frame": {"x":225,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00045.png", - "frame": {"x":225,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00046.png", - "frame": {"x":225,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00047.png", - "frame": {"x":225,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00048.png", - "frame": {"x":225,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00049.png", - "frame": {"x":225,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00050.png", - "frame": {"x":225,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00051.png", - "frame": {"x":225,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00052.png", - "frame": {"x":225,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00053.png", - "frame": {"x":225,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00054.png", - "frame": {"x":337,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00055.png", - "frame": {"x":337,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00056.png", - "frame": {"x":337,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00057.png", - "frame": {"x":337,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00058.png", - "frame": {"x":337,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00059.png", - "frame": {"x":337,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00060.png", - "frame": {"x":337,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00061.png", - "frame": {"x":337,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00062.png", - "frame": {"x":337,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00063.png", - "frame": {"x":337,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00064.png", - "frame": {"x":337,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00065.png", - "frame": {"x":337,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00066.png", - "frame": {"x":337,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00067.png", - "frame": {"x":337,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00068.png", - "frame": {"x":337,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00069.png", - "frame": {"x":337,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00070.png", - "frame": {"x":337,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00071.png", - "frame": {"x":337,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00072.png", - "frame": {"x":449,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00073.png", - "frame": {"x":449,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00074.png", - "frame": {"x":449,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00075.png", - "frame": {"x":449,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00076.png", - "frame": {"x":449,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00077.png", - "frame": {"x":449,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00078.png", - "frame": {"x":449,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00079.png", - "frame": {"x":449,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00080.png", - "frame": {"x":449,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00081.png", - "frame": {"x":449,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00082.png", - "frame": {"x":449,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00083.png", - "frame": {"x":449,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00084.png", - "frame": {"x":449,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00085.png", - "frame": {"x":449,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00086.png", - "frame": {"x":449,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00087.png", - "frame": {"x":449,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00088.png", - "frame": {"x":449,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00089.png", - "frame": {"x":449,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00090.png", - "frame": {"x":561,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00091.png", - "frame": {"x":561,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00092.png", - "frame": {"x":561,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00093.png", - "frame": {"x":561,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00094.png", - "frame": {"x":561,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00095.png", - "frame": {"x":561,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00096.png", - "frame": {"x":561,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00097.png", - "frame": {"x":561,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00098.png", - "frame": {"x":561,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00099.png", - "frame": {"x":561,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00100.png", - "frame": {"x":561,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00101.png", - "frame": {"x":561,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00102.png", - "frame": {"x":561,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00103.png", - "frame": {"x":561,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00104.png", - "frame": {"x":561,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00105.png", - "frame": {"x":561,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00106.png", - "frame": {"x":561,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00107.png", - "frame": {"x":561,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00108.png", - "frame": {"x":673,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00109.png", - "frame": {"x":673,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00110.png", - "frame": {"x":673,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00111.png", - "frame": {"x":673,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00112.png", - "frame": {"x":673,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00113.png", - "frame": {"x":673,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00114.png", - "frame": {"x":673,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00115.png", - "frame": {"x":673,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00116.png", - "frame": {"x":673,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00117.png", - "frame": {"x":673,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00118.png", - "frame": {"x":673,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00119.png", - "frame": {"x":673,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00120.png", - "frame": {"x":673,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00121.png", - "frame": {"x":673,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00122.png", - "frame": {"x":673,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00123.png", - "frame": {"x":673,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00124.png", - "frame": {"x":673,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00125.png", - "frame": {"x":673,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00126.png", - "frame": {"x":785,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00127.png", - "frame": {"x":785,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00128.png", - "frame": {"x":785,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00129.png", - "frame": {"x":785,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00130.png", - "frame": {"x":785,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00131.png", - "frame": {"x":785,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00132.png", - "frame": {"x":785,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00133.png", - "frame": {"x":785,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00134.png", - "frame": {"x":785,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00135.png", - "frame": {"x":785,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00136.png", - "frame": {"x":785,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00137.png", - "frame": {"x":785,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00138.png", - "frame": {"x":785,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00139.png", - "frame": {"x":785,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00140.png", - "frame": {"x":785,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00141.png", - "frame": {"x":785,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00142.png", - "frame": {"x":785,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00143.png", - "frame": {"x":785,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00144.png", - "frame": {"x":897,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00145.png", - "frame": {"x":897,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00146.png", - "frame": {"x":897,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00147.png", - "frame": {"x":897,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00148.png", - "frame": {"x":897,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00149.png", - "frame": {"x":897,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00150.png", - "frame": {"x":897,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00151.png", - "frame": {"x":897,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00152.png", - "frame": {"x":897,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00153.png", - "frame": {"x":897,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00154.png", - "frame": {"x":897,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00155.png", - "frame": {"x":897,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00156.png", - "frame": {"x":897,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00157.png", - "frame": {"x":897,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00158.png", - "frame": {"x":897,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00159.png", - "frame": {"x":897,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00160.png", - "frame": {"x":897,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00161.png", - "frame": {"x":897,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00162.png", - "frame": {"x":1009,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00163.png", - "frame": {"x":1009,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00164.png", - "frame": {"x":1009,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00165.png", - "frame": {"x":1009,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00166.png", - "frame": {"x":1009,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00167.png", - "frame": {"x":1009,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00168.png", - "frame": {"x":1009,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00169.png", - "frame": {"x":1009,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00170.png", - "frame": {"x":1009,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00171.png", - "frame": {"x":1009,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00172.png", - "frame": {"x":1009,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00173.png", - "frame": {"x":1009,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00174.png", - "frame": {"x":1009,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00175.png", - "frame": {"x":1009,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00176.png", - "frame": {"x":1009,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00177.png", - "frame": {"x":1009,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00178.png", - "frame": {"x":1009,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00179.png", - "frame": {"x":1009,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00180.png", - "frame": {"x":1121,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00181.png", - "frame": {"x":1121,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00182.png", - "frame": {"x":1121,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00183.png", - "frame": {"x":1121,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00184.png", - "frame": {"x":1121,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00185.png", - "frame": {"x":1121,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00186.png", - "frame": {"x":1121,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00187.png", - "frame": {"x":1121,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00188.png", - "frame": {"x":1121,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00189.png", - "frame": {"x":1121,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00190.png", - "frame": {"x":1121,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00191.png", - "frame": {"x":1121,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00192.png", - "frame": {"x":1121,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00193.png", - "frame": {"x":1121,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00194.png", - "frame": {"x":1121,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00195.png", - "frame": {"x":1121,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00196.png", - "frame": {"x":1121,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00197.png", - "frame": {"x":1121,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00198.png", - "frame": {"x":1233,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00199.png", - "frame": {"x":1233,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00200.png", - "frame": {"x":1233,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00201.png", - "frame": {"x":1233,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00202.png", - "frame": {"x":1233,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00203.png", - "frame": {"x":1233,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00204.png", - "frame": {"x":1233,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00205.png", - "frame": {"x":1233,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00206.png", - "frame": {"x":1233,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00207.png", - "frame": {"x":1233,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00208.png", - "frame": {"x":1233,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00209.png", - "frame": {"x":1233,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00210.png", - "frame": {"x":1233,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00211.png", - "frame": {"x":1233,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00212.png", - "frame": {"x":1233,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00213.png", - "frame": {"x":1233,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00214.png", - "frame": {"x":1233,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00215.png", - "frame": {"x":1233,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00216.png", - "frame": {"x":1345,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00217.png", - "frame": {"x":1345,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00218.png", - "frame": {"x":1345,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00219.png", - "frame": {"x":1345,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00220.png", - "frame": {"x":1345,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00221.png", - "frame": {"x":1345,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00222.png", - "frame": {"x":1345,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00223.png", - "frame": {"x":1345,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00224.png", - "frame": {"x":1345,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00225.png", - "frame": {"x":1345,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00226.png", - "frame": {"x":1345,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00227.png", - "frame": {"x":1345,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00228.png", - "frame": {"x":1345,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00229.png", - "frame": {"x":1345,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00230.png", - "frame": {"x":1345,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00231.png", - "frame": {"x":1345,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00232.png", - "frame": {"x":1345,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00233.png", - "frame": {"x":1345,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00234.png", - "frame": {"x":1457,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00235.png", - "frame": {"x":1457,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00236.png", - "frame": {"x":1457,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00237.png", - "frame": {"x":1457,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00238.png", - "frame": {"x":1457,"y":449,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00239.png", - "frame": {"x":1457,"y":561,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00240.png", - "frame": {"x":1457,"y":673,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00241.png", - "frame": {"x":1457,"y":785,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00242.png", - "frame": {"x":1457,"y":897,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00243.png", - "frame": {"x":1457,"y":1009,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00244.png", - "frame": {"x":1457,"y":1121,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00245.png", - "frame": {"x":1457,"y":1233,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00246.png", - "frame": {"x":1457,"y":1345,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00247.png", - "frame": {"x":1457,"y":1457,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00248.png", - "frame": {"x":1457,"y":1569,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00249.png", - "frame": {"x":1457,"y":1681,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00250.png", - "frame": {"x":1457,"y":1793,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00251.png", - "frame": {"x":1457,"y":1905,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00252.png", - "frame": {"x":1569,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00253.png", - "frame": {"x":1569,"y":113,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00254.png", - "frame": {"x":1569,"y":225,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "loop_190910_00255.png", - "frame": {"x":1569,"y":337,"w":110,"h":110}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":110,"h":110}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_idle.png", - "format": "RGBA8888", - "size": {"w":1680,"h":2016}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:7307a3ed9f2d674f0bb451b8c2deb928:2f6906784f6b142907d3c0e88e6079f1:3754ddcffd572189fcc53b8e2da7f26e$" -} -} diff --git a/packages/ui/src/portal/assets/play_button_idle.png b/packages/ui/src/portal/assets/play_button_idle.png deleted file mode 100644 index 3b95b0eb..00000000 Binary files a/packages/ui/src/portal/assets/play_button_idle.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_button_intro.json b/packages/ui/src/portal/assets/play_button_intro.json deleted file mode 100644 index c3ffa363..00000000 --- a/packages/ui/src/portal/assets/play_button_intro.json +++ /dev/null @@ -1,588 +0,0 @@ -{"frames": [ - -{ - "filename": "intro_00000.png", - "frame": {"x":1,"y":1,"w":3,"h":3}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":3,"h":3}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00001.png", - "frame": {"x":911,"y":364,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00002.png", - "frame": {"x":1063,"y":367,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00003.png", - "frame": {"x":1215,"y":372,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00004.png", - "frame": {"x":1367,"y":374,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00005.png", - "frame": {"x":1519,"y":375,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00006.png", - "frame": {"x":1671,"y":379,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00007.png", - "frame": {"x":1823,"y":381,"w":150,"h":150}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00008.png", - "frame": {"x":759,"y":362,"w":150,"h":149}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":150,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00009.png", - "frame": {"x":456,"y":355,"w":148,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00010.png", - "frame": {"x":607,"y":360,"w":148,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":148,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00011.png", - "frame": {"x":1,"y":349,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00012.png", - "frame": {"x":153,"y":351,"w":147,"h":150}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":147,"h":150}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00013.png", - "frame": {"x":305,"y":353,"w":147,"h":149}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":1,"w":147,"h":149}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00014.png", - "frame": {"x":1867,"y":235,"w":144,"h":148}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":2,"w":144,"h":148}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00015.png", - "frame": {"x":1719,"y":235,"w":142,"h":146}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":3,"w":142,"h":146}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00016.png", - "frame": {"x":1574,"y":233,"w":140,"h":143}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":4,"w":140,"h":143}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00017.png", - "frame": {"x":1432,"y":233,"w":139,"h":140}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":6,"w":139,"h":140}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00018.png", - "frame": {"x":1292,"y":233,"w":138,"h":137}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":7,"w":138,"h":137}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00019.png", - "frame": {"x":1154,"y":231,"w":136,"h":134}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":9,"w":136,"h":134}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00020.png", - "frame": {"x":1018,"y":229,"w":134,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":9,"w":134,"h":133}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00021.png", - "frame": {"x":885,"y":229,"w":131,"h":131}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":10,"w":131,"h":131}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00022.png", - "frame": {"x":754,"y":229,"w":129,"h":129}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":10,"y":11,"w":129,"h":129}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00023.png", - "frame": {"x":624,"y":229,"w":128,"h":127}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":12,"w":128,"h":127}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00024.png", - "frame": {"x":496,"y":227,"w":126,"h":126}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":12,"y":12,"w":126,"h":126}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00025.png", - "frame": {"x":370,"y":227,"w":124,"h":124}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":13,"w":124,"h":124}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00026.png", - "frame": {"x":246,"y":227,"w":122,"h":122}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":122,"h":122}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00027.png", - "frame": {"x":1,"y":227,"w":121,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":15,"w":121,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00028.png", - "frame": {"x":124,"y":227,"w":120,"h":120}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":15,"y":15,"w":120,"h":120}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00029.png", - "frame": {"x":1855,"y":115,"w":118,"h":118}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":118,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00030.png", - "frame": {"x":1735,"y":115,"w":117,"h":118}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":16,"w":117,"h":118}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00031.png", - "frame": {"x":1381,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00032.png", - "frame": {"x":1499,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00033.png", - "frame": {"x":1617,"y":115,"w":116,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":17,"w":116,"h":116}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00034.png", - "frame": {"x":685,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00035.png", - "frame": {"x":801,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00036.png", - "frame": {"x":917,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00037.png", - "frame": {"x":1033,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00038.png", - "frame": {"x":1149,"y":113,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00039.png", - "frame": {"x":1265,"y":115,"w":114,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":18,"w":114,"h":114}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00040.png", - "frame": {"x":1350,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00041.png", - "frame": {"x":1464,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00042.png", - "frame": {"x":1578,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00043.png", - "frame": {"x":1692,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00044.png", - "frame": {"x":1806,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00045.png", - "frame": {"x":1920,"y":1,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00046.png", - "frame": {"x":1,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00047.png", - "frame": {"x":115,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00048.png", - "frame": {"x":229,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00049.png", - "frame": {"x":343,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00050.png", - "frame": {"x":457,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00051.png", - "frame": {"x":571,"y":113,"w":112,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":112,"h":112}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00052.png", - "frame": {"x":6,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00053.png", - "frame": {"x":118,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00054.png", - "frame": {"x":230,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00055.png", - "frame": {"x":342,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00056.png", - "frame": {"x":454,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00057.png", - "frame": {"x":566,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00058.png", - "frame": {"x":678,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00059.png", - "frame": {"x":790,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00060.png", - "frame": {"x":902,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00061.png", - "frame": {"x":1014,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00062.png", - "frame": {"x":1126,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "intro_00063.png", - "frame": {"x":1238,"y":1,"w":110,"h":110}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":20,"w":110,"h":110}, - "sourceSize": {"w":150,"h":150}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_button_intro.png", - "format": "RGBA8888", - "size": {"w":2033,"h":532}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c182f7ef1f119bbfd7cc0a11dba8aad6:0f1ccfe8fb1cdc864d87b7e8f6fb3197:356e3de40db0da0fa679697918a56687$" -} -} diff --git a/packages/ui/src/portal/assets/play_button_intro.png b/packages/ui/src/portal/assets/play_button_intro.png deleted file mode 100644 index a4d57c84..00000000 Binary files a/packages/ui/src/portal/assets/play_button_intro.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_icon_exit.json b/packages/ui/src/portal/assets/play_icon_exit.json deleted file mode 100644 index 591a9e56..00000000 --- a/packages/ui/src/portal/assets/play_icon_exit.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing_outro_190822_00000.png", - "frame": {"x":82,"y":37,"w":25,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00001.png", - "frame": {"x":173,"y":1,"w":27,"h":11}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":16,"w":27,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00002.png", - "frame": {"x":186,"y":1,"w":30,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":50,"y":16,"w":30,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00003.png", - "frame": {"x":122,"y":35,"w":32,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":58,"y":16,"w":32,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00004.png", - "frame": {"x":1,"y":1,"w":22,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":72,"y":23,"w":22,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00005.png", - "frame": {"x":25,"y":1,"w":17,"h":37}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":40,"w":17,"h":37}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00006.png", - "frame": {"x":1,"y":40,"w":31,"h":21}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":63,"w":31,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00007.png", - "frame": {"x":34,"y":40,"w":29,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":44,"y":65,"w":29,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00008.png", - "frame": {"x":65,"y":37,"w":15,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":41,"y":52,"w":15,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00009.png", - "frame": {"x":186,"y":18,"w":19,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":47,"w":19,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00010.png", - "frame": {"x":186,"y":38,"w":18,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":47,"y":46,"w":18,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00011.png", - "frame": {"x":97,"y":37,"w":23,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":45,"y":43,"w":23,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00012.png", - "frame": {"x":156,"y":35,"w":27,"h":28}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":41,"w":27,"h":28}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00013.png", - "frame": {"x":142,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00014.png", - "frame": {"x":110,"y":1,"w":30,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":39,"w":30,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00015.png", - "frame": {"x":44,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00016.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00017.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00018.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00019.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00020.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00021.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00022.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00023.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing_outro_190822_00024.png", - "frame": {"x":77,"y":1,"w":31,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":42,"y":38,"w":31,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_exit.png", - "format": "RGBA8888", - "size": {"w":217,"h":63}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:c3c530fe6905479b4ca8719a9d079c2e:313834a760df7f23cb3a698e4cd74589:0d545ddd0574d55083449defb59d19dc$" -} -} diff --git a/packages/ui/src/portal/assets/play_icon_exit.png b/packages/ui/src/portal/assets/play_icon_exit.png deleted file mode 100644 index 610ce6b4..00000000 Binary files a/packages/ui/src/portal/assets/play_icon_exit.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_icon_intro.json b/packages/ui/src/portal/assets/play_icon_intro.json deleted file mode 100644 index b20bac89..00000000 --- a/packages/ui/src/portal/assets/play_icon_intro.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-intro_190822_00000.png", - "frame": {"x":1,"y":1,"w":35,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":35,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00001.png", - "frame": {"x":38,"y":1,"w":34,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":36,"w":34,"h":38}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00002.png", - "frame": {"x":74,"y":1,"w":29,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":39,"w":29,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00003.png", - "frame": {"x":1,"y":41,"w":22,"h":24}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":43,"w":22,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00004.png", - "frame": {"x":142,"y":43,"w":17,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":48,"y":46,"w":17,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00005.png", - "frame": {"x":161,"y":40,"w":14,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":45,"w":14,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00006.png", - "frame": {"x":183,"y":1,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":54,"y":42,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00007.png", - "frame": {"x":183,"y":37,"w":9,"h":9}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":62,"y":38,"w":9,"h":9}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00008.png", - "frame": {"x":183,"y":25,"w":10,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":73,"y":38,"w":10,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00009.png", - "frame": {"x":180,"y":13,"w":10,"h":12}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":82,"y":46,"w":10,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00010.png", - "frame": {"x":168,"y":1,"w":10,"h":13}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":84,"y":59,"w":10,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00011.png", - "frame": {"x":177,"y":48,"w":13,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":76,"y":72,"w":13,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00012.png", - "frame": {"x":139,"y":13,"w":17,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":63,"y":80,"w":17,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00013.png", - "frame": {"x":158,"y":13,"w":20,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":49,"y":84,"w":20,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00014.png", - "frame": {"x":160,"y":25,"w":21,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":21,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00015.png", - "frame": {"x":114,"y":27,"w":21,"h":18}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":26,"y":73,"w":21,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00016.png", - "frame": {"x":94,"y":35,"w":18,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":63,"w":18,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00017.png", - "frame": {"x":123,"y":1,"w":14,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":53,"w":14,"h":24}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00018.png", - "frame": {"x":139,"y":1,"w":10,"h":27}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":42,"w":10,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00019.png", - "frame": {"x":114,"y":50,"w":13,"h":26}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":34,"w":13,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00020.png", - "frame": {"x":75,"y":35,"w":17,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":27,"w":17,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00021.png", - "frame": {"x":27,"y":41,"w":21,"h":22}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":22,"w":21,"h":22}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00022.png", - "frame": {"x":50,"y":41,"w":23,"h":19}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":19,"w":23,"h":19}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00023.png", - "frame": {"x":105,"y":1,"w":24,"h":16}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":17,"w":24,"h":16}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-intro_190822_00024.png", - "frame": {"x":134,"y":27,"w":24,"h":14}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":35,"y":16,"w":24,"h":14}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_intro.png", - "format": "RGBA8888", - "size": {"w":194,"h":64}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:a423de98fed1e06cc62611996868a2db:909cd8dbde93c0d2fca4402e7546ffd8:5ea08d4d7caaa5043281f5095baffab1$" -} -} diff --git a/packages/ui/src/portal/assets/play_icon_intro.png b/packages/ui/src/portal/assets/play_icon_intro.png deleted file mode 100644 index 528503d9..00000000 Binary files a/packages/ui/src/portal/assets/play_icon_intro.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/play_icon_loop.json b/packages/ui/src/portal/assets/play_icon_loop.json deleted file mode 100644 index bb8e0f41..00000000 --- a/packages/ui/src/portal/assets/play_icon_loop.json +++ /dev/null @@ -1,237 +0,0 @@ -{"frames": [ - -{ - "filename": "processing-loop_190822_00000.png", - "frame": {"x":37,"y":97,"w":23,"h":11}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":40,"y":16,"w":23,"h":11}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00001.png", - "frame": {"x":37,"y":110,"w":23,"h":10}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":16,"w":23,"h":10}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00002.png", - "frame": {"x":30,"y":257,"w":24,"h":12}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":51,"y":16,"w":24,"h":12}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00003.png", - "frame": {"x":34,"y":225,"w":25,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":56,"y":16,"w":25,"h":15}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00004.png", - "frame": {"x":1,"y":252,"w":27,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":61,"y":17,"w":27,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00005.png", - "frame": {"x":35,"y":180,"w":24,"h":25}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":19,"w":24,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00006.png", - "frame": {"x":39,"y":39,"w":21,"h":30}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":74,"y":24,"w":21,"h":30}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00007.png", - "frame": {"x":1,"y":120,"w":16,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":80,"y":30,"w":16,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00008.png", - "frame": {"x":1,"y":58,"w":13,"h":36}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":83,"y":38,"w":13,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00009.png", - "frame": {"x":41,"y":1,"w":19,"h":36}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":77,"y":47,"w":19,"h":36}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00010.png", - "frame": {"x":1,"y":151,"w":27,"h":33}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":68,"y":57,"w":27,"h":33}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00011.png", - "frame": {"x":1,"y":73,"w":34,"h":26}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":57,"y":68,"w":34,"h":26}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00012.png", - "frame": {"x":1,"y":1,"w":38,"h":18}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":46,"y":76,"w":38,"h":18}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00013.png", - "frame": {"x":1,"y":21,"w":38,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":81,"w":38,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00014.png", - "frame": {"x":1,"y":36,"w":36,"h":20}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":27,"y":74,"w":36,"h":20}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00015.png", - "frame": {"x":1,"y":197,"w":31,"h":27}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":66,"w":31,"h":27}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00016.png", - "frame": {"x":1,"y":226,"w":24,"h":31}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":57,"w":24,"h":31}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00017.png", - "frame": {"x":1,"y":101,"w":17,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":47,"w":17,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00018.png", - "frame": {"x":1,"y":138,"w":11,"h":34}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":39,"w":11,"h":34}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00019.png", - "frame": {"x":1,"y":180,"w":15,"h":32}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":31,"w":15,"h":32}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00020.png", - "frame": {"x":37,"y":149,"w":20,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":18,"y":25,"w":20,"h":29}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00021.png", - "frame": {"x":37,"y":122,"w":22,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":21,"w":22,"h":25}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00022.png", - "frame": {"x":39,"y":71,"w":24,"h":21}, - "rotated": true, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":18,"w":24,"h":21}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00023.png", - "frame": {"x":34,"y":206,"w":25,"h":17}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":16,"w":25,"h":17}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}, -{ - "filename": "processing-loop_190822_00024.png", - "frame": {"x":34,"y":242,"w":25,"h":13}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":36,"y":16,"w":25,"h":13}, - "sourceSize": {"w":110,"h":110}, - "pivot": {"x":0.5,"y":0.5} -}], -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "play_icon_loop.png", - "format": "RGBA8888", - "size": {"w":61,"h":273}, - "scale": "1", - "smartupdate": "$TexturePacker:SmartUpdate:4d92719faa27cbc50926429a66fc808c:25af8a045fca3b76dba8d8d26ed4ccf7:9b86d3b10829102d2ccf1bd5942144f2$" -} -} diff --git a/packages/ui/src/portal/assets/play_icon_loop.png b/packages/ui/src/portal/assets/play_icon_loop.png deleted file mode 100644 index 27e55e94..00000000 Binary files a/packages/ui/src/portal/assets/play_icon_loop.png and /dev/null differ diff --git a/packages/ui/src/portal/assets/portal_background_placeholder.png b/packages/ui/src/portal/assets/portal_background_placeholder.png deleted file mode 100644 index 31490490..00000000 Binary files a/packages/ui/src/portal/assets/portal_background_placeholder.png and /dev/null differ diff --git a/packages/ui/src/portal/index.tsx b/packages/ui/src/portal/index.tsx deleted file mode 100644 index 91304df3..00000000 --- a/packages/ui/src/portal/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { $, component$, useSignal, useVisibleTask$ } from "@builder.io/qwik"; -import portal, { PortalButton, PortalIcon } from "./play"; - -//TODO: Fix the portal animation does not restart when a new element renders it. What i mean is, if you click one games, then quit, then click on another, the animation won't show. -//FIXME: I dunno why the animation is not showing on the second game. - -// interface PortalProps { -// onComplete$: QRL<() => void>; -// } - -export default component$(() => { - const buttonRef = useSignal(); - const iconRef = useSignal(); - const imagesLoaded = useSignal(false); - - const imageUrls = [ - portal.assets.button_assets["intro"].image, - portal.assets.button_assets["idle"].image, - portal.assets.icon_assets["exit"].image, - portal.assets.icon_assets["intro"].image, - portal.assets.icon_assets["loop"].image - ]; - - const loadImages = $(() => { - return Promise.all(imageUrls.map(url => { - return new Promise((resolve, reject) => { - const img = new Image(); - img.onload = () => resolve(img); - img.onerror = reject; - img.src = url; - }); - })); - }) - - // eslint-disable-next-line qwik/no-use-visible-task - useVisibleTask$(async ({ track }) => { - track(() => imagesLoaded.value); - - if (buttonRef.value && iconRef.value) { - const [introImg, idleImg, exitImg, , loopImg] = await loadImages(); - - const button = new PortalButton(buttonRef.value); - const icon = new PortalIcon(iconRef.value) - // if (!isMounted) return; - - await button.render("intro", false, introImg as HTMLImageElement); - await icon.render("exit", false, exitImg as HTMLImageElement, false); - await button.render("idle", true, idleImg as HTMLImageElement, 3); - - // Intro and loop animation - await Promise.all([ - (async () => { - if (iconRef.value) { - await icon.render("loop", false, loopImg as HTMLImageElement, true); - await icon.render("loop", false, loopImg as HTMLImageElement, true); - await icon.render("exit", false, exitImg as HTMLImageElement, true); - } - })(), - button.render("idle", true, idleImg as HTMLImageElement, 2), - ]); - } - }); - - - return ( - - ) -}) \ No newline at end of file diff --git a/packages/ui/src/portal/play.ts b/packages/ui/src/portal/play.ts deleted file mode 100644 index d0c8eb59..00000000 --- a/packages/ui/src/portal/play.ts +++ /dev/null @@ -1,309 +0,0 @@ -import PlayButtonIntro from "./assets/play_button_intro.json" -import PlayButtonIdle from "./assets/play_button_idle.json" -import PlayIconIntro from "./assets/play_icon_intro.json" -import PlayIconLoop from "./assets/play_icon_loop.json" -import PlayIconExit from "./assets/play_icon_exit.json" - -const button_assets = { - intro: { - image: "/portal/play_button_intro.png", - json: PlayButtonIntro - }, - idle: { - image: "/portal/play_button_idle.png", - json: PlayButtonIdle - } -} - -const icon_assets = { - intro: { - image: "/portal/play_icon_intro.png", - json: PlayIconIntro - }, - loop: { - image: "/portal/play_icon_loop.png", - json: PlayIconLoop - }, - exit: { - image: "/portal/play_icon_exit.png", - json: PlayIconExit - } -} - -export class PortalButton { - private canvas: HTMLCanvasElement; - private currentFrame: number; - private index: number; - private buttonQueue: (() => void)[]; - private isButtonRunning: boolean; - private animationSpeed: number; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.currentFrame = 0; - this.index = 0; - this.buttonQueue = []; - this.isButtonRunning = false; - this.animationSpeed = 50; - } - - render(type: "intro" | "idle", loop: boolean, image: HTMLImageElement, index?: number) { - if (index) this.index = index - return new Promise((resolve) => { - const buttonTask = () => { - // Get the canvas element - const ctx = this.canvas.getContext('2d'); - - // Load the JSON data - const animationData = button_assets[type].json; - - // Play the animation - const frames = animationData.frames; - const totalFrames = frames.length; - - if (this.index) this.currentFrame = this.index; - - const targetDim = 100 //target dimensions of the output image (height, width) - - // Start the animation - const updateFrame = () => { - - // Check if we have reached the last frame - if (!loop && this.currentFrame === totalFrames - 1) { - // Animation has reached the last frame, stop playing - this.isButtonRunning = false; - - // Resolve the Promise to indicate completion - resolve(); - return null; - } - - // Clear the canvas - ctx?.clearRect(0, 0, this.canvas.width, this.canvas.height); - - // Get the current frame details - const singleFrame = frames[this.currentFrame]; - const { frame, sourceSize: ss, rotated, spriteSourceSize: sss, trimmed } = singleFrame; - - this.canvas.width = targetDim; - this.canvas.height = targetDim; - this.canvas.style.borderRadius = `${ss.h / 2}px` - - const newSize = { - w: frame.w, - h: frame.h - }; - - const newPosition = { - x: 0, - y: 0 - }; - - if (rotated) { - ctx?.save() - ctx?.translate(this.canvas.width / 2, this.canvas.height / 2) - ctx?.rotate(-Math.PI / 2); - ctx?.translate(-this.canvas.height / 2, -this.canvas.width / 2); - - newSize.w = frame.h; - newSize.h = frame.w; - } - - if (trimmed) { - newPosition.x = sss.x; - newPosition.y = sss.y; - - if (rotated) { - newPosition.x = this.canvas.height - sss.h - sss.y; - newPosition.y = sss.x; - } - } - - const scaleFactor = Math.min(targetDim / newSize.w, targetDim / newSize.h); - const scaledWidth = newSize.w * scaleFactor; - const scaledHeight = newSize.w * scaleFactor; - - // Calculate the center position to draw the resized image - const x = (targetDim - scaledWidth) / 2; - const y = (targetDim - scaledHeight) / 2; - - ctx?.drawImage( - image, - frame.x, - frame.y, - newSize.w, - newSize.h, - x, - y, - scaledWidth, - scaledHeight - ) - - - if (rotated) { - ctx?.restore() - } - // Increment the frame index - this.currentFrame = (this.currentFrame + 1) % totalFrames - - // Schedule the next frame update - setTimeout(updateFrame, this.animationSpeed); - }; - - return updateFrame() - } - // Check if the button function is already running - if (this.isButtonRunning) { - // If running, add the button task to the queue - this.buttonQueue.push(buttonTask); - - } else { - // If not running, set the flag and execute the button task immediately - this.isButtonRunning = true; - buttonTask(); - } - }) - } -} - -export class PortalIcon { - private canvas: HTMLCanvasElement; - private currentFrame: number; - private index: number; - private iconQueue: (() => void)[]; - private isIconRunning: boolean; - private animationSpeed: number; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.currentFrame = 0; - this.index = 0; - this.iconQueue = []; - this.isIconRunning = false; - this.animationSpeed = 50; - } - - render(type: "loop" | "intro" | "exit", loop: boolean, image: HTMLImageElement, play: boolean) { - return new Promise((resolve) => { - const iconTask = () => { - // Get the canvas element - const ctx = this.canvas.getContext('2d'); - - // Load the JSON data - const animationData = icon_assets[type].json; - - // Load the image - // const image = new Image(); - image.src = icon_assets[type].image; // Path to the sprite sheet image - - // Play the animation - const frames = animationData.frames; - const totalFrames = frames.length; - - if (!play) { - this.currentFrame = totalFrames - 3 - } else { this.currentFrame = 0 } - - // Start the animation - const updateFrame = () => { - - // Check if we have reached the last frame - if (!loop && this.currentFrame === totalFrames - 1) { - // Animation has reached the last frame, stop playing - this.isIconRunning = false; - - // Resolve the Promise to indicate completion - resolve(); - return; - } - - // Clear the canvas - ctx?.clearRect(0, 0, this.canvas.width, this.canvas.height); - - // Get the current frame details - const singleFrame = frames[this.currentFrame]; - const { frame, sourceSize: ss, rotated, spriteSourceSize: sss, trimmed } = singleFrame; - - this.canvas.width = ss.w; - this.canvas.height = ss.h - this.canvas.style.borderRadius = `${ss.h / 2}px` - - const newSize = { - w: frame.w, - h: frame.h - }; - - const newPosition = { - x: 0, - y: 0 - }; - - if (rotated) { - ctx?.save() - ctx?.translate(this.canvas.width / 2, this.canvas.height / 2) - ctx?.rotate(-Math.PI / 2); - ctx?.translate(-this.canvas.height / 2, -this.canvas.width / 2); - - newSize.w = frame.h; - newSize.h = frame.w; - } - - if (trimmed) { - newPosition.x = sss.x; - newPosition.y = sss.y; - - if (rotated) { - newPosition.x = this.canvas.height - sss.h - sss.y; - newPosition.y = sss.x; - } - } - - ctx?.drawImage( - image, - frame.x, - frame.y, - newSize.w, - newSize.h, - newPosition.x, - newPosition.y, - newSize.w, - newSize.h - ) - - - if (rotated) { - ctx?.restore() - } - // Increment the frame index - this.currentFrame = (this.currentFrame + 1) % totalFrames - - - // Schedule the next frame update - if (!play) { - this.isIconRunning = false; - - resolve(); - return; - } - - setTimeout(updateFrame, this.animationSpeed) - }; - - return updateFrame(); - } - // Check if the icon function is already running - if (this.isIconRunning) { - // If running, add the button icon to the queue - this.iconQueue.push(iconTask); - } else { - // If not running, set the flag and execute the button task immediately - this.isIconRunning = true; - iconTask(); - } - }) - } - -} - -const portal = { assets: { button_assets, icon_assets } } -export default portal; \ No newline at end of file diff --git a/packages/ui/src/react/animate.tsx b/packages/ui/src/react/animate.tsx deleted file mode 100644 index 0e5b3be0..00000000 --- a/packages/ui/src/react/animate.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/** @jsxImportSource react */ -import { qwikify$ } from '@builder.io/qwik-react'; -import { type MotionProps, AnimatePresence } from 'framer-motion'; -import React, { type ReactNode } from 'react'; - -interface ReactAnimateComponentProps extends MotionProps { - // as?: keyof JSX.IntrinsicElements; - children?: ReactNode; - // class?: string; - // id: string; -} - - -export const ReactAnimateComponent = ({ - // as = 'div', - // id, - children, - // class: className, - // ...motionProps -}: ReactAnimateComponentProps) => { - // const MotionTag = motion[as as keyof typeof motion] as React.ComponentType; - - return ( - - {children} - {/* - */} - - ); -}; - -export const AnimateComponent = qwikify$(ReactAnimateComponent); \ No newline at end of file diff --git a/packages/ui/src/react/button.tsx b/packages/ui/src/react/button.tsx deleted file mode 100644 index 9a1e4efb..00000000 --- a/packages/ui/src/react/button.tsx +++ /dev/null @@ -1,147 +0,0 @@ -/** @jsxImportSource react */ - -import * as React from "react" -import { motion } from "framer-motion" -import { qwikify$ } from "@builder.io/qwik-react"; -import { cn, buttonIcon, buttonVariants, type ButtonVariantProps, type ButtonVariantIconProps } from "@nestri/ui/design"; -import {cloneElement,} from "./utils" - -export interface ButtonRootProps extends React.HTMLAttributes, ButtonVariantProps { - class?: string; - children?: React.ReactElement; - onClick?: () => void | Promise; - setIsLoading?: (v: boolean) => void; - isLoading: boolean; - disabled?: boolean; - loadingTime?: number; - href?: string; -} - -export interface ButtonIconProps extends React.HTMLAttributes, ButtonVariantIconProps { - isLoading: boolean; - height?: number; - width?: number; - class?:string; -} - -export interface ButtonLabelProps extends React.HTMLAttributes, ButtonVariantIconProps { - loadingText?: string; - class?: string; - isLoading: boolean; -} - -export const Icon: React.FC = (({ - class:className, - children, - size = "md", - isLoading, - type = "leading", - height = 20, - width = 20, -}) => { - - if (isLoading) { - return ( - - - - - ) - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - } else if (!isLoading && children) { - return cloneElement(children as React.ReactElement, buttonIcon({ size, type, className })) - } -}) - -export const Label = React.forwardRef(({ - class:className, - children, - loadingText, - isLoading, - ...props -}, forwardedRef) => { - - return ( - {isLoading && loadingText ? loadingText : children} - ) -}) - -const Root = React.forwardRef(({ - class: className, - href, - disabled = false, - loadingTime, - intent = "primary", - variant = "solid", - size = "md", - isLoading, - setIsLoading, - onClick, - children, - ...props }, forwardedRef) => { - - const handleClick = async () => { - if (setIsLoading) { - if (!isLoading && !disabled) { - setIsLoading(true); - if (onClick) { - await onClick(); - } else { - // Simulate an async operation - await new Promise(resolve => setTimeout(resolve, loadingTime)); - } - setIsLoading(false); - } - } - }; - const Component = href ? 'a' : 'button'; - const iconOnly = React.Children.toArray(children).some(child => - React.isValidElement(child) && child.type === Icon && child.props.type === 'only' - ); - - const buttonSize = iconOnly ? 'iconOnlyButtonSize' : 'size'; - - return ( - - {children} - - ) -}) - -export type ButtonRoot = typeof Root; -export type ButtonIcon = typeof Icon; -export type ButtonLabel = typeof Label; - -Root.displayName = 'Root'; -Icon.displayName = "Icon"; -Label.displayName = "Label"; - -export const Button = { - Root: qwikify$(Root), - Icon: qwikify$(Icon), - Label: qwikify$(Label) -} - -//The ✔️ SVG is here: -{/* */ } \ No newline at end of file diff --git a/packages/ui/src/react/cursor.tsx b/packages/ui/src/react/cursor.tsx deleted file mode 100644 index b73ad35c..00000000 --- a/packages/ui/src/react/cursor.tsx +++ /dev/null @@ -1,112 +0,0 @@ -/** @jsxImportSource react */ -import React from 'react' -import { motion } from 'framer-motion' -import { cn } from "@nestri/ui/design" -import { qwikify$ } from '@builder.io/qwik-react'; - -export const CursorSVG = ({ flip }: { flip?: boolean }) => ( - - - -) -type CursorProps = { class?: string; text: string, color?: string, flip?: boolean } - -const hexToRGBA = (hex: string, alpha: number = 1) => { - const r = parseInt(hex.slice(1, 3), 16); - const g = parseInt(hex.slice(3, 5), 16); - const b = parseInt(hex.slice(5, 7), 16); - return `rgba(${r}, ${g}, ${b}, ${alpha})`; -}; - -export const ReactCursor: React.FC = ({ - class: className, - text, - color = "#3B82F6", - flip = false, -}) => { - const [randomVariant, setRandomVariant] = React.useState({}); - - React.useEffect(() => { - const generateRandomVariant = () => { - const randomX = Math.random() * 40 - 20; // Random value between -20 and 20 - const randomY = Math.random() * 40 - 20; // Random value between -40 and 40 - const randomDuration = 3 + Math.random() * 7 ; // Random duration between 3 and 5 seconds - - return { - animate: { - translateX: [0, randomX, 0], - translateY: [0, randomY, 0], - }, - transition: { - duration: randomDuration, - repeat: Infinity, - repeatType: "reverse" as const, - ease: "easeInOut", - }, - }; - }; - - setRandomVariant(generateRandomVariant()); - }, []); - - const cursorElement = ; - const textElement = ( -
- {text} -
- ); - - const colorStyles = { - '--cursor-color': color, - '--cursor-color-light': hexToRGBA(color, 0.7), - '--cursor-color-dark': hexToRGBA(color, 0.8), - } as React.CSSProperties; - - return ( - -
- {flip ? ( - <> - {cursorElement} - {textElement} - - ) : ( - <> - {textElement} - {cursorElement} - - )} -
-
- ); -} - - - -export const Cursor = qwikify$(ReactCursor) \ No newline at end of file diff --git a/packages/ui/src/react/display.tsx b/packages/ui/src/react/display.tsx deleted file mode 100644 index d71c9371..00000000 --- a/packages/ui/src/react/display.tsx +++ /dev/null @@ -1,58 +0,0 @@ -/** @jsxImportSource react */ - -import React from "react" -import { - display, - type DisplayProps as DisplayVariants, - type TextAlignProp, - type TextWeightProp -} from "@nestri/ui/design" -import * as ReactBalancer from "react-wrap-balancer" -import { cn } from "@nestri/ui/design" -import { qwikify$ } from "@builder.io/qwik-react" - -type DisplaySize = DisplayVariants["size"] -type DisplaySizeProp = DisplaySize | { - initial?: DisplaySize, - sm?: DisplaySize, - md?: DisplaySize, - lg?: DisplaySize, - xl?: DisplaySize, - xxl?: DisplaySize, -} - -export interface DisplayProps extends React.HTMLAttributes { - as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span", - className?: string, - size?: DisplaySizeProp; - align?: TextAlignProp; - weight?: TextWeightProp -} - -export const ReactDisplay = ({ - size, - as = "h1", - weight, - align, - children, - className, - ...props -}: DisplayProps) => { - const DisplayElement = as - return ( - - - {children} - - - ) -} - -ReactDisplay.displayName = "Display" - -export const Display = qwikify$(ReactDisplay) \ No newline at end of file diff --git a/packages/ui/src/react/footer.tsx b/packages/ui/src/react/footer.tsx deleted file mode 100644 index 66ee2101..00000000 --- a/packages/ui/src/react/footer.tsx +++ /dev/null @@ -1,127 +0,0 @@ -/** @jsxImportSource react */ -// import { FooterBanner } from "../footer-banner"; -import { motion } from "framer-motion" -import { ReactDisplay } from "./display" -import { qwikify$ } from "@builder.io/qwik-react"; - -const transition = { - type: "spring", - stiffness: 100, - damping: 15, - restDelta: 0.001, - duration: 0.01, -} - -type Props = { - children?: React.ReactNode; -} - -export function ReactFooter({ children }: Props) { - return ( - <> -
-
- -
- - - Your games - - - Your rules - - - - {children} - -
- -
- -
- - - - - - - - - - - -
-
-
- - ); -} -export const Footer = qwikify$(ReactFooter) \ No newline at end of file diff --git a/packages/ui/src/react/hero-section.tsx b/packages/ui/src/react/hero-section.tsx deleted file mode 100644 index 636d7abf..00000000 --- a/packages/ui/src/react/hero-section.tsx +++ /dev/null @@ -1,119 +0,0 @@ -/* eslint-disable qwik/no-react-props */ -/** @jsxImportSource react */ -import { qwikify$ } from "@builder.io/qwik-react"; -import { motion } from "framer-motion" -import { ReactDisplay } from "./display" -import * as React from "react" - -const transition = { - type: "spring", - stiffness: 100, - damping: 15, - restDelta: 0.001, - duration: 0.01, -} - -type Props = { - children?: React.ReactNode; -} - -export function ReactHeroSection({ children }: Props) { - return ( - <> -
-
- -
- - - Your games - - - Your rules - - - - Nestri is an open-source cloud gaming platform that lets you play games on your own terms — invite friends to join your gaming sessions, share your game library, and take even more control by running it on your own GPU instance - - - {children} - -
-
-
- - ) -} - -export const HeroSection = qwikify$(ReactHeroSection) \ No newline at end of file diff --git a/packages/ui/src/react/index.ts b/packages/ui/src/react/index.ts deleted file mode 100644 index 8a4a39ae..00000000 --- a/packages/ui/src/react/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export * from "./hero-section" -export * from "./react-example" -export * from "./title-section" -export * from "./button" -export * from "./cursor" -export * from "./motion" -export * from "./title" -export * from "./text" -export * from "./animate" \ No newline at end of file diff --git a/packages/ui/src/react/marquee.tsx b/packages/ui/src/react/marquee.tsx deleted file mode 100644 index d3870dc9..00000000 --- a/packages/ui/src/react/marquee.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { cn } from "@nestri/ui/design"; -import { component$, useStore, type Component } from "@builder.io/qwik"; - - -interface MarqueeProps { - parentClass?: string; - itemClass?: string; - items: T[]; - pauseOnHover?: boolean; - renderItem: Component<{ item: T; index: number }>; - reverse?: boolean; - direction?: 'horizontal' | 'vertical'; - pad?: boolean; - translate?: 'track' | 'items'; - state?: 'running' | 'paused'; - spill?: boolean; - diff?: boolean; - inset?: number; - outset?: number; - speed?: number; - scale?: number; -} - -const renderStamp = Date.now() - -export const Marquee = component$(({ - parentClass, - itemClass, - reverse = false, - items, - renderItem: RenderItem, - direction = 'horizontal', - translate = 'items', - state = 'running', - pad = false, - spill = false, - diff = false, - inset = 0, - outset = 0, - pauseOnHover = false, - speed = 10, - scale = 1, -}: MarqueeProps) => { - const store = useStore({ - indices: Array.from({ length: items.length }, (_, i) => i), - }); - - return ( -
-
    - {pad && translate === 'track' - ? store.indices.map((index) => { - return ( - - ) - }) - : null} - {store.indices.map((index) => { - return ( -
  • - -
  • - ) - })} - {pad && translate === 'track' - ? store.indices.map((index) => { - return ( - - ) - }) - : null} -
-
- ); -}) \ No newline at end of file diff --git a/packages/ui/src/react/motion.tsx b/packages/ui/src/react/motion.tsx deleted file mode 100644 index afcbb738..00000000 --- a/packages/ui/src/react/motion.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/** @jsxImportSource react */ -import { qwikify$ } from '@builder.io/qwik-react'; -import { motion, type MotionProps } from 'framer-motion'; -import React, { type ReactNode } from 'react'; - -interface MotionComponentProps extends MotionProps { - as?: keyof JSX.IntrinsicElements; - children?: ReactNode; - class?: string; -} - -export const transition = { - type: "spring", - stiffness: 100, - damping: 15, - restDelta: 0.001, - duration: 0.01, - delay: 0.4, -} - -export const ReactMotionComponent = ({ - as = 'div', - children, - class: className, - ...motionProps -}: MotionComponentProps) => { - const MotionTag = motion[as as keyof typeof motion] as React.ComponentType; - - return ( - - {children} - - ); -}; - -export const MotionComponent = qwikify$(ReactMotionComponent); \ No newline at end of file diff --git a/packages/ui/src/react/my-cursor.tsx b/packages/ui/src/react/my-cursor.tsx deleted file mode 100644 index bbb43ebe..00000000 --- a/packages/ui/src/react/my-cursor.tsx +++ /dev/null @@ -1,116 +0,0 @@ -/** @jsxImportSource react */ -import React from 'react' -import { cn } from "@nestri/ui/design" -import { qwikify$ } from '@builder.io/qwik-react'; - -export const CursorSVG = ({ flip }: { flip?: boolean }) => ( - - - -) -type CursorProps = { class?: string; text: string, color?: string, flip?: boolean } - -const hexToRGBA = (hex: string, alpha: number = 1) => { - const r = parseInt(hex.slice(1, 3), 16); - const g = parseInt(hex.slice(3, 5), 16); - const b = parseInt(hex.slice(5, 7), 16); - return `rgba(${r}, ${g}, ${b}, ${alpha})`; -}; - -export const ReactMyCursor: React.FC = ({ - class: className, - text, - color = "#3B82F6", - flip = false, -}) => { - const containerRef = React.useRef(null); - const [position, setPosition] = React.useState({ x: 0, y: 0 }); - - React.useEffect(() => { - const container = containerRef.current; - if (!container) return; - - const handleMouseMove = (event: MouseEvent) => { - const rect = container.getBoundingClientRect(); - setPosition({ - x: event.clientX - rect.left, - y: event.clientY - rect.top - }); - - console.log(event.clientX - rect.left, event.clientY - rect.top) - - }; - - window.addEventListener('mousemove', handleMouseMove); - - return () => { - window.removeEventListener('mousemove', handleMouseMove); - }; - - }, []); - - const cursorElement = ; - const textElement = ( -
- {text} -
- ); - - const colorStyles = { - '--cursor-color': color, - '--cursor-color-light': hexToRGBA(color, 0.7), - '--cursor-color-dark': hexToRGBA(color, 0.8), - } as React.CSSProperties; - - return ( -
-
- {flip ? ( - <> - {cursorElement} - {textElement} - - ) : ( - <> - {textElement} - {cursorElement} - - )} -
-
- ); -} - - - -export const MyCursor = qwikify$(ReactMyCursor) \ No newline at end of file diff --git a/packages/ui/src/react/react-example.tsx b/packages/ui/src/react/react-example.tsx deleted file mode 100644 index 918dcc9a..00000000 --- a/packages/ui/src/react/react-example.tsx +++ /dev/null @@ -1,28 +0,0 @@ -/** @jsxImportSource react */ -//This is used for testing whether the Qwik React components are working -import { qwikify$ } from "@builder.io/qwik-react" -import { motion } from "framer-motion" - -export const ReactExample = () => { - return ( -
- -
- ) -} - -export const Example = qwikify$(ReactExample) \ No newline at end of file diff --git a/packages/ui/src/react/save.tsx b/packages/ui/src/react/save.tsx deleted file mode 100644 index eb9d848d..00000000 --- a/packages/ui/src/react/save.tsx +++ /dev/null @@ -1,119 +0,0 @@ -/** @jsxImportSource react */ -import { cn } from "@nestri/ui/design"; -import { qwikify$ } from "@builder.io/qwik-react"; -import React, { useEffect, useRef, useState } from "react"; -import { - motion, - useAnimationFrame, - useMotionValue, - useScroll, - useSpring, - useTransform, - useVelocity, -} from "framer-motion"; - -interface VelocityScrollProps { - text: string; - default_velocity?: number; - class?: string; -} - -interface ParallaxProps { - children: string; - baseVelocity: number; - class?: string; -} - -export const wrap = (min: number, max: number, v: number) => { - const rangeSize = max - min; - return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min; -}; - -export function ReactMarquee({ - class: className, - text, - default_velocity = 5, -}: VelocityScrollProps) { - function ParallaxText({ - children, - baseVelocity = 100, - class:className, - }: ParallaxProps) { - const baseX = useMotionValue(0); - const { scrollY } = useScroll(); - const scrollVelocity = useVelocity(scrollY); - const smoothVelocity = useSpring(scrollVelocity, { - damping: 50, - stiffness: 400, - }); - - const velocityFactor = useTransform(smoothVelocity, [0, 1000], [0, 5], { - clamp: false, - }); - - const [repetitions, setRepetitions] = useState(1); - const containerRef = useRef(null); - const textRef = useRef(null); - - useEffect(() => { - const calculateRepetitions = () => { - if (containerRef.current && textRef.current) { - const containerWidth = containerRef.current.offsetWidth; - const textWidth = textRef.current.offsetWidth; - const newRepetitions = Math.ceil(containerWidth / textWidth) + 2; - setRepetitions(newRepetitions); - } - }; - - calculateRepetitions(); - - window.addEventListener("resize", calculateRepetitions); - return () => window.removeEventListener("resize", calculateRepetitions); - }, [children]); - - const x = useTransform(baseX, (v) => `${wrap(-100 / repetitions, 0, v)}%`); - - const directionFactor = React.useRef(1); - useAnimationFrame((t, delta) => { - let moveBy = directionFactor.current * baseVelocity * (delta / 1000); - - if (velocityFactor.get() < 0) { - directionFactor.current = -1; - } else if (velocityFactor.get() > 0) { - directionFactor.current = 1; - } - - moveBy += directionFactor.current * moveBy * velocityFactor.get(); - - baseX.set(baseX.get() + moveBy); - }); - - return ( -
- - {Array.from({ length: repetitions }).map((_, i) => ( - - {children}{" "} - - ))} - -
- ); - } - - return ( -
- - {text} - - - {text} - -
- ); -} - -export const Marquee = qwikify$(ReactMarquee); \ No newline at end of file diff --git a/packages/ui/src/react/text.tsx b/packages/ui/src/react/text.tsx deleted file mode 100644 index aece6f7e..00000000 --- a/packages/ui/src/react/text.tsx +++ /dev/null @@ -1,70 +0,0 @@ -/** @jsxImportSource react */ - -import React from "react" -import { - text, - type TextProps as TextVariants, - type TextAlignProp, - type TextWeightProp, - cn -} from "@nestri/ui/design" -// import * as ReactBalancer from "react-wrap-balancer" -import { qwikify$ } from "@builder.io/qwik-react" - -type TextSize = TextVariants["size"] -type TitleSizeProp = TextSize | { - initial?: TextSize, - sm?: TextSize, - md?: TextSize, - lg?: TextSize, - xl?: TextSize, - xxl?: TextSize, -} - -export interface TextProps extends React.HTMLAttributes { - as?: "p" | "div" | "span" | "em" | "strong", - className?: string, - size?: TitleSizeProp; - align?: TextAlignProp; - weight?: TextWeightProp; - neutral?: boolean; -} - -export const ReactText: React.FC = ({ - size, - as = "p", - weight, - align, - neutral, - children, - className, - ...props -}) => { - - const TextElement = as - - if (as === "strong") { - weight = weight || "medium" - neutral = neutral || true - } else if (as === "em") { - neutral = neutral || true - } - - return ( - - {/* */} - {children} - {/* */} - - ) -} - -ReactText.displayName = "Text" - -export const Text = qwikify$(ReactText) \ No newline at end of file diff --git a/packages/ui/src/react/title-section.tsx b/packages/ui/src/react/title-section.tsx deleted file mode 100644 index 58397720..00000000 --- a/packages/ui/src/react/title-section.tsx +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable qwik/no-react-props */ -/** @jsxImportSource react */ -import { qwikify$ } from "@builder.io/qwik-react"; -import { motion } from "framer-motion" -import { ReactDisplay } from "./display" -// type Props = { -// children?: React.ReactElement[] -// } - -const transition = { - type: "spring", - stiffness: 100, - damping: 15, - restDelta: 0.001, - duration: 0.01, -} - -type Props = { - title: string - description?: string | string[] -} - -export function ReactTitleSection({ title, description }: Props) { - return ( - <> -
-
- -
- - - {title} - - - {description && ( - {Array.isArray(description) ? description.map((item, index) => { - return {item}
- }) : description} -
)} -
-
-
- - ) -} -export const TitleSection = qwikify$(ReactTitleSection) \ No newline at end of file diff --git a/packages/ui/src/react/title.tsx b/packages/ui/src/react/title.tsx deleted file mode 100644 index b7e766ab..00000000 --- a/packages/ui/src/react/title.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/** @jsxImportSource react */ - -import React from "react" -import { - title, - type TitleProps as TitleVariants, - type TextAlignProp, - type TextWeightProp, - cn -} from "@nestri/ui/design" -import { qwikify$ } from "@builder.io/qwik-react"; - - -type TitleSize = TitleVariants["size"] -type TitleSizeProp = TitleSize | { - initial?: TitleSize, - sm?: TitleSize, - md?: TitleSize, - lg?: TitleSize, - xl?: TitleSize, - xxl?: TitleSize, -} - -export interface TitleProps extends React.HTMLAttributes { - as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "div" | "span", - className?: string, - size?: TitleSizeProp; - align?: TextAlignProp; - weight?: TextWeightProp -} - -export const ReactTitle: React.FC = ({ - size, - as = "h1", - weight, - align, - children, - className, - ...props -}) => { - const TitleElement = as - return ( - - {children} - - ) -} - -ReactTitle.displayName = "Title" - -export const Title = qwikify$(ReactTitle) \ No newline at end of file diff --git a/packages/ui/src/react/utils.ts b/packages/ui/src/react/utils.ts deleted file mode 100644 index a8a273be..00000000 --- a/packages/ui/src/react/utils.ts +++ /dev/null @@ -1,15 +0,0 @@ -import React from "react" -import { twMerge } from "tailwind-merge" - -/** - * Clone React element. - * The function clones React element and adds Tailwind CSS classnames to the cloned element - * @param element the React element to clone - * @param classNames Tailwind CSS classnames - * @returns { React.ReactElement } - Cloned React element - */ -export function cloneElement(element: React.ReactElement, classNames: string) { - return React.cloneElement(element, { - className: twMerge(element.props.className, classNames) - }); - } \ No newline at end of file diff --git a/packages/ui/src/router-head.tsx b/packages/ui/src/router-head.tsx deleted file mode 100644 index d21828bb..00000000 --- a/packages/ui/src/router-head.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { component$ } from "@builder.io/qwik"; -import { useDocumentHead, useLocation } from "@builder.io/qwik-city"; - -/** - * The RouterHead component is placed inside of the document `` element. - */ -export const RouterHead = component$(() => { - const head = useDocumentHead(); - const loc = useLocation(); - const domain = loc.url.origin; - - return ( - <> - - {/* {head.title} */} - {loc.url.pathname === "/" - ? "Nestri – Your games. Your rules.": - loc.url.pathname.startsWith("/moq/") - ? - `MoQ – Nestri` - : `${loc.url.pathname.split("/")[1].charAt(0).toUpperCase() + loc.url.pathname.split("/")[1].slice(1)} – Nestri` - } - - - - - {/**For SEO optimisation purposes refrain from SVG favicons and use PNG instead */} - - - - - {/**@ts-ignore */} - - - - - - - - - {!loc.url.pathname.startsWith("/blog/") && ( - <> - - - - )} - { - head.meta.map((m) => ( - - )) - } - - { - head.links.map((l) => ( - - )) - } - - { - head.styles.map((s) => ( -