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 (
-
- )
-})
\ 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" ? (
-
-
-
- ) : size == "small" ? (
-
-
-
-
- ) : (
-
-
-
- )}
-
-
-
-
-
- )
-});
\ 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 (
-
-
-
- {new Date(game.release_date).getUTCFullYear()}
-
-
-
-
- {"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
-
-
-
-
-
-
- I don't own any 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.discriminator}`}
- {/* {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 ? (
-
-
- Install a game
-
- ) : (
-
- )} */}
-
-
-
- )
-})
\ 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" ? (
-
-
-
-
-
- {/*
*/}
-
-
-
{userSubscription.value == "Pro" ? "Online" : "Error"}
-
-
-
-
-
-
-
-
- ) : (
-
- )}
-
-
-
-
- Add your machine
-
- Soon
-
-
-
-
- >
- ) :
- 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 (
- <>
-
-
-
-
-
- {userProfile.value ? (
-
-
-
- {`${userProfile.value.username}'s Games`}
-
-
-
-
-
-
-
- {`${userProfile.value.username}'s Games`}
-
-
-
-
-
-
-
-
- isNewTeam.value = true}
- class={cn("leading-none w-full text-sm items-center text-[#6f6f6f] dark:text-[#a0a0a0] hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none relative", "opacity-50 pointer-events-none !cursor-not-allowed")}
- >
-
-
- New Team
-
-
- isNewMember.value = true}
- class={cn("leading-none w-full text-sm items-center text-[#6f6f6f] dark:text-[#a0a0a0] hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none relative", "opacity-50 pointer-events-none !cursor-not-allowed")}
- >
-
-
- Send an invite
-
-
- e.key === "Enter" && handlePointerDown()}
- onKeyUp$={(e) => e.key === "Enter" && handlePointerUp()}
- disabled={true}
- class={cn("leading-none relative overflow-hidden transition-all duration-200 text-sm group items-center text-red-500 [&>*]:w-full [&>qwik-react]:absolute [&>qwik-react]:h-full [&>qwik-react]:left-0 hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none select-none w-full", "opacity-50 pointer-events-none !cursor-not-allowed")}>
-
-
-
- Delete Team
- Hold to delete
-
-
-
-
- ) : (
)}
- {location.pathname == "/machine" &&
- (<>
-
- {userProfile.value ? (
-
- ) : (
)}
- >
- )
- }
-
-
-
- {userProfile.value ?
- (
-
- {userProfile.value.avatarUrl ? ( ) : ( )}
- {`${userProfile.value.username}#${userProfile.value.discriminator}`}
-
-
-
-
- window.location.href = "mailto:feedback@nestri.io"}
- class="leading-none text-sm items-center text-[#6f6f6f] dark:text-[#a0a0a0] hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none relative select-none "
- >
-
-
- Send Feedback
-
-
- {/* e.key === "Enter" && handlePointerDown()}
- onKeyUp$={(e) => e.key === "Enter" && handlePointerUp()}
- class="leading-none relative overflow-hidden transition-all duration-200 text-sm group items-center text-red-500 [&>*]:w-full [&>qwik-react]:absolute [&>qwik-react]:h-full [&>qwik-react]:left-0 hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none select-none w-full">
-
-
-
- Log out
- Hold to logout
-
- */}
- e.key === "Enter" && handlePointerDown()}
- onKeyUp$={(e) => e.key === "Enter" && handlePointerUp()}
- class={cn("leading-none relative overflow-hidden transition-all duration-200 text-sm group items-center text-red-500 [&>*]:w-full [&>qwik-react]:absolute [&>qwik-react]:h-full [&>qwik-react]:left-0 hover:text-[#171717] dark:hover:text-[#ededed] hover:bg-[rgba(0,0,0,.071)] dark:hover:bg-[hsla(0,0%,100%,.077)] flex px-2 gap-2 h-8 rounded-md cursor-pointer outline-none select-none w-full")}>
-
-
-
- Log out
- Hold to logout
-
-
-
- {/*
-
-
-
-
- Leave Team
- Hold to leave
-
-
- */}
-
- ) :
- (
)
- }
-
-
-
-
-
-
-
-
-
-
-
-
- >
- )
-})
\ 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 && (
-
- )}
-
- {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 && (
-
- )} */}
-
- {hasError.value && (
-
- Error loading image
-
- )}
-
- );
-});
\ 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 &&
{label}
- }
- {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 (
-
-
-
-
- Nestri
-
-
-
- {navLinks.map((linkItem, key) => (
-
-
- {linkItem.name}
-
-
- ))}
-
-
-
- )
-})
\ 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 (
- <>
-
- >
- );
-}
-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 (
- <>
-
- >
- )
-}
-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) => (
-
- ))
- }
-
- {
- head.scripts.map((s) => (
-
- ))
- }
- >
- );
-});
diff --git a/packages/ui/src/simple-footer.tsx b/packages/ui/src/simple-footer.tsx
deleted file mode 100644
index 24c4a5ff..00000000
--- a/packages/ui/src/simple-footer.tsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { component$ } from "@builder.io/qwik";
-import { cn } from "./design";
-import { Link } from "@builder.io/qwik-city";
-
-type Props = {
- class?: string;
-}
-
-export default component$(({ class: className }: Props) => {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- About Us
-
-
- Pricing
-
-
- Docs
-
-
-
-
-
- )
-})
\ No newline at end of file
diff --git a/packages/ui/src/svg.tsx b/packages/ui/src/svg.tsx
deleted file mode 100644
index 59132516..00000000
--- a/packages/ui/src/svg.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-/* eslint-disable no-unused-labels */
-/* eslint-disable @typescript-eslint/no-unused-expressions */
-import { type QwikIntrinsicElements } from "@builder.io/qwik"
-
-type IconProps = QwikIntrinsicElements["svg"]
-
-export const Icons = {
- specialOffer: (props: IconProps) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
\ No newline at end of file
diff --git a/packages/ui/src/team-counter.tsx b/packages/ui/src/team-counter.tsx
deleted file mode 100644
index deac05ae..00000000
--- a/packages/ui/src/team-counter.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { component$, useSignal } from "@builder.io/qwik"
-import { cn } from "./design"
-
-type Props = {
- class?: string
-}
-const minValue = 2;
-const maxValue = 6;
-const teamSizes = Array.from({ length: maxValue - minValue + 1 }, (_, i) => i + minValue);
-
-export const TeamCounter = component$(({ class: className }: Props) => {
- const teammates = useSignal(2)
- const shake = useSignal(false)
-
- return (
-
-
{
- if (teammates.value == minValue) {
- shake.value = true
- setTimeout(() => {
- shake.value = false
- }, 500);
- } else {
- teammates.value = Math.max(minValue, teammates.value - 1)
- }
- }}
- class={cn("size-[30px] rounded-full bg-gray-300 dark:bg-gray-700 flex items-center justify-center active:scale-90", teammates.value <= minValue && "opacity-30")}>
-
-
-
-
-
-
- {teamSizes.map((num) => (
- +{num}
- ))}
-
-
-
-
-
{
- if (teammates.value == maxValue) {
- shake.value = true
- setTimeout(() => {
- shake.value = false
- }, 500);
- } else {
- teammates.value = Math.min(maxValue, teammates.value + 1)
- }
- }}
- class={cn("size-[30px] rounded-full bg-gray-300 dark:bg-gray-700 flex items-center justify-center active:scale-90", teammates.value >= maxValue && "opacity-30")}>
-
-
-
- )
-})
\ No newline at end of file
diff --git a/packages/ui/src/tooltip.tsx b/packages/ui/src/tooltip.tsx
deleted file mode 100644
index 2a87a1ce..00000000
--- a/packages/ui/src/tooltip.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { component$, Slot } from "@builder.io/qwik"
-import { cn } from "./design";
-
-type Props = {
- position: "bottom" | "top" | "left" | "right",
- text: string;
-}
-
-const textPosition = {
- top: "bottom-[125%] left-1/2 -ml-[60px] after:absolute after:left-1/2 after:top-[100%] after:-ml-[5px] after:border-[5px] after:border-[#000_transparent_transparent_transparent]"
-}
-
-export const Tooltip = component$(({ position, text }: Props) => {
-
- return (
- <>
-
- {/**@ts-ignore */}
-
- {text}
-
- >
- )
-})
\ No newline at end of file
diff --git a/packages/ui/src/types/misc.d.ts b/packages/ui/src/types/misc.d.ts
deleted file mode 100644
index b4ac795b..00000000
--- a/packages/ui/src/types/misc.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*?inline' {
- const content: string;
- export default content;
-}
\ No newline at end of file
diff --git a/packages/ui/sst-env.d.ts b/packages/ui/sst-env.d.ts
deleted file mode 100644
index b6a7e906..00000000
--- a/packages/ui/sst-env.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/* This file is auto-generated by SST. Do not edit. */
-/* tslint:disable */
-/* eslint-disable */
-/* deno-fmt-ignore-file */
-
-///
-
-import "sst"
-export {}
\ No newline at end of file
diff --git a/packages/ui/tailwind.config.js b/packages/ui/tailwind.config.js
deleted file mode 100644
index a14638ee..00000000
--- a/packages/ui/tailwind.config.js
+++ /dev/null
@@ -1,195 +0,0 @@
-import colors from "tailwindcss/colors";
-import tailwindcssAnimate from "tailwindcss-animate"
-
-/** @type {import('tailwindcss').Config} */
-export default {
- content: [
- './{src,components,app}/**/*.{ts,tsx,html}',
- ],
- theme: {
- extend: {
- colors: {
- primary: {
- 50: "#FFEDE5",
- 100: "#FFDBCC",
- 200: "#FFB899",
- 300: "#FF9466",
- 400: "#FF7033",
- 500: "#FF4F01",
- 600: "#CC3D00",
- 700: "#992E00",
- 800: "#661F00",
- 900: "#330F00",
- 950: "#190800",
- DEFAULT: "#FF4F01"
- },
- secondary: colors.orange,
- accent: colors.amber,
- gray: {
- ...colors.neutral,
- 925: "#111111",
- },
- danger: colors.red,
- warning: colors.yellow,
- success: colors.green,
- info: colors.blue,
- },
- fontFamily: {
- body: [
- "Geist Sans",
- "ui-sans-serif",
- "system-ui",
- "-apple-system",
- "BlinkMacSystemFont",
- "Inter",
- "Segoe UI",
- "Roboto",
- "sans-serif",
- "Apple Color Emoji",
- "Segoe UI Emoji",
- "Segoe UI Symbol",
- "Noto Color Emoji",
- ],
- mono: [
- "Geist Mono",
- "ui-monospace",
- "SFMono-Regular",
- "Menlo",
- "Monaco",
- "Consolas",
- "Liberation Mono",
- "Courier New",
- "monospace"
- ],
- mona: [
- "Mona Sans Variable",
- "-apple-system",
- "blinkmacsystemfont",
- "segoe ui",
- "roboto",
- "oxygen",
- "ubuntu",
- "cantarell",
- "fira",
- "sans",
- "droid sans",
- "helvetica neue",
- "sans-serif",
- ],
- bricolage: [
- "Bricolage Grotesque Variable",
- "-apple-system",
- "blinkmacsystemfont",
- "segoe ui",
- "roboto",
- "oxygen",
- "ubuntu",
- "cantarell",
- "fira",
- "sans",
- "droid sans",
- "helvetica neue",
- "sans-serif",
- ],
- basement: [
- "Basement Grotesque",
- "Bricolage Grotesque Variable",
- "-apple-system",
- "blinkmacsystemfont",
- "segoe ui",
- "roboto",
- "oxygen",
- "ubuntu",
- "cantarell",
- "fira",
- "sans",
- "droid sans",
- "helvetica neue",
- "sans-serif",
- ]
- },
- boxShadow: {
- "shadow-floating-light": "0px 6px 12px 0px rgba(99,99,99,.06),0px 22px 22px 0px rgba(99,99,99,.05),0px 50px 30px 0px rgba(99,99,99,.03),0px 89px 36px 0px rgba(99,99,99,.01),0px 140px 39px 0px rgba(99,99,99,0)",
- "inner-shadow-dark-float": "0px 1px 0px 0px hsla(0,0%,100%,.03) inset,0px 0px 0px 1px hsla(0,0%,100%,.03) inset,0px 0px 0px 1px rgba(0,0,0,.1),0px 2px 2px 0px rgba(0,0,0,.1),0px 4px 4px 0px rgba(0,0,0,.1),0px 8px 8px 0px rgba(0,0,0,.1)",
- "fullscreen": "0 0 0 1px rgba(0,0,0,.08),0px 1px 1px rgba(0,0,0,.02),0px 8px 16px -4px rgba(0,0,0,.04),0px 24px 32px -8px rgba(0,0,0,.06)",
- "menu": "0 0 0 1px rgba(0,0,0,.08),0px 1px 1px rgba(0,0,0,.02),0px 4px 8px -4px rgba(0,0,0,.04),0px 16px 24px -8px rgba(0,0,0,.06)",
- },
- keyframes: {
- "fade-up": {
- "0%": {
- opacity: "0",
- transform: "translateY(10px)",
- },
- "80%": {
- opacity: "0.7",
- },
- "100%": {
- opacity: "1",
- transform: "translateY(0px)",
- },
- },
- "fade-down": {
- "0%": {
- opacity: "0",
- transform: "translateY(-10px)",
- },
- "80%": {
- opacity: "0.6",
- },
- "100%": {
- opacity: "1",
- transform: "translateY(0px)",
- },
- },
- shake: {
- "25%": {
- translate: "0.25ch 0"
- },
- "75%": {
- translate: "-0.25ch 0"
- }
- },
- slide: {
- "100%": {
- translate: "var(--destination-x) var(--destination-y);",
- },
- },
- "multicolor": {
- "0%": {
- transform: "translateX(0%)"
- },
- "100%": {
- transform: "translateX(-50%)"
- }
- },
- "zoom-out": {
- "0%": {
- transform: "scale(1.2)"
- },
- "100%": {
- transform: "scale(1)"
- }
- },
- "fade-in": {
- " 0% ": {
- opacity: 0
- },
- "100%": {
- opacity: 1
- }
- }
- },
- animation: {
- // Fade up and down
- "fade-up": "fade-up 0.5s",
- "fade-down": "fade-down 0.5s",
- "shake": "shake 0.075s 8",
- "multicolor": "multicolor 5s linear 0s infinite",
- "zoom-out": "zoom-out 5s ease-out",
- "fade-in": "fade-in .3s ease forwards",
- },
- },
- plugins: [tailwindcssAnimate]
- }
-}
-
diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json
deleted file mode 100644
index a69aca66..00000000
--- a/packages/ui/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "compilerOptions": {
- "allowJs": true,
- "target": "ES2017",
- "rootDir": "./",
- "module": "ES2022",
- "lib": ["es2022", "DOM", "WebWorker", "DOM.Iterable"],
- "jsx": "react-jsx",
- "jsxImportSource": "@builder.io/qwik",
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "moduleResolution": "Bundler",
- "esModuleInterop": true,
- "skipLibCheck": true,
- "incremental": true,
- "isolatedModules": true,
- "outDir": "tmp",
- "noEmit": true,
- },
- "files": ["./.eslintrc.cjs"],
- "include": ["src", "./*.d.ts", "./*.config.ts","./*.config.js"]
-}
\ No newline at end of file