From 0fac9a1bdd12d37ebc02d2fa59a80dc41f5aa2f4 Mon Sep 17 00:00:00 2001 From: core Date: Mon, 6 Jan 2025 13:12:35 -0500 Subject: [PATCH] restructuring --- .cargo/config.toml | 2 + .dockerignore | 5 - .git-hooks/pre-commit | 3 - .gitignore | 23 +- .woodpecker/.api.yaml | 68 - .woodpecker/.backplane.yaml | 68 - .woodpecker/.client.yaml | 36 - .woodpecker/.server.yaml | 71 - Cargo.lock | 865 ++++- Cargo.toml | 14 +- client/.gitignore | 21 - client/.npmrc | 1 - client/.prettierignore | 4 - client/.prettierrc | 8 - client/README.md | 38 - client/components.json | 14 - client/eslint.config.js | 33 - client/package.json | 46 - client/pnpm-lock.yaml | 3003 ----------------- client/postcss.config.js | 6 - client/src/app.d.ts | 13 - client/src/app.html | 12 - .../lib/components/ui/button/Button.svelte | 25 - .../lib/components/ui/button/button.svelte | 25 - client/src/lib/components/ui/button/index.ts | 50 - .../components/ui/card/card-content.svelte | 13 - .../ui/card/card-description.svelte | 13 - .../lib/components/ui/card/card-footer.svelte | 13 - .../lib/components/ui/card/card-header.svelte | 13 - .../lib/components/ui/card/card-title.svelte | 21 - client/src/lib/components/ui/card/card.svelte | 22 - client/src/lib/components/ui/card/index.ts | 24 - client/src/lib/index.ts | 1 - client/src/routes/(menu)/+page.svelte | 74 - client/src/routes/(menu)/login/+page.svelte | 25 - client/static/favicon.ico | Bin 1150 -> 0 bytes client/static/favicon.png | Bin 1571 -> 0 bytes client/svelte.config.js | 18 - client/tailwind.config.js | 64 - client/tsconfig.json | 19 - client/vite.config.ts | 6 - {starkingdoms-api => crates/api}/Cargo.toml | 2 +- {starkingdoms-api => crates/api}/Dockerfile | 0 {starkingdoms-api => crates/api}/build.rs | 0 {starkingdoms-api => crates/api}/diesel.toml | 0 .../api}/migrations/.keep | 0 .../down.sql | 0 .../up.sql | 0 .../down.sql | 0 .../up.sql | 0 {starkingdoms-api => crates/api}/src/auth.rs | 0 .../api}/src/config.rs | 0 {starkingdoms-api => crates/api}/src/error.rs | 0 {starkingdoms-api => crates/api}/src/main.rs | 0 .../api}/src/models.rs | 0 .../api}/src/response.rs | 0 .../api}/src/routes/mod.rs | 0 .../api}/src/routes/sign_save.rs | 0 .../api}/src/schema.rs | 0 .../api}/src/tokens.rs | 0 {starkingdoms-api => crates/backplane}/.env | 0 .../backplane}/Cargo.toml | 0 .../backplane}/Dockerfile | 0 .../backplane}/build.rs | 0 .../backplane}/diesel.toml | 0 .../backplane}/migrations/.keep | 0 .../down.sql | 0 .../up.sql | 0 .../down.sql | 0 .../up.sql | 0 .../backplane}/src/auth.rs | 0 .../backplane}/src/config.rs | 0 .../backplane}/src/error.rs | 0 .../backplane}/src/main.rs | 0 .../backplane}/src/models.rs | 0 .../backplane}/src/response.rs | 0 .../backplane}/src/routes/login.rs | 0 .../backplane}/src/routes/mod.rs | 0 .../backplane}/src/routes/signup.rs | 0 .../backplane}/src/schema.rs | 0 .../backplane}/src/tokens.rs | 0 .../common}/Cargo.toml | 0 .../common}/src/lib.rs | 0 {kabel => crates/kabel}/Cargo.toml | 0 {kabel => crates/kabel}/grammar.ebnf | 0 {kabel => crates/kabel}/opcodes.txt | 0 {kabel => crates/kabel}/src/ast.rs | 0 {kabel => crates/kabel}/src/codegen.rs | 0 {kabel => crates/kabel}/src/debug.rs | 0 {kabel => crates/kabel}/src/error.rs | 0 {kabel => crates/kabel}/src/extension.rs | 0 {kabel => crates/kabel}/src/lexer.rs | 0 {kabel => crates/kabel}/src/lib.rs | 0 {kabel => crates/kabel}/src/macros.rs | 0 {kabel => crates/kabel}/src/main.rs | 0 .../kabel}/src/name_resolution.rs | 0 {kabel => crates/kabel}/src/opcodes.rs | 0 {kabel => crates/kabel}/src/parser.rs | 0 {kabel => crates/kabel}/src/runtime_error.rs | 0 {kabel => crates/kabel}/src/test.rs | 0 {kabel => crates/kabel}/src/vm.rs | 0 .../kabel}/test/lexer/arithmetic.kab | 0 .../kabel}/test/lexer/arithmetic.out | 0 .../kabel}/test/lexer/declaration.kab | 0 .../kabel}/test/lexer/declaration.out | 0 .../kabel}/test/lexer/keywords.kab | 0 .../kabel}/test/lexer/keywords.out | 0 .../kabel}/test/runtime/arithmetic_run.kab | 0 .../kabel}/test/runtime/arithmetic_run.out | 0 .../kabel}/test/runtime/fibonacci.kab | 0 .../kabel}/test/runtime/fibonacci.out | 0 .../kabel}/test/runtime/fizzbuzz.kab | 0 .../kabel}/test/runtime/fizzbuzz.out | 0 .../kabel}/test/runtime/fn_absent_block.kab | 0 .../kabel}/test/runtime/fn_absent_block.out | 0 .../kabel}/test/runtime/if_statement.kab | 0 .../kabel}/test/runtime/if_statement.out | 0 .../kabel}/test/runtime/logic.kab | 0 .../kabel}/test/runtime/logic.out | 0 {kabel => crates/kabel}/test/runtime/max.kab | 0 {kabel => crates/kabel}/test/runtime/max.out | 0 .../kabel}/test/runtime/recursive_fib.kab | 0 .../kabel}/test/runtime/recursive_fib.out | 0 .../kabel}/test/runtime/variable.kab | 0 .../kabel}/test/runtime/variable.out | 0 .../kabel}/test/syntax/assignment.kab | 0 .../kabel}/test/syntax/assignment.out | 0 .../kabel}/test/syntax/function.kab | 0 .../kabel}/test/syntax/function.out | 0 .../kabel}/test/syntax/if_else.kab | 0 .../kabel}/test/syntax/if_else.out | 0 .../kabel}/test/syntax/no_semicolon.kab | 0 .../kabel}/test/syntax/no_semicolon.out | 0 {kabel => crates/kabel}/tmp.kab | 0 .../savefile-decoder}/Cargo.toml | 4 +- .../savefile-decoder}/src/main.rs | 0 {server => crates/server}/Cargo.lock | 0 {server => crates/server}/Cargo.toml | 2 +- {server => crates/server}/Dockerfile | 0 {server => crates/server}/config.toml | 0 {server => crates/server}/parts.toml | 0 {server => crates/server}/planets.toml | 0 {server => crates/server}/src/config.rs | 0 .../server}/src/crafting/components.rs | 0 {server => crates/server}/src/crafting/mod.rs | 0 {server => crates/server}/src/macros.rs | 0 {server => crates/server}/src/main.rs | 0 {server => crates/server}/src/mathutil.rs | 0 .../server}/src/module/component.rs | 0 {server => crates/server}/src/module/mod.rs | 0 {server => crates/server}/src/module/save.rs | 0 .../server}/src/module/thruster.rs | 0 {server => crates/server}/src/packet.rs | 0 {server => crates/server}/src/planet.rs | 0 .../server}/src/player/client_login.rs | 0 .../server}/src/player/component.rs | 0 {server => crates/server}/src/player/mod.rs | 0 .../server}/src/player/packet.rs | 0 .../server}/src/player/player_mouse_input.rs | 0 .../server}/src/player/request_save.rs | 0 .../server}/src/player/send_message.rs | 0 {server => crates/server}/src/ws.rs | 0 crates/xtask/Cargo.toml | 11 + crates/xtask/src/main.rs | 170 + docker/Dockerfile.build_env | 12 - postgres.docker-compose.yml | 15 - starkingdoms-backplane/.env | 1 - starkingdoms-client-js/.gitignore | 24 - starkingdoms-client-js/.prettierignore | 3 - starkingdoms-client-js/.prettierrc | 6 - starkingdoms-client-js/Dockerfile | 3 - starkingdoms-client-js/index.html | 16 - starkingdoms-client-js/login/index.html | 20 - starkingdoms-client-js/package.json | 33 - starkingdoms-client-js/play/index.html | 20 - starkingdoms-client-js/public/favicon.ico | Bin 1150 -> 0 bytes starkingdoms-client-js/shipeditor/index.html | 20 - starkingdoms-client-js/signup/index.html | 20 - .../src/assets/autoplr_cfg.svg | 252 -- .../src/assets/autoplr_error.svg | 252 -- .../src/assets/autoplr_on.svg | 246 -- .../src/assets/cargo_off.svg | 351 -- .../src/assets/cargo_on.svg | 355 -- starkingdoms-client-js/src/assets/earth.svg | 195 -- .../src/assets/earth_icon.svg | 200 -- .../src/assets/ecothruster_on.svg | 268 -- .../src/assets/editor_direction.svg | 470 --- starkingdoms-client-js/src/assets/hearty.svg | 278 -- .../src/assets/hearty_ferris.svg | 311 -- .../src/assets/hearty_party.svg | 350 -- starkingdoms-client-js/src/assets/hub_off.svg | 368 -- starkingdoms-client-js/src/assets/hub_on.svg | 396 --- .../src/assets/landingleg.svg | 342 -- .../src/assets/landingthruster_off.svg | 286 -- .../src/assets/landingthruster_on.svg | 314 -- starkingdoms-client-js/src/assets/mars.svg | 116 - .../src/assets/mars_icon.svg | 132 - starkingdoms-client-js/src/assets/missing.svg | 74 - starkingdoms-client-js/src/assets/moon.svg | 144 - .../src/assets/moon_icon.svg | 116 - .../src/assets/powerhub_off.svg | 540 --- .../src/assets/powerhub_on.svg | 587 ---- .../src/assets/starfield.svg | 395 --- .../src/assets/starfield_dim.svg | 516 --- .../src/assets/starfield_transp.svg | 389 --- starkingdoms-client-js/src/assets/sun.svg | 164 - .../src/assets/sun_rings.svg | 264 -- .../src/assets/superthruster_off.svg | 240 -- .../src/assets/superthruster_on.svg | 268 -- .../src/assets/thruster_off.svg | 240 -- .../src/assets/thruster_on.svg | 268 -- .../src/assets/trackindicator.svg | 62 - .../src/components/Chatbox.svelte | 100 - .../src/components/ui/Button.svelte | 68 - .../src/components/ui/Checkbox.svelte | 83 - .../src/components/ui/Column.svelte | 22 - .../src/components/ui/ColumnTable.svelte | 29 - .../src/components/ui/HorizontalGap.svelte | 18 - .../src/components/ui/PasswordInput.svelte | 40 - .../src/components/ui/Popup.svelte | 216 -- .../src/components/ui/TextInput.svelte | 40 - .../src/components/ui/VerticalRule.svelte | 25 - starkingdoms-client-js/src/config.json | 21 - starkingdoms-client-js/src/config.ts | 53 - starkingdoms-client-js/src/css/chat.scss | 57 - starkingdoms-client-js/src/css/font.scss | 43 - starkingdoms-client-js/src/css/footer.scss | 24 - starkingdoms-client-js/src/css/form.scss | 70 - starkingdoms-client-js/src/css/game.scss | 11 - starkingdoms-client-js/src/css/globals.scss | 19 - starkingdoms-client-js/src/css/grid.scss | 18 - starkingdoms-client-js/src/css/hud.scss | 25 - starkingdoms-client-js/src/css/json.scss | 21 - starkingdoms-client-js/src/css/log.scss | 55 - starkingdoms-client-js/src/css/style.scss | 10 - .../src/css/themes/catppuccin-mocha.scss | 63 - starkingdoms-client-js/src/css/utils.scss | 4 - starkingdoms-client-js/src/env.d.ts | 2 - starkingdoms-client-js/src/globals.ts | 73 - starkingdoms-client-js/src/hub.ts | 373 -- .../src/icons/ChevronDown.svelte | 17 - .../src/icons/ChevronUp.svelte | 17 - .../src/icons/HeartIcon.svelte | 13 - .../src/icons/MovableIcon.svelte | 48 - .../src/icons/WarningIcon.svelte | 15 - starkingdoms-client-js/src/jwt.ts | 34 - starkingdoms-client-js/src/packet_ui.ts | 200 -- .../src/page_loaders/home.ts | 10 - .../src/page_loaders/login.ts | 10 - .../src/page_loaders/play.ts | 10 - .../src/page_loaders/shipeditor.ts | 10 - .../src/page_loaders/signup.ts | 10 - .../src/page_loaders/uikit.ts | 10 - starkingdoms-client-js/src/pages/Home.svelte | 153 - starkingdoms-client-js/src/pages/Login.svelte | 112 - starkingdoms-client-js/src/pages/Play.svelte | 220 -- .../src/pages/ShipEditor.svelte | 637 ---- .../src/pages/Signup.svelte | 114 - starkingdoms-client-js/src/pages/UiKit.svelte | 0 starkingdoms-client-js/src/planet_colors.ts | 9 - starkingdoms-client-js/src/protocol.ts | 190 -- starkingdoms-client-js/src/rendering.ts | 271 -- starkingdoms-client-js/src/save.ts | 23 - starkingdoms-client-js/src/textures.ts | 69 - starkingdoms-client-js/src/vite-env.d.ts | 2 - starkingdoms-client-js/svelte.config.js | 7 - starkingdoms-client-js/tsconfig.json | 26 - starkingdoms-client-js/uikit/index.html | 20 - starkingdoms-client-js/vite.config.ts | 39 - ....timestamp-1722468930578-9a55b81119f46.mjs | 44 - starkingdoms-client-js/yarn.lock | 1423 -------- starkingdoms-client/Cargo.toml | 35 - starkingdoms-client/index.html | 39 - starkingdoms-client/src/ecs.rs | 87 - starkingdoms-client/src/input.rs | 7 - starkingdoms-client/src/lib.rs | 182 - starkingdoms-client/src/main.rs | 5 - starkingdoms-client/src/native/mod.rs | 11 - starkingdoms-client/src/rendering/mipmap.rs | 134 - starkingdoms-client/src/rendering/mod.rs | 230 -- starkingdoms-client/src/rendering/renderer.rs | 389 --- starkingdoms-client/src/rendering/texture.rs | 77 - starkingdoms-client/src/rendering/ui.rs | 5 - starkingdoms-client/src/shaders/sprite.wgsl | 52 - .../src/shaders/text_quad_mips.wgsl | 26 - starkingdoms-client/src/textures/f.png | Bin 8848 -> 0 bytes .../src/textures/happy-tree.png | Bin 25451 -> 0 bytes starkingdoms-client/src/textures/uv.png | Bin 306519 -> 0 bytes starkingdoms-client/src/wasm/mod.rs | 33 - 289 files changed, 1051 insertions(+), 20518 deletions(-) create mode 100644 .cargo/config.toml delete mode 100644 .dockerignore delete mode 100755 .git-hooks/pre-commit delete mode 100644 .woodpecker/.api.yaml delete mode 100644 .woodpecker/.backplane.yaml delete mode 100644 .woodpecker/.client.yaml delete mode 100644 .woodpecker/.server.yaml delete mode 100644 client/.gitignore delete mode 100644 client/.npmrc delete mode 100644 client/.prettierignore delete mode 100644 client/.prettierrc delete mode 100644 client/README.md delete mode 100644 client/components.json delete mode 100644 client/eslint.config.js delete mode 100644 client/package.json delete mode 100644 client/pnpm-lock.yaml delete mode 100644 client/postcss.config.js delete mode 100644 client/src/app.d.ts delete mode 100644 client/src/app.html delete mode 100644 client/src/lib/components/ui/button/Button.svelte delete mode 100644 client/src/lib/components/ui/button/button.svelte delete mode 100644 client/src/lib/components/ui/button/index.ts delete mode 100644 client/src/lib/components/ui/card/card-content.svelte delete mode 100644 client/src/lib/components/ui/card/card-description.svelte delete mode 100644 client/src/lib/components/ui/card/card-footer.svelte delete mode 100644 client/src/lib/components/ui/card/card-header.svelte delete mode 100644 client/src/lib/components/ui/card/card-title.svelte delete mode 100644 client/src/lib/components/ui/card/card.svelte delete mode 100644 client/src/lib/components/ui/card/index.ts delete mode 100644 client/src/lib/index.ts delete mode 100644 client/src/routes/(menu)/+page.svelte delete mode 100644 client/src/routes/(menu)/login/+page.svelte delete mode 100644 client/static/favicon.ico delete mode 100644 client/static/favicon.png delete mode 100644 client/svelte.config.js delete mode 100644 client/tailwind.config.js delete mode 100644 client/tsconfig.json delete mode 100644 client/vite.config.ts rename {starkingdoms-api => crates/api}/Cargo.toml (91%) rename {starkingdoms-api => crates/api}/Dockerfile (100%) rename {starkingdoms-api => crates/api}/build.rs (100%) rename {starkingdoms-api => crates/api}/diesel.toml (100%) rename {starkingdoms-api => crates/api}/migrations/.keep (100%) rename {starkingdoms-api => crates/api}/migrations/00000000000000_diesel_initial_setup/down.sql (100%) rename {starkingdoms-api => crates/api}/migrations/00000000000000_diesel_initial_setup/up.sql (100%) rename {starkingdoms-api => crates/api}/migrations/2024-04-08-152705_create_table_saves/down.sql (100%) rename {starkingdoms-api => crates/api}/migrations/2024-04-08-152705_create_table_saves/up.sql (100%) rename {starkingdoms-api => crates/api}/src/auth.rs (100%) rename {starkingdoms-api => crates/api}/src/config.rs (100%) rename {starkingdoms-api => crates/api}/src/error.rs (100%) rename {starkingdoms-api => crates/api}/src/main.rs (100%) rename {starkingdoms-api => crates/api}/src/models.rs (100%) rename {starkingdoms-api => crates/api}/src/response.rs (100%) rename {starkingdoms-api => crates/api}/src/routes/mod.rs (100%) rename {starkingdoms-api => crates/api}/src/routes/sign_save.rs (100%) rename {starkingdoms-api => crates/api}/src/schema.rs (100%) rename {starkingdoms-api => crates/api}/src/tokens.rs (100%) rename {starkingdoms-api => crates/backplane}/.env (100%) rename {starkingdoms-backplane => crates/backplane}/Cargo.toml (100%) rename {starkingdoms-backplane => crates/backplane}/Dockerfile (100%) rename {starkingdoms-backplane => crates/backplane}/build.rs (100%) rename {starkingdoms-backplane => crates/backplane}/diesel.toml (100%) rename {starkingdoms-backplane => crates/backplane}/migrations/.keep (100%) rename {starkingdoms-backplane => crates/backplane}/migrations/00000000000000_diesel_initial_setup/down.sql (100%) rename {starkingdoms-backplane => crates/backplane}/migrations/00000000000000_diesel_initial_setup/up.sql (100%) rename {starkingdoms-backplane => crates/backplane}/migrations/2023-11-30-013338_create_table_users/down.sql (100%) rename {starkingdoms-backplane => crates/backplane}/migrations/2023-11-30-013338_create_table_users/up.sql (100%) rename {starkingdoms-backplane => crates/backplane}/src/auth.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/config.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/error.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/main.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/models.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/response.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/routes/login.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/routes/mod.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/routes/signup.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/schema.rs (100%) rename {starkingdoms-backplane => crates/backplane}/src/tokens.rs (100%) rename {starkingdoms-common => crates/common}/Cargo.toml (100%) rename {starkingdoms-common => crates/common}/src/lib.rs (100%) rename {kabel => crates/kabel}/Cargo.toml (100%) rename {kabel => crates/kabel}/grammar.ebnf (100%) rename {kabel => crates/kabel}/opcodes.txt (100%) rename {kabel => crates/kabel}/src/ast.rs (100%) rename {kabel => crates/kabel}/src/codegen.rs (100%) rename {kabel => crates/kabel}/src/debug.rs (100%) rename {kabel => crates/kabel}/src/error.rs (100%) rename {kabel => crates/kabel}/src/extension.rs (100%) rename {kabel => crates/kabel}/src/lexer.rs (100%) rename {kabel => crates/kabel}/src/lib.rs (100%) rename {kabel => crates/kabel}/src/macros.rs (100%) rename {kabel => crates/kabel}/src/main.rs (100%) rename {kabel => crates/kabel}/src/name_resolution.rs (100%) rename {kabel => crates/kabel}/src/opcodes.rs (100%) rename {kabel => crates/kabel}/src/parser.rs (100%) rename {kabel => crates/kabel}/src/runtime_error.rs (100%) rename {kabel => crates/kabel}/src/test.rs (100%) rename {kabel => crates/kabel}/src/vm.rs (100%) rename {kabel => crates/kabel}/test/lexer/arithmetic.kab (100%) rename {kabel => crates/kabel}/test/lexer/arithmetic.out (100%) rename {kabel => crates/kabel}/test/lexer/declaration.kab (100%) rename {kabel => crates/kabel}/test/lexer/declaration.out (100%) rename {kabel => crates/kabel}/test/lexer/keywords.kab (100%) rename {kabel => crates/kabel}/test/lexer/keywords.out (100%) rename {kabel => crates/kabel}/test/runtime/arithmetic_run.kab (100%) rename {kabel => crates/kabel}/test/runtime/arithmetic_run.out (100%) rename {kabel => crates/kabel}/test/runtime/fibonacci.kab (100%) rename {kabel => crates/kabel}/test/runtime/fibonacci.out (100%) rename {kabel => crates/kabel}/test/runtime/fizzbuzz.kab (100%) rename {kabel => crates/kabel}/test/runtime/fizzbuzz.out (100%) rename {kabel => crates/kabel}/test/runtime/fn_absent_block.kab (100%) rename {kabel => crates/kabel}/test/runtime/fn_absent_block.out (100%) rename {kabel => crates/kabel}/test/runtime/if_statement.kab (100%) rename {kabel => crates/kabel}/test/runtime/if_statement.out (100%) rename {kabel => crates/kabel}/test/runtime/logic.kab (100%) rename {kabel => crates/kabel}/test/runtime/logic.out (100%) rename {kabel => crates/kabel}/test/runtime/max.kab (100%) rename {kabel => crates/kabel}/test/runtime/max.out (100%) rename {kabel => crates/kabel}/test/runtime/recursive_fib.kab (100%) rename {kabel => crates/kabel}/test/runtime/recursive_fib.out (100%) rename {kabel => crates/kabel}/test/runtime/variable.kab (100%) rename {kabel => crates/kabel}/test/runtime/variable.out (100%) rename {kabel => crates/kabel}/test/syntax/assignment.kab (100%) rename {kabel => crates/kabel}/test/syntax/assignment.out (100%) rename {kabel => crates/kabel}/test/syntax/function.kab (100%) rename {kabel => crates/kabel}/test/syntax/function.out (100%) rename {kabel => crates/kabel}/test/syntax/if_else.kab (100%) rename {kabel => crates/kabel}/test/syntax/if_else.out (100%) rename {kabel => crates/kabel}/test/syntax/no_semicolon.kab (100%) rename {kabel => crates/kabel}/test/syntax/no_semicolon.out (100%) rename {kabel => crates/kabel}/tmp.kab (100%) rename {savefile_decoder => crates/savefile-decoder}/Cargo.toml (61%) rename {savefile_decoder => crates/savefile-decoder}/src/main.rs (100%) rename {server => crates/server}/Cargo.lock (100%) rename {server => crates/server}/Cargo.toml (88%) rename {server => crates/server}/Dockerfile (100%) rename {server => crates/server}/config.toml (100%) rename {server => crates/server}/parts.toml (100%) rename {server => crates/server}/planets.toml (100%) rename {server => crates/server}/src/config.rs (100%) rename {server => crates/server}/src/crafting/components.rs (100%) rename {server => crates/server}/src/crafting/mod.rs (100%) rename {server => crates/server}/src/macros.rs (100%) rename {server => crates/server}/src/main.rs (100%) rename {server => crates/server}/src/mathutil.rs (100%) rename {server => crates/server}/src/module/component.rs (100%) rename {server => crates/server}/src/module/mod.rs (100%) rename {server => crates/server}/src/module/save.rs (100%) rename {server => crates/server}/src/module/thruster.rs (100%) rename {server => crates/server}/src/packet.rs (100%) rename {server => crates/server}/src/planet.rs (100%) rename {server => crates/server}/src/player/client_login.rs (100%) rename {server => crates/server}/src/player/component.rs (100%) rename {server => crates/server}/src/player/mod.rs (100%) rename {server => crates/server}/src/player/packet.rs (100%) rename {server => crates/server}/src/player/player_mouse_input.rs (100%) rename {server => crates/server}/src/player/request_save.rs (100%) rename {server => crates/server}/src/player/send_message.rs (100%) rename {server => crates/server}/src/ws.rs (100%) create mode 100644 crates/xtask/Cargo.toml create mode 100644 crates/xtask/src/main.rs delete mode 100644 docker/Dockerfile.build_env delete mode 100644 postgres.docker-compose.yml delete mode 100644 starkingdoms-backplane/.env delete mode 100644 starkingdoms-client-js/.gitignore delete mode 100644 starkingdoms-client-js/.prettierignore delete mode 100644 starkingdoms-client-js/.prettierrc delete mode 100644 starkingdoms-client-js/Dockerfile delete mode 100644 starkingdoms-client-js/index.html delete mode 100644 starkingdoms-client-js/login/index.html delete mode 100644 starkingdoms-client-js/package.json delete mode 100644 starkingdoms-client-js/play/index.html delete mode 100644 starkingdoms-client-js/public/favicon.ico delete mode 100644 starkingdoms-client-js/shipeditor/index.html delete mode 100644 starkingdoms-client-js/signup/index.html delete mode 100644 starkingdoms-client-js/src/assets/autoplr_cfg.svg delete mode 100644 starkingdoms-client-js/src/assets/autoplr_error.svg delete mode 100644 starkingdoms-client-js/src/assets/autoplr_on.svg delete mode 100644 starkingdoms-client-js/src/assets/cargo_off.svg delete mode 100644 starkingdoms-client-js/src/assets/cargo_on.svg delete mode 100644 starkingdoms-client-js/src/assets/earth.svg delete mode 100644 starkingdoms-client-js/src/assets/earth_icon.svg delete mode 100644 starkingdoms-client-js/src/assets/ecothruster_on.svg delete mode 100644 starkingdoms-client-js/src/assets/editor_direction.svg delete mode 100644 starkingdoms-client-js/src/assets/hearty.svg delete mode 100644 starkingdoms-client-js/src/assets/hearty_ferris.svg delete mode 100644 starkingdoms-client-js/src/assets/hearty_party.svg delete mode 100644 starkingdoms-client-js/src/assets/hub_off.svg delete mode 100644 starkingdoms-client-js/src/assets/hub_on.svg delete mode 100644 starkingdoms-client-js/src/assets/landingleg.svg delete mode 100644 starkingdoms-client-js/src/assets/landingthruster_off.svg delete mode 100644 starkingdoms-client-js/src/assets/landingthruster_on.svg delete mode 100644 starkingdoms-client-js/src/assets/mars.svg delete mode 100644 starkingdoms-client-js/src/assets/mars_icon.svg delete mode 100644 starkingdoms-client-js/src/assets/missing.svg delete mode 100644 starkingdoms-client-js/src/assets/moon.svg delete mode 100644 starkingdoms-client-js/src/assets/moon_icon.svg delete mode 100644 starkingdoms-client-js/src/assets/powerhub_off.svg delete mode 100644 starkingdoms-client-js/src/assets/powerhub_on.svg delete mode 100644 starkingdoms-client-js/src/assets/starfield.svg delete mode 100644 starkingdoms-client-js/src/assets/starfield_dim.svg delete mode 100644 starkingdoms-client-js/src/assets/starfield_transp.svg delete mode 100644 starkingdoms-client-js/src/assets/sun.svg delete mode 100644 starkingdoms-client-js/src/assets/sun_rings.svg delete mode 100644 starkingdoms-client-js/src/assets/superthruster_off.svg delete mode 100644 starkingdoms-client-js/src/assets/superthruster_on.svg delete mode 100644 starkingdoms-client-js/src/assets/thruster_off.svg delete mode 100644 starkingdoms-client-js/src/assets/thruster_on.svg delete mode 100644 starkingdoms-client-js/src/assets/trackindicator.svg delete mode 100644 starkingdoms-client-js/src/components/Chatbox.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/Button.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/Checkbox.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/Column.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/ColumnTable.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/HorizontalGap.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/PasswordInput.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/Popup.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/TextInput.svelte delete mode 100644 starkingdoms-client-js/src/components/ui/VerticalRule.svelte delete mode 100644 starkingdoms-client-js/src/config.json delete mode 100644 starkingdoms-client-js/src/config.ts delete mode 100644 starkingdoms-client-js/src/css/chat.scss delete mode 100644 starkingdoms-client-js/src/css/font.scss delete mode 100644 starkingdoms-client-js/src/css/footer.scss delete mode 100644 starkingdoms-client-js/src/css/form.scss delete mode 100644 starkingdoms-client-js/src/css/game.scss delete mode 100644 starkingdoms-client-js/src/css/globals.scss delete mode 100644 starkingdoms-client-js/src/css/grid.scss delete mode 100644 starkingdoms-client-js/src/css/hud.scss delete mode 100644 starkingdoms-client-js/src/css/json.scss delete mode 100644 starkingdoms-client-js/src/css/log.scss delete mode 100644 starkingdoms-client-js/src/css/style.scss delete mode 100644 starkingdoms-client-js/src/css/themes/catppuccin-mocha.scss delete mode 100644 starkingdoms-client-js/src/css/utils.scss delete mode 100644 starkingdoms-client-js/src/env.d.ts delete mode 100644 starkingdoms-client-js/src/globals.ts delete mode 100644 starkingdoms-client-js/src/hub.ts delete mode 100644 starkingdoms-client-js/src/icons/ChevronDown.svelte delete mode 100644 starkingdoms-client-js/src/icons/ChevronUp.svelte delete mode 100644 starkingdoms-client-js/src/icons/HeartIcon.svelte delete mode 100644 starkingdoms-client-js/src/icons/MovableIcon.svelte delete mode 100644 starkingdoms-client-js/src/icons/WarningIcon.svelte delete mode 100644 starkingdoms-client-js/src/jwt.ts delete mode 100644 starkingdoms-client-js/src/packet_ui.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/home.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/login.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/play.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/shipeditor.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/signup.ts delete mode 100644 starkingdoms-client-js/src/page_loaders/uikit.ts delete mode 100644 starkingdoms-client-js/src/pages/Home.svelte delete mode 100644 starkingdoms-client-js/src/pages/Login.svelte delete mode 100644 starkingdoms-client-js/src/pages/Play.svelte delete mode 100644 starkingdoms-client-js/src/pages/ShipEditor.svelte delete mode 100644 starkingdoms-client-js/src/pages/Signup.svelte delete mode 100644 starkingdoms-client-js/src/pages/UiKit.svelte delete mode 100644 starkingdoms-client-js/src/planet_colors.ts delete mode 100644 starkingdoms-client-js/src/protocol.ts delete mode 100644 starkingdoms-client-js/src/rendering.ts delete mode 100644 starkingdoms-client-js/src/save.ts delete mode 100644 starkingdoms-client-js/src/textures.ts delete mode 100644 starkingdoms-client-js/src/vite-env.d.ts delete mode 100644 starkingdoms-client-js/svelte.config.js delete mode 100644 starkingdoms-client-js/tsconfig.json delete mode 100644 starkingdoms-client-js/uikit/index.html delete mode 100644 starkingdoms-client-js/vite.config.ts delete mode 100644 starkingdoms-client-js/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs delete mode 100644 starkingdoms-client-js/yarn.lock delete mode 100644 starkingdoms-client/Cargo.toml delete mode 100644 starkingdoms-client/index.html delete mode 100644 starkingdoms-client/src/ecs.rs delete mode 100644 starkingdoms-client/src/input.rs delete mode 100644 starkingdoms-client/src/lib.rs delete mode 100644 starkingdoms-client/src/main.rs delete mode 100644 starkingdoms-client/src/native/mod.rs delete mode 100644 starkingdoms-client/src/rendering/mipmap.rs delete mode 100644 starkingdoms-client/src/rendering/mod.rs delete mode 100644 starkingdoms-client/src/rendering/renderer.rs delete mode 100644 starkingdoms-client/src/rendering/texture.rs delete mode 100644 starkingdoms-client/src/rendering/ui.rs delete mode 100644 starkingdoms-client/src/shaders/sprite.wgsl delete mode 100644 starkingdoms-client/src/shaders/text_quad_mips.wgsl delete mode 100644 starkingdoms-client/src/textures/f.png delete mode 100644 starkingdoms-client/src/textures/happy-tree.png delete mode 100644 starkingdoms-client/src/textures/uv.png delete mode 100644 starkingdoms-client/src/wasm/mod.rs diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000000000000000000000000000000000000..f0ccbc9a88463dbeaac519bc24aa71c4bace10d5 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[alias] +xtask = "run --package xtask --" \ No newline at end of file diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 589451e64895e0a125809df72fc972888b15ed2c..0000000000000000000000000000000000000000 --- a/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -target/*/.fingerprint -target/*/build -target/*/deps -target/*/examples -target/*/incremental \ No newline at end of file diff --git a/.git-hooks/pre-commit b/.git-hooks/pre-commit deleted file mode 100755 index 82426446359500ca1f7a9bebbf0a57c3adee49e5..0000000000000000000000000000000000000000 --- a/.git-hooks/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -cargo fmt -cd starkingdoms-client && yarn prettier . --write diff --git a/.gitignore b/.gitignore index 243a5460fbe5f21274829e2b803d8d9520a3325b..070845ad208d6358d3c75efad4a00bd9347b9815 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,10 @@ target -client/pkg -web/dist +crates/client/pkg .idea -assets/svg/*.png -build.ninja -.ninja_log -api/config.toml -api/.env -assets/dist -assets/final -starkingdoms-client/node_modules -starkingdoms-client/dist -client/node_modules -starkingdoms-backplane/config.toml -starkingdoms-api/config.toml -kabel/tmp.kab + +crates/api/config.toml +crates/api/.env + +crates/backplane/config.toml + +crates/kabel/tmp.kab diff --git a/.woodpecker/.api.yaml b/.woodpecker/.api.yaml deleted file mode 100644 index 70d46644ace5689d14c93089ee874f6664b20763..0000000000000000000000000000000000000000 --- a/.woodpecker/.api.yaml +++ /dev/null @@ -1,68 +0,0 @@ -clone: - git: - image: woodpeckerci/plugin-git - settings: - partial: false - tags: true - -steps: - - name: api_fmt - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-api - - rustfmt **/*.rs --check --edition 2021 --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: api_clippy - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-api - - cargo clippy --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: api_build - depends_on: - - api_fmt - - api_clippy - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-api - - cargo build --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: build_image - depends_on: - - api_build - image: docker - volumes: - - /var/run/docker.sock:/var/run/docker.sock - privileged: true - commands: - - docker login registry.gitlab.com -u c0repwn3r -p "$GLPAT" - - docker buildx build . -f starkingdoms-api/Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/api:$(git describe --always --tags) - - docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/api:$(git describe --always --tags) - secrets: [ glpat ] \ No newline at end of file diff --git a/.woodpecker/.backplane.yaml b/.woodpecker/.backplane.yaml deleted file mode 100644 index 96481442c45bb2b2df1bb9ff73e88765bac75495..0000000000000000000000000000000000000000 --- a/.woodpecker/.backplane.yaml +++ /dev/null @@ -1,68 +0,0 @@ -clone: - git: - image: woodpeckerci/plugin-git - settings: - partial: false - tags: true - -steps: - - name: backplane_fmt - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-backplane - - rustfmt **/*.rs --check --edition 2021 --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: backplane_clippy - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-backplane - - cargo clippy --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: backplane_build - depends_on: - - backplane_fmt - - backplane_clippy - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd starkingdoms-backplane - - cargo build --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: build_image - depends_on: - - backplane_build - image: docker - volumes: - - /var/run/docker.sock:/var/run/docker.sock - privileged: true - commands: - - docker login registry.gitlab.com -u c0repwn3r -p "$GLPAT" - - docker buildx build . -f starkingdoms-backplane/Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/backplane:$(git describe --always --tags) - - docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/backplane:$(git describe --always --tags) - secrets: [ glpat ] \ No newline at end of file diff --git a/.woodpecker/.client.yaml b/.woodpecker/.client.yaml deleted file mode 100644 index 6c66d03ce014df0f460c86f8064adbfd8d2b9b56..0000000000000000000000000000000000000000 --- a/.woodpecker/.client.yaml +++ /dev/null @@ -1,36 +0,0 @@ -clone: - git: - image: woodpeckerci/plugin-git - settings: - partial: false - tags: true - -steps: - - name: client_fmt - image: node - commands: - - cd starkingdoms-client - - yarn - - yarn prettier . --check - - - name: client_build - depends_on: - - client_fmt - image: node - commands: - - cd starkingdoms-client - - yarn - - yarn build - - - name: build_image - depends_on: - - client_build - image: docker - volumes: - - /var/run/docker.sock:/var/run/docker.sock - privileged: true - commands: - - docker login registry.gitlab.com -u c0repwn3r -p "$GLPAT" - - docker buildx build . -f starkingdoms-client/Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/client:$(git describe --always --tags) - - docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/client:$(git describe --always --tags) - secrets: [ glpat ] \ No newline at end of file diff --git a/.woodpecker/.server.yaml b/.woodpecker/.server.yaml deleted file mode 100644 index 4cf74803bfc5a36f7d39bd99d591ee2a42ce2bfc..0000000000000000000000000000000000000000 --- a/.woodpecker/.server.yaml +++ /dev/null @@ -1,71 +0,0 @@ -clone: - git: - image: woodpeckerci/plugin-git - settings: - partial: false - tags: true - -steps: - - name: server_fmt - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd server - - rustfmt **/*.rs --check --edition 2021 --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - SCCACHE_LOG_LEVEL: debug - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: server_clippy - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd server - - cargo clippy --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - SCCACHE_LOG_LEVEL: debug - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: server_build - depends_on: - - server_clippy - - server_fmt - image: registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/build_env:2024040603 - commands: - - cd server - - cargo build --profile release-ci --color always - environment: - CARGO_INCREMENTAL: "0" - SCCACHE_ENDPOINT: https://eaa2f15b55afa10361622796530d22c6.r2.cloudflarestorage.com/stk-sccache - SCCACHE_BUCKET: stk-sccache - SCCACHE_REGION: auto - SCCACHE_LOG_LEVEL: debug - AWS_ACCESS_KEY_ID: - from_secret: s3_id - AWS_SECRET_ACCESS_KEY: - from_secret: s3_key - RUSTC_WRAPPER: sccache - - name: build_image - depends_on: - - server_build - image: docker - volumes: - - /var/run/docker.sock:/var/run/docker.sock - privileged: true - commands: - - docker login registry.gitlab.com -u c0repwn3r -p "$GLPAT" - - docker buildx build . -f server/Dockerfile -t registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/server:$(git describe --always --tags) - - docker push registry.gitlab.com/starkingdoms.tk/starkingdoms.tk/server:$(git describe --always --tags) - secrets: [ glpat ] \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 31f20c78c82f870f09c3a22408a5297d30508835..f6e4015e174e5735a532606758d123d703b8879b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -290,6 +290,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "ahash" version = "0.8.11" @@ -388,6 +399,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_log-sys" version = "0.3.1" @@ -409,12 +426,55 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + [[package]] name = "anstyle" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + [[package]] name = "anyhow" version = "1.0.95" @@ -435,6 +495,9 @@ name = "arbitrary" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +dependencies = [ + "derive_arbitrary", +] [[package]] name = "arg_enum_proc_macro" @@ -480,6 +543,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "ascii" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" + [[package]] name = "ash" version = "0.37.3+1.3.251" @@ -1421,6 +1490,24 @@ dependencies = [ "winit 0.29.15", ] +[[package]] +name = "binary-install" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5252e41a4ed7657f79827123f232443077984ec55c540adf48e8fe67b6ec0763" +dependencies = [ + "anyhow", + "dirs-next", + "flate2", + "fs4", + "hex", + "is_executable", + "siphasher", + "tar", + "ureq", + "zip", +] + [[package]] name = "bit-set" version = "0.5.3" @@ -1658,6 +1745,27 @@ dependencies = [ "bytes", ] +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "calloop" version = "0.12.4" @@ -1698,6 +1806,38 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 1.0.69", +] + [[package]] name = "cast" version = "0.3.0" @@ -1748,6 +1888,26 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + [[package]] name = "ciborium" version = "0.2.2" @@ -1775,6 +1935,16 @@ dependencies = [ "half", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clap" version = "4.5.14" @@ -1782,6 +1952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c937d4061031a6d0c8da4b9a4f98a172fc2976dfb1c19213a9cf7d0d3c837e36" dependencies = [ "clap_builder", + "clap_derive", ] [[package]] @@ -1790,8 +1961,22 @@ version = "4.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85379ba512b21a328adf887e85f7742d12e96eb31f3ef077df4ffc26b506ffed" dependencies = [ + "anstream", "anstyle", "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.94", ] [[package]] @@ -1807,7 +1992,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.13", ] [[package]] @@ -1816,6 +2001,22 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "colored" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +dependencies = [ + "lazy_static", + "windows-sys 0.59.0", +] + [[package]] name = "com" version = "0.6.0" @@ -1866,6 +2067,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", +] + [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -1995,6 +2209,21 @@ dependencies = [ "libc", ] +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.4.2" @@ -2135,6 +2364,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +[[package]] +name = "deflate64" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" + [[package]] name = "deranged" version = "0.3.11" @@ -2144,6 +2379,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "derive_more" version = "0.99.18" @@ -2178,6 +2424,18 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "dialoguer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +dependencies = [ + "console", + "shell-words", + "tempfile", + "zeroize", +] + [[package]] name = "diesel" version = "2.1.6" @@ -2249,12 +2507,44 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dispatch" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + [[package]] name = "disqualified" version = "1.0.0" @@ -2397,6 +2687,12 @@ dependencies = [ "syn 2.0.94", ] +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -2541,6 +2837,18 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "filetime" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox 0.1.3", + "windows-sys 0.59.0", +] + [[package]] name = "fixedbitset" version = "0.4.2" @@ -2611,6 +2919,25 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs4" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" +dependencies = [ + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "futures" version = "0.3.30" @@ -2796,6 +3123,12 @@ dependencies = [ "serde", ] +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + [[package]] name = "glow" version = "0.13.1" @@ -3094,12 +3427,51 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "human-panic" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4f016c89920bbb30951a8405ecacbb4540db5524313b9445736e7e1855cf370" +dependencies = [ + "anstream", + "anstyle", + "backtrace", + "os_info", + "serde", + "serde_derive", + "toml 0.8.19", + "uuid", +] + [[package]] name = "humantime" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "icrate" version = "0.0.4" @@ -3182,6 +3554,44 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -3204,6 +3614,21 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "is_executable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d553b8abc8187beb7d663e34c065ac4570b273bc9511a50e940e99409c577" +dependencies = [ + "winapi", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.10.5" @@ -3315,6 +3740,26 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "kqueue" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "language-tags" version = "0.3.2" @@ -3386,6 +3831,17 @@ dependencies = [ "redox_syscall 0.4.1", ] +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.3", +] + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -3425,6 +3881,12 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + [[package]] name = "log" version = "0.4.22" @@ -3448,9 +3910,19 @@ dependencies = [ name = "loop9" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" +dependencies = [ + "imgref", +] + +[[package]] +name = "lzma-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" dependencies = [ - "imgref", + "byteorder", + "crc", ] [[package]] @@ -3806,6 +4278,34 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "notify" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533b4c39709f9ba5005d8002048266593c1cfaf3c5f0739d5b8ab0c6c504009" +dependencies = [ + "bitflags 2.6.0", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "notify-types", + "walkdir", + "windows-sys 0.52.0", +] + +[[package]] +name = "notify-types" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585d3cb5e12e01aed9e8a1f70d5c6b5e86fe2a6e48fc8cd0b3e0b8df6f6eb174" +dependencies = [ + "instant", +] + [[package]] name = "ntapi" version = "0.4.1" @@ -4204,7 +4704,18 @@ version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "libredox", + "libredox 0.0.2", +] + +[[package]] +name = "os_info" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e6520c8cc998c5741ee68ec1dc369fc47e5f0ea5320018ecf2a1ccd6328f48b" +dependencies = [ + "log", + "serde", + "windows-sys 0.52.0", ] [[package]] @@ -4290,6 +4801,22 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "path-clean" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -4742,6 +5269,17 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox 0.1.3", + "thiserror 1.0.69", +] + [[package]] name = "regex" version = "1.10.6" @@ -4804,6 +5342,21 @@ version = "0.8.50" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rmp" version = "0.8.14" @@ -4884,6 +5437,38 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.23.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.17" @@ -4914,13 +5499,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "savefile_decoder" -version = "0.1.0" -dependencies = [ - "starkingdoms-common", -] - [[package]] name = "scoped-futures" version = "0.1.3" @@ -4961,6 +5539,9 @@ name = "semver" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] [[package]] name = "serde" @@ -4982,6 +5563,15 @@ dependencies = [ "syn 2.0.94", ] +[[package]] +name = "serde_ignored" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8e319a36d1b52126a0d608f24e93b2d81297091818cd70625fcf50a15d84ddf" +dependencies = [ + "serde", +] + [[package]] name = "serde_json" version = "1.0.122" @@ -5046,6 +5636,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -5173,6 +5769,17 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socks" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" +dependencies = [ + "byteorder", + "libc", + "winapi", +] + [[package]] name = "spade" version = "2.11.0" @@ -5185,6 +5792,12 @@ dependencies = [ "smallvec", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -5281,6 +5894,13 @@ dependencies = [ "sha2", ] +[[package]] +name = "starkingdoms-savefile-decoder" +version = "0.1.0" +dependencies = [ + "starkingdoms-common", +] + [[package]] name = "starkingdoms-server" version = "0.1.0-alpha1" @@ -5325,6 +5945,18 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" @@ -5398,12 +6030,36 @@ dependencies = [ "slotmap", ] +[[package]] +name = "tar" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "target-lexicon" version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "tempfile" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + [[package]] name = "termcolor" version = "1.4.1" @@ -5551,6 +6207,18 @@ dependencies = [ "strict-num", ] +[[package]] +name = "tiny_http" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" +dependencies = [ + "ascii", + "chunked_transfer", + "httpdate", + "log", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -5925,12 +6593,43 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "socks", + "url", + "webpki-roots", +] + [[package]] name = "url" version = "2.5.2" @@ -5948,6 +6647,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.10.0" @@ -6076,6 +6781,38 @@ version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +[[package]] +name = "wasm-pack" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bccc8879c3bbff33e5e7049a4e4889efa816271de754de5d781927492b0318b0" +dependencies = [ + "anyhow", + "binary-install", + "cargo_metadata", + "chrono", + "clap", + "console", + "dialoguer", + "env_logger", + "glob", + "human-panic", + "log", + "parking_lot", + "path-clean", + "semver", + "serde", + "serde_derive", + "serde_ignored", + "serde_json", + "siphasher", + "strsim 0.10.0", + "toml 0.7.8", + "ureq", + "walkdir", + "which", +] + [[package]] name = "wayland-backend" version = "0.3.7" @@ -6233,6 +6970,15 @@ dependencies = [ "web-sys", ] +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "weezl" version = "0.1.8" @@ -6452,6 +7198,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "whoami" version = "1.5.1" @@ -6978,6 +7736,17 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" +[[package]] +name = "xattr" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" +dependencies = [ + "libc", + "linux-raw-sys", + "rustix", +] + [[package]] name = "xcursor" version = "0.3.8" @@ -7009,6 +7778,17 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +[[package]] +name = "xtask" +version = "0.1.0" +dependencies = [ + "anyhow", + "colored", + "notify", + "tiny_http", + "wasm-pack", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -7030,6 +7810,69 @@ dependencies = [ "syn 2.0.94", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "zip" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae9c1ea7b3a5e1f4b922ff856a129881167511563dc219869afe3787fc0c1a45" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "deflate64", + "displaydoc", + "flate2", + "hmac", + "indexmap", + "lzma-rs", + "memchr", + "pbkdf2", + "rand", + "sha1", + "thiserror 2.0.9", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", +] + [[package]] name = "zstd" version = "0.13.2" diff --git a/Cargo.toml b/Cargo.toml index 650f413233b63d2fc87023dc719b303aaf0a6022..b27a7ccfcafe3beead1f7a33510d27b301d4f73e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,9 @@ [workspace] -members = [ - "server", - "starkingdoms-backplane", - "starkingdoms-common", - "savefile_decoder" -, "starkingdoms-api", "kabel", "starkingdoms-client"] resolver = "2" +members = ["crates/*"] [profile.dev.package."*"] opt-level = 3 [profile.release] -debug = "full" - -[profile.release-ci] -inherits = "release" -codegen-units = 1 -lto = "fat" \ No newline at end of file +debug = "full" \ No newline at end of file diff --git a/client/.gitignore b/client/.gitignore deleted file mode 100644 index 79518f716450203a2ce2c11665182cc439429a76..0000000000000000000000000000000000000000 --- a/client/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -node_modules - -# Output -.output -.vercel -/.svelte-kit -/build - -# OS -.DS_Store -Thumbs.db - -# Env -.env -.env.* -!.env.example -!.env.test - -# Vite -vite.config.js.timestamp-* -vite.config.ts.timestamp-* diff --git a/client/.npmrc b/client/.npmrc deleted file mode 100644 index b6f27f135954640c8cc5bfd7b8c9922ca6eb2aad..0000000000000000000000000000000000000000 --- a/client/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/client/.prettierignore b/client/.prettierignore deleted file mode 100644 index ab78a95ddd13952edde9aa3dd79d9718f0457051..0000000000000000000000000000000000000000 --- a/client/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Package Managers -package-lock.json -pnpm-lock.yaml -yarn.lock diff --git a/client/.prettierrc b/client/.prettierrc deleted file mode 100644 index 95730232b6b165fe014037dddc782ff3282ed4a4..0000000000000000000000000000000000000000 --- a/client/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] -} diff --git a/client/README.md b/client/README.md deleted file mode 100644 index 5ce676612ebf910f459f7d5e3e4b2847d0c1bfbb..0000000000000000000000000000000000000000 --- a/client/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm create svelte@latest - -# create a new project in my-app -npm create svelte@latest my-app -``` - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -To create a production version of your app: - -```bash -npm run build -``` - -You can preview the production build with `npm run preview`. - -> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/client/components.json b/client/components.json deleted file mode 100644 index cb936f44993d56e9605eda94fcb2a3ba43022d5f..0000000000000000000000000000000000000000 --- a/client/components.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "https://shadcn-svelte.com/schema.json", - "style": "new-york", - "tailwind": { - "config": "tailwind.config.js", - "css": "src/app.pcss", - "baseColor": "slate" - }, - "aliases": { - "components": "$lib/components", - "utils": "$lib/utils" - }, - "typescript": true -} \ No newline at end of file diff --git a/client/eslint.config.js b/client/eslint.config.js deleted file mode 100644 index 62dbd03c7156cc7d6e57c7b4ca03dd9a8c262c3b..0000000000000000000000000000000000000000 --- a/client/eslint.config.js +++ /dev/null @@ -1,33 +0,0 @@ -import js from '@eslint/js'; -import ts from 'typescript-eslint'; -import svelte from 'eslint-plugin-svelte'; -import prettier from 'eslint-config-prettier'; -import globals from 'globals'; - -/** @type {import('eslint').Linter.Config[]} */ -export default [ - js.configs.recommended, - ...ts.configs.recommended, - ...svelte.configs['flat/recommended'], - prettier, - ...svelte.configs['flat/prettier'], - { - languageOptions: { - globals: { - ...globals.browser, - ...globals.node - } - } - }, - { - files: ['**/*.svelte'], - languageOptions: { - parserOptions: { - parser: ts.parser - } - } - }, - { - ignores: ['build/', '.svelte-kit/', 'dist/'] - } -]; diff --git a/client/package.json b/client/package.json deleted file mode 100644 index 181a8abf041f9d81f84e335c18522bc9a9a27187..0000000000000000000000000000000000000000 --- a/client/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "starkingdoms-client", - "version": "0.0.1", - "private": true, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --check . && eslint .", - "format": "prettier --write ." - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^3.2.2", - "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "@tailwindcss/forms": "^0.5.7", - "@types/eslint": "^9.6.0", - "autoprefixer": "^10.4.19", - "eslint": "^9.8.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.43.0", - "globals": "^15.8.0", - "postcss": "^8.4.40", - "prettier": "^3.3.3", - "prettier-plugin-svelte": "^3.2.6", - "svelte": "^4.2.18", - "svelte-check": "^3.8.5", - "tailwind-merge": "^2.4.0", - "tailwind-variants": "^0.2.1", - "tailwindcss": "^3.4.7", - "typescript": "^5.5.4", - "typescript-eslint": "^8.0.0", - "vite": "^5.3.5" - }, - "type": "module", - "packageManager": "pnpm@9.6.0", - "dependencies": { - "bits-ui": "^0.21.13", - "clsx": "^2.1.1", - "debug": "^4.3.6", - "lucide-svelte": "^0.418.0", - "svelte-radix": "^1.1.0" - } -} diff --git a/client/pnpm-lock.yaml b/client/pnpm-lock.yaml deleted file mode 100644 index 9c3a662c6c3426852b9a8ef943ba8d4ab1ec460a..0000000000000000000000000000000000000000 --- a/client/pnpm-lock.yaml +++ /dev/null @@ -1,3003 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - bits-ui: - specifier: ^0.21.13 - version: 0.21.13(svelte@4.2.18) - clsx: - specifier: ^2.1.1 - version: 2.1.1 - debug: - specifier: ^4.3.6 - version: 4.3.6 - lucide-svelte: - specifier: ^0.418.0 - version: 0.418.0(svelte@4.2.18) - svelte-radix: - specifier: ^1.1.0 - version: 1.1.0(svelte@4.2.18) - devDependencies: - '@sveltejs/adapter-auto': - specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)) - '@sveltejs/kit': - specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5) - '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5) - '@tailwindcss/forms': - specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.7) - '@types/eslint': - specifier: ^9.6.0 - version: 9.6.0 - autoprefixer: - specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.40) - eslint: - specifier: ^9.8.0 - version: 9.8.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@9.8.0) - eslint-plugin-svelte: - specifier: ^2.43.0 - version: 2.43.0(eslint@9.8.0)(svelte@4.2.18) - globals: - specifier: ^15.8.0 - version: 15.8.0 - postcss: - specifier: ^8.4.40 - version: 8.4.40 - prettier: - specifier: ^3.3.3 - version: 3.3.3 - prettier-plugin-svelte: - specifier: ^3.2.6 - version: 3.2.6(prettier@3.3.3)(svelte@4.2.18) - svelte: - specifier: ^4.2.18 - version: 4.2.18 - svelte-check: - specifier: ^3.8.5 - version: 3.8.5(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18) - tailwind-merge: - specifier: ^2.4.0 - version: 2.4.0 - tailwind-variants: - specifier: ^0.2.1 - version: 0.2.1(tailwindcss@3.4.7) - tailwindcss: - specifier: ^3.4.7 - version: 3.4.7 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - typescript-eslint: - specifier: ^8.0.0 - version: 8.0.0(eslint@9.8.0)(typescript@5.5.4) - vite: - specifier: ^5.3.5 - version: 5.3.5 - -packages: - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.17.1': - resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.8.0': - resolution: {integrity: sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@floating-ui/core@1.6.5': - resolution: {integrity: sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==} - - '@floating-ui/dom@1.6.8': - resolution: {integrity: sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==} - - '@floating-ui/utils@0.2.5': - resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} - engines: {node: '>=18.18'} - - '@internationalized/date@3.5.5': - resolution: {integrity: sha512-H+CfYvOZ0LTJeeLOqm19E3uj/4YjrmOFtBufDHPfvtI80hFAMqtrp7oCACpe4Cil5l8S0Qu/9dYfZc/5lY8WQQ==} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@melt-ui/svelte@0.76.2': - resolution: {integrity: sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==} - peerDependencies: - svelte: '>=3 <5' - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - - '@rollup/rollup-android-arm-eabi@4.19.1': - resolution: {integrity: sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.19.1': - resolution: {integrity: sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.19.1': - resolution: {integrity: sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.19.1': - resolution: {integrity: sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-linux-arm-gnueabihf@4.19.1': - resolution: {integrity: sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.19.1': - resolution: {integrity: sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.19.1': - resolution: {integrity: sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.19.1': - resolution: {integrity: sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.19.1': - resolution: {integrity: sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.19.1': - resolution: {integrity: sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.19.1': - resolution: {integrity: sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.19.1': - resolution: {integrity: sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.19.1': - resolution: {integrity: sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.19.1': - resolution: {integrity: sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.19.1': - resolution: {integrity: sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.19.1': - resolution: {integrity: sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==} - cpu: [x64] - os: [win32] - - '@sveltejs/adapter-auto@3.2.2': - resolution: {integrity: sha512-Mso5xPCA8zgcKrv+QioVlqMZkyUQ5MjDJiEPuG/Z7cV/5tmwV7LmcVWk5tZ+H0NCOV1x12AsoSpt/CwFwuVXMA==} - peerDependencies: - '@sveltejs/kit': ^2.0.0 - - '@sveltejs/kit@2.5.18': - resolution: {integrity: sha512-+g06hvpVAnH7b4CDjhnTDgFWBKBiQJpuSmQeGYOuzbO3SC3tdYjRNlDCrafvDtKbGiT2uxY5Dn9qdEUGVZdWOQ==} - engines: {node: '>=18.13'} - hasBin: true - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 - - '@sveltejs/vite-plugin-svelte-inspector@2.1.0': - resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} - engines: {node: ^18.0.0 || >=20} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 - - '@sveltejs/vite-plugin-svelte@3.1.1': - resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==} - engines: {node: ^18.0.0 || >=20} - peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.0 - - '@swc/helpers@0.5.12': - resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} - - '@tailwindcss/forms@0.5.7': - resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} - peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' - - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - - '@types/eslint@9.6.0': - resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} - - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/pug@2.0.10': - resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - - '@typescript-eslint/eslint-plugin@8.0.0': - resolution: {integrity: sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.0.0': - resolution: {integrity: sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@8.0.0': - resolution: {integrity: sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.0.0': - resolution: {integrity: sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@8.0.0': - resolution: {integrity: sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.0.0': - resolution: {integrity: sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@8.0.0': - resolution: {integrity: sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - '@typescript-eslint/visitor-keys@8.0.0': - resolution: {integrity: sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bits-ui@0.21.13: - resolution: {integrity: sha512-7nmOh6Ig7ND4DXZHv1FhNsY9yUGrad0+mf3tc4YN//3MgnJT1LnHtk4HZAKgmxCOe7txSX7/39LtYHbkrXokAQ==} - peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.118 - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001645: - resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - electron-to-chromium@1.5.4: - resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-compat-utils@0.5.1: - resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-plugin-svelte@2.43.0: - resolution: {integrity: sha512-REkxQWvg2pp7QVLxQNa+dJ97xUqRe7Y2JJbSWkHSuszu0VcblZtXkPBPckkivk99y5CdLw4slqfPylL2d/X4jQ==} - engines: {node: ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 - peerDependenciesMeta: - svelte: - optional: true - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-scope@8.0.2: - resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.8.0: - resolution: {integrity: sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - - esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - - focus-trap@7.5.4: - resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} - engines: {node: '>=14'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.8.0: - resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==} - engines: {node: '>=18'} - - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - known-css-properties@0.34.0: - resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-character@3.0.0: - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lucide-svelte@0.418.0: - resolution: {integrity: sha512-kQBuv2PFVmRqd2GSTmRwG8lZBi3w9iYIDeEm789VtnmgXS0gzZaTazdrCRfRIcLT1XEdJUi2lD1G1C8ACMy5DQ==} - peerDependencies: - svelte: ^3 || ^4 || ^5.0.0-next.42 - - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} - - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - mini-svg-data-uri@1.4.4: - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} - hasBin: true - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - nanoid@5.0.7: - resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} - engines: {node: ^18 || >=20} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-safe-parser@6.0.0: - resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.3.3 - - postcss-scss@4.0.9: - resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.4.29 - - postcss-selector-parser@6.1.1: - resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.40: - resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-svelte@3.2.6: - resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==} - peerDependencies: - prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rollup@4.19.1: - resolution: {integrity: sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - - set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - sorcery@0.11.1: - resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} - hasBin: true - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svelte-check@3.8.5: - resolution: {integrity: sha512-3OGGgr9+bJ/+1nbPgsvulkLC48xBsqsgtc8Wam281H4G9F5v3mYGa2bHRsPuwHC5brKl4AxJH95QF73kmfihGQ==} - hasBin: true - peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - - svelte-eslint-parser@0.41.0: - resolution: {integrity: sha512-L6f4hOL+AbgfBIB52Z310pg1d2QjRqm7wy3kI1W6hhdhX5bvu7+f0R6w4ykp5HoDdzq+vGhIJmsisaiJDGmVfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 - peerDependenciesMeta: - svelte: - optional: true - - svelte-hmr@0.16.0: - resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - - svelte-preprocess@5.1.4: - resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - - svelte-radix@1.1.0: - resolution: {integrity: sha512-kyE9wZiJV937INGb+wiBkAjmGtQUUYRPkVL2Q+/gj+9Vog1Ewd2wNvNmpNMUd+c+euxoc5u5YZMuCUgky9EUPw==} - peerDependencies: - svelte: ^3.54.0 || ^4.0.0 || ^5.0.0 - - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} - engines: {node: '>=16'} - - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - - tailwind-merge@2.4.0: - resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==} - - tailwind-variants@0.2.1: - resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==} - engines: {node: '>=16.x', pnpm: '>=7.x'} - peerDependencies: - tailwindcss: '*' - - tailwindcss@3.4.7: - resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - typescript-eslint@8.0.0: - resolution: {integrity: sha512-yQWBJutWL1PmpmDddIOl9/Mi6vZjqNCjqSGBMQ4vsc2Aiodk0SnbQQWPXbSy0HNuKCuGkw1+u4aQ2mO40TdhDQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - vite@5.3.5: - resolution: {integrity: sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - vite: - optional: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} - engines: {node: '>= 14'} - hasBin: true - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@9.8.0)': - dependencies: - eslint: 9.8.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.11.0': {} - - '@eslint/config-array@0.17.1': - dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.6 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/eslintrc@3.1.0': - dependencies: - ajv: 6.12.6 - debug: 4.3.6 - espree: 10.1.0 - globals: 14.0.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.8.0': {} - - '@eslint/object-schema@2.1.4': {} - - '@floating-ui/core@1.6.5': - dependencies: - '@floating-ui/utils': 0.2.5 - - '@floating-ui/dom@1.6.8': - dependencies: - '@floating-ui/core': 1.6.5 - '@floating-ui/utils': 0.2.5 - - '@floating-ui/utils@0.2.5': {} - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.0': {} - - '@internationalized/date@3.5.5': - dependencies: - '@swc/helpers': 0.5.12 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@melt-ui/svelte@0.76.2(svelte@4.2.18)': - dependencies: - '@floating-ui/core': 1.6.5 - '@floating-ui/dom': 1.6.8 - '@internationalized/date': 3.5.5 - dequal: 2.0.3 - focus-trap: 7.5.4 - nanoid: 5.0.7 - svelte: 4.2.18 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@polka/url@1.0.0-next.25': {} - - '@rollup/rollup-android-arm-eabi@4.19.1': - optional: true - - '@rollup/rollup-android-arm64@4.19.1': - optional: true - - '@rollup/rollup-darwin-arm64@4.19.1': - optional: true - - '@rollup/rollup-darwin-x64@4.19.1': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.19.1': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.19.1': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.19.1': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.19.1': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.19.1': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.19.1': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.19.1': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.19.1': - optional: true - - '@rollup/rollup-linux-x64-musl@4.19.1': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.19.1': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.19.1': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.19.1': - optional: true - - '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5))': - dependencies: - '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5) - import-meta-resolve: 4.1.0 - - '@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5) - '@types/cookie': 0.6.0 - cookie: 0.6.0 - devalue: 5.0.0 - esm-env: 1.0.0 - import-meta-resolve: 4.1.0 - kleur: 4.1.5 - magic-string: 0.30.11 - mrmime: 2.0.0 - sade: 1.8.1 - set-cookie-parser: 2.6.0 - sirv: 2.0.4 - svelte: 4.2.18 - tiny-glob: 0.2.9 - vite: 5.3.5 - - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5)': - dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5) - debug: 4.3.6 - svelte: 4.2.18 - vite: 5.3.5 - transitivePeerDependencies: - - supports-color - - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5)': - dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5))(svelte@4.2.18)(vite@5.3.5) - debug: 4.3.6 - deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.11 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) - vite: 5.3.5 - vitefu: 0.2.5(vite@5.3.5) - transitivePeerDependencies: - - supports-color - - '@swc/helpers@0.5.12': - dependencies: - tslib: 2.6.3 - - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.7)': - dependencies: - mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.7 - - '@types/cookie@0.6.0': {} - - '@types/eslint@9.6.0': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - - '@types/estree@1.0.5': {} - - '@types/json-schema@7.0.15': {} - - '@types/pug@2.0.10': {} - - '@typescript-eslint/eslint-plugin@8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.0.0 - '@typescript-eslint/type-utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.0.0 - eslint: 9.8.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 8.0.0 - '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.0.0 - debug: 4.3.6 - eslint: 9.8.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.0.0': - dependencies: - '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/visitor-keys': 8.0.0 - - '@typescript-eslint/type-utils@8.0.0(eslint@9.8.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - eslint - - supports-color - - '@typescript-eslint/types@8.0.0': {} - - '@typescript-eslint/typescript-estree@8.0.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/visitor-keys': 8.0.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.0.0(eslint@9.8.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0) - '@typescript-eslint/scope-manager': 8.0.0 - '@typescript-eslint/types': 8.0.0 - '@typescript-eslint/typescript-estree': 8.0.0(typescript@5.5.4) - eslint: 9.8.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@8.0.0': - dependencies: - '@typescript-eslint/types': 8.0.0 - eslint-visitor-keys: 3.4.3 - - acorn-jsx@5.3.2(acorn@8.12.1): - dependencies: - acorn: 8.12.1 - - acorn@8.12.1: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-regex@6.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@2.0.1: {} - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - array-union@2.1.0: {} - - autoprefixer@10.4.19(postcss@8.4.40): - dependencies: - browserslist: 4.23.2 - caniuse-lite: 1.0.30001645 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.40 - postcss-value-parser: 4.2.0 - - axobject-query@4.1.0: {} - - balanced-match@1.0.2: {} - - binary-extensions@2.3.0: {} - - bits-ui@0.21.13(svelte@4.2.18): - dependencies: - '@internationalized/date': 3.5.5 - '@melt-ui/svelte': 0.76.2(svelte@4.2.18) - nanoid: 5.0.7 - svelte: 4.2.18 - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.1: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.23.2: - dependencies: - caniuse-lite: 1.0.30001645 - electron-to-chromium: 1.5.4 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) - - buffer-crc32@1.0.0: {} - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001645: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - clsx@2.1.1: {} - - code-red@1.0.4: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.5 - acorn: 8.12.1 - estree-walker: 3.0.3 - periscopic: 3.1.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - cookie@0.6.0: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - - cssesc@3.0.0: {} - - debug@4.3.6: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - dequal@2.0.3: {} - - detect-indent@6.1.0: {} - - devalue@5.0.0: {} - - didyoumean@1.2.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dlv@1.1.3: {} - - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.5.4: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - es6-promise@3.3.1: {} - - esbuild@0.21.5: - optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 - - escalade@3.1.2: {} - - escape-string-regexp@4.0.0: {} - - eslint-compat-utils@0.5.1(eslint@9.8.0): - dependencies: - eslint: 9.8.0 - semver: 7.6.3 - - eslint-config-prettier@9.1.0(eslint@9.8.0): - dependencies: - eslint: 9.8.0 - - eslint-plugin-svelte@2.43.0(eslint@9.8.0)(svelte@4.2.18): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0) - '@jridgewell/sourcemap-codec': 1.5.0 - eslint: 9.8.0 - eslint-compat-utils: 0.5.1(eslint@9.8.0) - esutils: 2.0.3 - known-css-properties: 0.34.0 - postcss: 8.4.40 - postcss-load-config: 3.1.4(postcss@8.4.40) - postcss-safe-parser: 6.0.0(postcss@8.4.40) - postcss-selector-parser: 6.1.1 - semver: 7.6.3 - svelte-eslint-parser: 0.41.0(svelte@4.2.18) - optionalDependencies: - svelte: 4.2.18 - transitivePeerDependencies: - - ts-node - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-scope@8.0.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.0.0: {} - - eslint@9.8.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.8.0) - '@eslint-community/regexpp': 4.11.0 - '@eslint/config-array': 0.17.1 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.8.0 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.6 - escape-string-regexp: 4.0.0 - eslint-scope: 8.0.2 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - esm-env@1.0.0: {} - - espree@10.1.0: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 - - espree@9.6.1: - dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.5 - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.7 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - - flatted@3.3.1: {} - - focus-trap@7.5.4: - dependencies: - tabbable: 6.2.0 - - foreground-child@3.2.1: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - - fraction.js@4.3.7: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.2.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@14.0.0: {} - - globals@15.8.0: {} - - globalyzer@0.1.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - - globrex@0.1.2: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-flag@4.0.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - ignore@5.3.1: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-meta-resolve@4.1.0: {} - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@1.21.6: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@4.1.5: {} - - known-css-properties@0.34.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lilconfig@2.1.0: {} - - lilconfig@3.1.2: {} - - lines-and-columns@1.2.4: {} - - locate-character@3.0.0: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - lru-cache@10.4.3: {} - - lucide-svelte@0.418.0(svelte@4.2.18): - dependencies: - svelte: 4.2.18 - - magic-string@0.30.11: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - mdn-data@2.0.30: {} - - merge2@1.4.1: {} - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - min-indent@1.0.1: {} - - mini-svg-data-uri@1.4.4: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - - minimist@1.2.8: {} - - minipass@7.1.2: {} - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - - mri@1.2.0: {} - - mrmime@2.0.0: {} - - ms@2.1.2: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.7: {} - - nanoid@5.0.7: {} - - natural-compare@1.4.0: {} - - node-releases@2.0.18: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - package-json-from-dist@1.0.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - pify@2.3.0: {} - - pirates@4.0.6: {} - - postcss-import@15.1.0(postcss@8.4.40): - dependencies: - postcss: 8.4.40 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 - - postcss-js@4.0.1(postcss@8.4.40): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.40 - - postcss-load-config@3.1.4(postcss@8.4.40): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.4.40 - - postcss-load-config@4.0.2(postcss@8.4.40): - dependencies: - lilconfig: 3.1.2 - yaml: 2.5.0 - optionalDependencies: - postcss: 8.4.40 - - postcss-nested@6.2.0(postcss@8.4.40): - dependencies: - postcss: 8.4.40 - postcss-selector-parser: 6.1.1 - - postcss-safe-parser@6.0.0(postcss@8.4.40): - dependencies: - postcss: 8.4.40 - - postcss-scss@4.0.9(postcss@8.4.40): - dependencies: - postcss: 8.4.40 - - postcss-selector-parser@6.1.1: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.40: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prelude-ls@1.2.1: {} - - prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.18): - dependencies: - prettier: 3.3.3 - svelte: 4.2.18 - - prettier@3.3.3: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - resolve-from@4.0.0: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - - rollup@4.19.1: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.19.1 - '@rollup/rollup-android-arm64': 4.19.1 - '@rollup/rollup-darwin-arm64': 4.19.1 - '@rollup/rollup-darwin-x64': 4.19.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.19.1 - '@rollup/rollup-linux-arm-musleabihf': 4.19.1 - '@rollup/rollup-linux-arm64-gnu': 4.19.1 - '@rollup/rollup-linux-arm64-musl': 4.19.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.19.1 - '@rollup/rollup-linux-riscv64-gnu': 4.19.1 - '@rollup/rollup-linux-s390x-gnu': 4.19.1 - '@rollup/rollup-linux-x64-gnu': 4.19.1 - '@rollup/rollup-linux-x64-musl': 4.19.1 - '@rollup/rollup-win32-arm64-msvc': 4.19.1 - '@rollup/rollup-win32-ia32-msvc': 4.19.1 - '@rollup/rollup-win32-x64-msvc': 4.19.1 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - sander@0.5.1: - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - - semver@7.6.3: {} - - set-cookie-parser@2.6.0: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - signal-exit@4.1.0: {} - - sirv@2.0.4: - dependencies: - '@polka/url': 1.0.0-next.25 - mrmime: 2.0.0 - totalist: 3.0.1 - - slash@3.0.0: {} - - sorcery@0.11.1: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - buffer-crc32: 1.0.0 - minimist: 1.2.8 - sander: 0.5.1 - - source-map-js@1.2.0: {} - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.0.1 - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - strip-json-comments@3.1.1: {} - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - svelte-check@3.8.5(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - chokidar: 3.6.0 - picocolors: 1.0.1 - sade: 1.8.1 - svelte: 4.2.18 - svelte-preprocess: 5.1.4(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18)(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss - - svelte-eslint-parser@0.41.0(svelte@4.2.18): - dependencies: - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - postcss: 8.4.40 - postcss-scss: 4.0.9(postcss@8.4.40) - optionalDependencies: - svelte: 4.2.18 - - svelte-hmr@0.16.0(svelte@4.2.18): - dependencies: - svelte: 4.2.18 - - svelte-preprocess@5.1.4(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(svelte@4.2.18)(typescript@5.5.4): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.11 - sorcery: 0.11.1 - strip-indent: 3.0.0 - svelte: 4.2.18 - optionalDependencies: - postcss: 8.4.40 - postcss-load-config: 4.0.2(postcss@8.4.40) - typescript: 5.5.4 - - svelte-radix@1.1.0(svelte@4.2.18): - dependencies: - svelte: 4.2.18 - - svelte@4.2.18: - dependencies: - '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - '@types/estree': 1.0.5 - acorn: 8.12.1 - aria-query: 5.3.0 - axobject-query: 4.1.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 - locate-character: 3.0.0 - magic-string: 0.30.11 - periscopic: 3.1.0 - - tabbable@6.2.0: {} - - tailwind-merge@2.4.0: {} - - tailwind-variants@0.2.1(tailwindcss@3.4.7): - dependencies: - tailwind-merge: 2.4.0 - tailwindcss: 3.4.7 - - tailwindcss@3.4.7: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.7 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.40 - postcss-import: 15.1.0(postcss@8.4.40) - postcss-js: 4.0.1(postcss@8.4.40) - postcss-load-config: 4.0.2(postcss@8.4.40) - postcss-nested: 6.2.0(postcss@8.4.40) - postcss-selector-parser: 6.1.1 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - text-table@0.2.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - totalist@3.0.1: {} - - ts-api-utils@1.3.0(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - ts-interface-checker@0.1.13: {} - - tslib@2.6.3: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - typescript-eslint@8.0.0(eslint@9.8.0)(typescript@5.5.4): - dependencies: - '@typescript-eslint/eslint-plugin': 8.0.0(@typescript-eslint/parser@8.0.0(eslint@9.8.0)(typescript@5.5.4))(eslint@9.8.0)(typescript@5.5.4) - '@typescript-eslint/parser': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.0(eslint@9.8.0)(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - eslint - - supports-color - - typescript@5.5.4: {} - - update-browserslist-db@1.1.0(browserslist@4.23.2): - dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - util-deprecate@1.0.2: {} - - vite@5.3.5: - dependencies: - esbuild: 0.21.5 - postcss: 8.4.40 - rollup: 4.19.1 - optionalDependencies: - fsevents: 2.3.3 - - vitefu@0.2.5(vite@5.3.5): - optionalDependencies: - vite: 5.3.5 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - yaml@1.10.2: {} - - yaml@2.5.0: {} - - yocto-queue@0.1.0: {} diff --git a/client/postcss.config.js b/client/postcss.config.js deleted file mode 100644 index 2e7af2b7f1a6f391da1631d93968a9d487ba977d..0000000000000000000000000000000000000000 --- a/client/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/client/src/app.d.ts b/client/src/app.d.ts deleted file mode 100644 index 743f07b2e50aaa12580b14be49a1242c2f3ac564..0000000000000000000000000000000000000000 --- a/client/src/app.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -// See https://kit.svelte.dev/docs/types#app -// for information about these interfaces -declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface PageState {} - // interface Platform {} - } -} - -export {}; diff --git a/client/src/app.html b/client/src/app.html deleted file mode 100644 index 77a5ff52c9239ef2a5c38ba452c659f49e64a7db..0000000000000000000000000000000000000000 --- a/client/src/app.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - %sveltekit.head% - - -
%sveltekit.body%
- - diff --git a/client/src/lib/components/ui/button/Button.svelte b/client/src/lib/components/ui/button/Button.svelte deleted file mode 100644 index 8080ee38fab9ca29b9d0f9ff558901e7ce0accd7..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/button/Button.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file diff --git a/client/src/lib/components/ui/button/button.svelte b/client/src/lib/components/ui/button/button.svelte deleted file mode 100644 index 86827f32d3914b7728a5888ea984ef1016005523..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/button/button.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/client/src/lib/components/ui/button/index.ts b/client/src/lib/components/ui/button/index.ts deleted file mode 100644 index f0f4612434ab3f7a7900536d1ab34a01a8ed5398..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/button/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { Button as ButtonPrimitive } from "bits-ui"; -import { type VariantProps, tv } from "tailwind-variants"; -import Root from "./button.svelte"; - -const buttonVariants = tv({ - base: "focus-visible:ring-ring inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50", - variants: { - variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow", - destructive: - "bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-sm", - outline: - "border-input bg-background hover:bg-accent hover:text-accent-foreground border shadow-sm", - secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-sm", - ghost: "hover:bg-accent hover:text-accent-foreground", - link: "text-primary underline-offset-4 hover:underline", - }, - size: { - default: "h-9 px-4 py-2", - sm: "h-8 rounded-md px-3 text-xs", - lg: "h-10 rounded-md px-8", - icon: "h-9 w-9", - }, - }, - defaultVariants: { - variant: "default", - size: "default", - }, -}); - -type Variant = VariantProps["variant"]; -type Size = VariantProps["size"]; - -type Props = ButtonPrimitive.Props & { - variant?: Variant; - size?: Size; -}; - -type Events = ButtonPrimitive.Events; - -export { - Root, - type Props, - type Events, - // - Root as Button, - type Props as ButtonProps, - type Events as ButtonEvents, - buttonVariants, -}; diff --git a/client/src/lib/components/ui/card/card-content.svelte b/client/src/lib/components/ui/card/card-content.svelte deleted file mode 100644 index 89d82b20b2d4b0e4237459f76b3ce4649936e4ac..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card-content.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -
- -
diff --git a/client/src/lib/components/ui/card/card-description.svelte b/client/src/lib/components/ui/card/card-description.svelte deleted file mode 100644 index f65821dce7ef69bf8ad8e66297d74c72a37effbd..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card-description.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -

- -

diff --git a/client/src/lib/components/ui/card/card-footer.svelte b/client/src/lib/components/ui/card/card-footer.svelte deleted file mode 100644 index 32f90bbb11b7a0f994fc60090ac8dcdc0fb89f42..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card-footer.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -
- -
diff --git a/client/src/lib/components/ui/card/card-header.svelte b/client/src/lib/components/ui/card/card-header.svelte deleted file mode 100644 index e4745286ae10d09f610048584fe1056f7a20de38..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card-header.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -
- -
diff --git a/client/src/lib/components/ui/card/card-title.svelte b/client/src/lib/components/ui/card/card-title.svelte deleted file mode 100644 index 099ae93f5b2a993a04adb5aa07da04bcb99dd4fd..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card-title.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/client/src/lib/components/ui/card/card.svelte b/client/src/lib/components/ui/card/card.svelte deleted file mode 100644 index 05aafaec456eb966c99a47b6b43188fc03303ed4..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/card.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - - -
- -
diff --git a/client/src/lib/components/ui/card/index.ts b/client/src/lib/components/ui/card/index.ts deleted file mode 100644 index bcc031d00dfe54f1dfd5e0d7906b12262727ae68..0000000000000000000000000000000000000000 --- a/client/src/lib/components/ui/card/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Root from "./card.svelte"; -import Content from "./card-content.svelte"; -import Description from "./card-description.svelte"; -import Footer from "./card-footer.svelte"; -import Header from "./card-header.svelte"; -import Title from "./card-title.svelte"; - -export { - Root, - Content, - Description, - Footer, - Header, - Title, - // - Root as Card, - Content as CardContent, - Description as CardDescription, - Footer as CardFooter, - Header as CardHeader, - Title as CardTitle, -}; - -export type HeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6"; diff --git a/client/src/lib/index.ts b/client/src/lib/index.ts deleted file mode 100644 index 856f2b6c38aec1085db88189bcf492dbb49a1c45..0000000000000000000000000000000000000000 --- a/client/src/lib/index.ts +++ /dev/null @@ -1 +0,0 @@ -// place files you want to import through the `$lib` alias in this folder. diff --git a/client/src/routes/(menu)/+page.svelte b/client/src/routes/(menu)/+page.svelte deleted file mode 100644 index 1b13696c07780ff718af19c8d42c0d914efc6982..0000000000000000000000000000000000000000 --- a/client/src/routes/(menu)/+page.svelte +++ /dev/null @@ -1,74 +0,0 @@ - - - -

StarKingdoms

- -
- - -

StarKingdoms is a browser game about floating through space.

- -

Profile

- -

Log in to save your progress on the server and sync it across devices.

-
- - -
- - -
-
- - {console.log(v); v && (serverId = v.value)}}> - - - - - {#each data.config.environments as v, k} - - {/each} - - - {#if serverId && data.config.environments[serverId] && !data.config.environments[serverId].isProduction} -
-
- - Here be dragons! -
-

You have selected a pre-release server! Expect bugs, and save data may be wiped at any time.

-
- {/if} -
- {#if allowJoin} - - {:else} - - {/if} -
- - - - - -
-
\ No newline at end of file diff --git a/client/src/routes/(menu)/login/+page.svelte b/client/src/routes/(menu)/login/+page.svelte deleted file mode 100644 index 03775fc1212e3bfd14e977f6cbb02492ee729d5b..0000000000000000000000000000000000000000 --- a/client/src/routes/(menu)/login/+page.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - -

Login

- -
- - -
-
- - -
- -

Don't have an account? Register

-

Just want to play? Go back

-
\ No newline at end of file diff --git a/client/static/favicon.ico b/client/static/favicon.ico deleted file mode 100644 index bdec274dffb8bb1b5c4a1fa7e3fb04cc85ebda0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmah}OKTHR6uwiXDM4Z=Vi%#%MIX`!6iT7#!nQL>W)dPn5`%#dvoSP;n2>kUjf$J> zrMUAa_!BHjcP`zyXg7lBLU7~4f<1oUZElDlIOWWpo^!wNyrYzbzhF?|y`T=SD|K5b zbq4|!G*@~YO2PI%a3%WxiC4GVRmo&hg~Q<+p69*JWHL{x)#|NAqoHUsG65NXb~+tx zuh;9U-EPN$`%d=G z^$*h9<_Im!P1J=xfJE^~7yGBfj4l)A+CTg`VBkE3hTYPHS>gTVsv ztTF54x}I!q9?A6dci?0!}#sPkN2J|5!?hh_birKMM}yTW?X z7k$z4wxhB#9Fg9%n#gW zu&)~5dU)|Nd`8a`x)5s&o>T4;cMAA8cZ_!W``0tc!QJH!W0$MkY3??6oOjG~a#N|N T76b~)e;?e%4~@qBxTe$}P#c}( diff --git a/client/static/favicon.png b/client/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH)", - input: "hsl(var(--input) / )", - ring: "hsl(var(--ring) / )", - background: "hsl(var(--background) / )", - foreground: "hsl(var(--foreground) / )", - primary: { - DEFAULT: "hsl(var(--primary) / )", - foreground: "hsl(var(--primary-foreground) / )" - }, - secondary: { - DEFAULT: "hsl(var(--secondary) / )", - foreground: "hsl(var(--secondary-foreground) / )" - }, - destructive: { - DEFAULT: "hsl(var(--destructive) / )", - foreground: "hsl(var(--destructive-foreground) / )" - }, - muted: { - DEFAULT: "hsl(var(--muted) / )", - foreground: "hsl(var(--muted-foreground) / )" - }, - accent: { - DEFAULT: "hsl(var(--accent) / )", - foreground: "hsl(var(--accent-foreground) / )" - }, - popover: { - DEFAULT: "hsl(var(--popover) / )", - foreground: "hsl(var(--popover-foreground) / )" - }, - card: { - DEFAULT: "hsl(var(--card) / )", - foreground: "hsl(var(--card-foreground) / )" - } - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)" - }, - fontFamily: { - sans: [...fontFamily.sans] - } - } - }, -}; - -export default config; diff --git a/client/tsconfig.json b/client/tsconfig.json deleted file mode 100644 index fc93cbd9409f9809256c4c763bf205bba17f0a44..0000000000000000000000000000000000000000 --- a/client/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "moduleResolution": "bundler" - } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in -} diff --git a/client/vite.config.ts b/client/vite.config.ts deleted file mode 100644 index bbf8c7da43f0080dc6b9fb275f9583b7c17f1506..0000000000000000000000000000000000000000 --- a/client/vite.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { sveltekit } from '@sveltejs/kit/vite'; -import { defineConfig } from 'vite'; - -export default defineConfig({ - plugins: [sveltekit()] -}); diff --git a/starkingdoms-api/Cargo.toml b/crates/api/Cargo.toml similarity index 91% rename from starkingdoms-api/Cargo.toml rename to crates/api/Cargo.toml index 18f9a70e69df953db4bbc79d5f2cbbc128ff55b3..561293a4677dfc6fc4511ebb87eaf82b53f77c0d 100644 --- a/starkingdoms-api/Cargo.toml +++ b/crates/api/Cargo.toml @@ -28,4 +28,4 @@ jwt = "0.16" sha2 = "0.10" hmac = "0.12" hex = "0.4" -starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" } \ No newline at end of file +starkingdoms-common = { version = "0.1", path = "../common" } \ No newline at end of file diff --git a/starkingdoms-api/Dockerfile b/crates/api/Dockerfile similarity index 100% rename from starkingdoms-api/Dockerfile rename to crates/api/Dockerfile diff --git a/starkingdoms-api/build.rs b/crates/api/build.rs similarity index 100% rename from starkingdoms-api/build.rs rename to crates/api/build.rs diff --git a/starkingdoms-api/diesel.toml b/crates/api/diesel.toml similarity index 100% rename from starkingdoms-api/diesel.toml rename to crates/api/diesel.toml diff --git a/starkingdoms-api/migrations/.keep b/crates/api/migrations/.keep similarity index 100% rename from starkingdoms-api/migrations/.keep rename to crates/api/migrations/.keep diff --git a/starkingdoms-api/migrations/00000000000000_diesel_initial_setup/down.sql b/crates/api/migrations/00000000000000_diesel_initial_setup/down.sql similarity index 100% rename from starkingdoms-api/migrations/00000000000000_diesel_initial_setup/down.sql rename to crates/api/migrations/00000000000000_diesel_initial_setup/down.sql diff --git a/starkingdoms-api/migrations/00000000000000_diesel_initial_setup/up.sql b/crates/api/migrations/00000000000000_diesel_initial_setup/up.sql similarity index 100% rename from starkingdoms-api/migrations/00000000000000_diesel_initial_setup/up.sql rename to crates/api/migrations/00000000000000_diesel_initial_setup/up.sql diff --git a/starkingdoms-api/migrations/2024-04-08-152705_create_table_saves/down.sql b/crates/api/migrations/2024-04-08-152705_create_table_saves/down.sql similarity index 100% rename from starkingdoms-api/migrations/2024-04-08-152705_create_table_saves/down.sql rename to crates/api/migrations/2024-04-08-152705_create_table_saves/down.sql diff --git a/starkingdoms-api/migrations/2024-04-08-152705_create_table_saves/up.sql b/crates/api/migrations/2024-04-08-152705_create_table_saves/up.sql similarity index 100% rename from starkingdoms-api/migrations/2024-04-08-152705_create_table_saves/up.sql rename to crates/api/migrations/2024-04-08-152705_create_table_saves/up.sql diff --git a/starkingdoms-api/src/auth.rs b/crates/api/src/auth.rs similarity index 100% rename from starkingdoms-api/src/auth.rs rename to crates/api/src/auth.rs diff --git a/starkingdoms-api/src/config.rs b/crates/api/src/config.rs similarity index 100% rename from starkingdoms-api/src/config.rs rename to crates/api/src/config.rs diff --git a/starkingdoms-api/src/error.rs b/crates/api/src/error.rs similarity index 100% rename from starkingdoms-api/src/error.rs rename to crates/api/src/error.rs diff --git a/starkingdoms-api/src/main.rs b/crates/api/src/main.rs similarity index 100% rename from starkingdoms-api/src/main.rs rename to crates/api/src/main.rs diff --git a/starkingdoms-api/src/models.rs b/crates/api/src/models.rs similarity index 100% rename from starkingdoms-api/src/models.rs rename to crates/api/src/models.rs diff --git a/starkingdoms-api/src/response.rs b/crates/api/src/response.rs similarity index 100% rename from starkingdoms-api/src/response.rs rename to crates/api/src/response.rs diff --git a/starkingdoms-api/src/routes/mod.rs b/crates/api/src/routes/mod.rs similarity index 100% rename from starkingdoms-api/src/routes/mod.rs rename to crates/api/src/routes/mod.rs diff --git a/starkingdoms-api/src/routes/sign_save.rs b/crates/api/src/routes/sign_save.rs similarity index 100% rename from starkingdoms-api/src/routes/sign_save.rs rename to crates/api/src/routes/sign_save.rs diff --git a/starkingdoms-api/src/schema.rs b/crates/api/src/schema.rs similarity index 100% rename from starkingdoms-api/src/schema.rs rename to crates/api/src/schema.rs diff --git a/starkingdoms-api/src/tokens.rs b/crates/api/src/tokens.rs similarity index 100% rename from starkingdoms-api/src/tokens.rs rename to crates/api/src/tokens.rs diff --git a/starkingdoms-api/.env b/crates/backplane/.env similarity index 100% rename from starkingdoms-api/.env rename to crates/backplane/.env diff --git a/starkingdoms-backplane/Cargo.toml b/crates/backplane/Cargo.toml similarity index 100% rename from starkingdoms-backplane/Cargo.toml rename to crates/backplane/Cargo.toml diff --git a/starkingdoms-backplane/Dockerfile b/crates/backplane/Dockerfile similarity index 100% rename from starkingdoms-backplane/Dockerfile rename to crates/backplane/Dockerfile diff --git a/starkingdoms-backplane/build.rs b/crates/backplane/build.rs similarity index 100% rename from starkingdoms-backplane/build.rs rename to crates/backplane/build.rs diff --git a/starkingdoms-backplane/diesel.toml b/crates/backplane/diesel.toml similarity index 100% rename from starkingdoms-backplane/diesel.toml rename to crates/backplane/diesel.toml diff --git a/starkingdoms-backplane/migrations/.keep b/crates/backplane/migrations/.keep similarity index 100% rename from starkingdoms-backplane/migrations/.keep rename to crates/backplane/migrations/.keep diff --git a/starkingdoms-backplane/migrations/00000000000000_diesel_initial_setup/down.sql b/crates/backplane/migrations/00000000000000_diesel_initial_setup/down.sql similarity index 100% rename from starkingdoms-backplane/migrations/00000000000000_diesel_initial_setup/down.sql rename to crates/backplane/migrations/00000000000000_diesel_initial_setup/down.sql diff --git a/starkingdoms-backplane/migrations/00000000000000_diesel_initial_setup/up.sql b/crates/backplane/migrations/00000000000000_diesel_initial_setup/up.sql similarity index 100% rename from starkingdoms-backplane/migrations/00000000000000_diesel_initial_setup/up.sql rename to crates/backplane/migrations/00000000000000_diesel_initial_setup/up.sql diff --git a/starkingdoms-backplane/migrations/2023-11-30-013338_create_table_users/down.sql b/crates/backplane/migrations/2023-11-30-013338_create_table_users/down.sql similarity index 100% rename from starkingdoms-backplane/migrations/2023-11-30-013338_create_table_users/down.sql rename to crates/backplane/migrations/2023-11-30-013338_create_table_users/down.sql diff --git a/starkingdoms-backplane/migrations/2023-11-30-013338_create_table_users/up.sql b/crates/backplane/migrations/2023-11-30-013338_create_table_users/up.sql similarity index 100% rename from starkingdoms-backplane/migrations/2023-11-30-013338_create_table_users/up.sql rename to crates/backplane/migrations/2023-11-30-013338_create_table_users/up.sql diff --git a/starkingdoms-backplane/src/auth.rs b/crates/backplane/src/auth.rs similarity index 100% rename from starkingdoms-backplane/src/auth.rs rename to crates/backplane/src/auth.rs diff --git a/starkingdoms-backplane/src/config.rs b/crates/backplane/src/config.rs similarity index 100% rename from starkingdoms-backplane/src/config.rs rename to crates/backplane/src/config.rs diff --git a/starkingdoms-backplane/src/error.rs b/crates/backplane/src/error.rs similarity index 100% rename from starkingdoms-backplane/src/error.rs rename to crates/backplane/src/error.rs diff --git a/starkingdoms-backplane/src/main.rs b/crates/backplane/src/main.rs similarity index 100% rename from starkingdoms-backplane/src/main.rs rename to crates/backplane/src/main.rs diff --git a/starkingdoms-backplane/src/models.rs b/crates/backplane/src/models.rs similarity index 100% rename from starkingdoms-backplane/src/models.rs rename to crates/backplane/src/models.rs diff --git a/starkingdoms-backplane/src/response.rs b/crates/backplane/src/response.rs similarity index 100% rename from starkingdoms-backplane/src/response.rs rename to crates/backplane/src/response.rs diff --git a/starkingdoms-backplane/src/routes/login.rs b/crates/backplane/src/routes/login.rs similarity index 100% rename from starkingdoms-backplane/src/routes/login.rs rename to crates/backplane/src/routes/login.rs diff --git a/starkingdoms-backplane/src/routes/mod.rs b/crates/backplane/src/routes/mod.rs similarity index 100% rename from starkingdoms-backplane/src/routes/mod.rs rename to crates/backplane/src/routes/mod.rs diff --git a/starkingdoms-backplane/src/routes/signup.rs b/crates/backplane/src/routes/signup.rs similarity index 100% rename from starkingdoms-backplane/src/routes/signup.rs rename to crates/backplane/src/routes/signup.rs diff --git a/starkingdoms-backplane/src/schema.rs b/crates/backplane/src/schema.rs similarity index 100% rename from starkingdoms-backplane/src/schema.rs rename to crates/backplane/src/schema.rs diff --git a/starkingdoms-backplane/src/tokens.rs b/crates/backplane/src/tokens.rs similarity index 100% rename from starkingdoms-backplane/src/tokens.rs rename to crates/backplane/src/tokens.rs diff --git a/starkingdoms-common/Cargo.toml b/crates/common/Cargo.toml similarity index 100% rename from starkingdoms-common/Cargo.toml rename to crates/common/Cargo.toml diff --git a/starkingdoms-common/src/lib.rs b/crates/common/src/lib.rs similarity index 100% rename from starkingdoms-common/src/lib.rs rename to crates/common/src/lib.rs diff --git a/kabel/Cargo.toml b/crates/kabel/Cargo.toml similarity index 100% rename from kabel/Cargo.toml rename to crates/kabel/Cargo.toml diff --git a/kabel/grammar.ebnf b/crates/kabel/grammar.ebnf similarity index 100% rename from kabel/grammar.ebnf rename to crates/kabel/grammar.ebnf diff --git a/kabel/opcodes.txt b/crates/kabel/opcodes.txt similarity index 100% rename from kabel/opcodes.txt rename to crates/kabel/opcodes.txt diff --git a/kabel/src/ast.rs b/crates/kabel/src/ast.rs similarity index 100% rename from kabel/src/ast.rs rename to crates/kabel/src/ast.rs diff --git a/kabel/src/codegen.rs b/crates/kabel/src/codegen.rs similarity index 100% rename from kabel/src/codegen.rs rename to crates/kabel/src/codegen.rs diff --git a/kabel/src/debug.rs b/crates/kabel/src/debug.rs similarity index 100% rename from kabel/src/debug.rs rename to crates/kabel/src/debug.rs diff --git a/kabel/src/error.rs b/crates/kabel/src/error.rs similarity index 100% rename from kabel/src/error.rs rename to crates/kabel/src/error.rs diff --git a/kabel/src/extension.rs b/crates/kabel/src/extension.rs similarity index 100% rename from kabel/src/extension.rs rename to crates/kabel/src/extension.rs diff --git a/kabel/src/lexer.rs b/crates/kabel/src/lexer.rs similarity index 100% rename from kabel/src/lexer.rs rename to crates/kabel/src/lexer.rs diff --git a/kabel/src/lib.rs b/crates/kabel/src/lib.rs similarity index 100% rename from kabel/src/lib.rs rename to crates/kabel/src/lib.rs diff --git a/kabel/src/macros.rs b/crates/kabel/src/macros.rs similarity index 100% rename from kabel/src/macros.rs rename to crates/kabel/src/macros.rs diff --git a/kabel/src/main.rs b/crates/kabel/src/main.rs similarity index 100% rename from kabel/src/main.rs rename to crates/kabel/src/main.rs diff --git a/kabel/src/name_resolution.rs b/crates/kabel/src/name_resolution.rs similarity index 100% rename from kabel/src/name_resolution.rs rename to crates/kabel/src/name_resolution.rs diff --git a/kabel/src/opcodes.rs b/crates/kabel/src/opcodes.rs similarity index 100% rename from kabel/src/opcodes.rs rename to crates/kabel/src/opcodes.rs diff --git a/kabel/src/parser.rs b/crates/kabel/src/parser.rs similarity index 100% rename from kabel/src/parser.rs rename to crates/kabel/src/parser.rs diff --git a/kabel/src/runtime_error.rs b/crates/kabel/src/runtime_error.rs similarity index 100% rename from kabel/src/runtime_error.rs rename to crates/kabel/src/runtime_error.rs diff --git a/kabel/src/test.rs b/crates/kabel/src/test.rs similarity index 100% rename from kabel/src/test.rs rename to crates/kabel/src/test.rs diff --git a/kabel/src/vm.rs b/crates/kabel/src/vm.rs similarity index 100% rename from kabel/src/vm.rs rename to crates/kabel/src/vm.rs diff --git a/kabel/test/lexer/arithmetic.kab b/crates/kabel/test/lexer/arithmetic.kab similarity index 100% rename from kabel/test/lexer/arithmetic.kab rename to crates/kabel/test/lexer/arithmetic.kab diff --git a/kabel/test/lexer/arithmetic.out b/crates/kabel/test/lexer/arithmetic.out similarity index 100% rename from kabel/test/lexer/arithmetic.out rename to crates/kabel/test/lexer/arithmetic.out diff --git a/kabel/test/lexer/declaration.kab b/crates/kabel/test/lexer/declaration.kab similarity index 100% rename from kabel/test/lexer/declaration.kab rename to crates/kabel/test/lexer/declaration.kab diff --git a/kabel/test/lexer/declaration.out b/crates/kabel/test/lexer/declaration.out similarity index 100% rename from kabel/test/lexer/declaration.out rename to crates/kabel/test/lexer/declaration.out diff --git a/kabel/test/lexer/keywords.kab b/crates/kabel/test/lexer/keywords.kab similarity index 100% rename from kabel/test/lexer/keywords.kab rename to crates/kabel/test/lexer/keywords.kab diff --git a/kabel/test/lexer/keywords.out b/crates/kabel/test/lexer/keywords.out similarity index 100% rename from kabel/test/lexer/keywords.out rename to crates/kabel/test/lexer/keywords.out diff --git a/kabel/test/runtime/arithmetic_run.kab b/crates/kabel/test/runtime/arithmetic_run.kab similarity index 100% rename from kabel/test/runtime/arithmetic_run.kab rename to crates/kabel/test/runtime/arithmetic_run.kab diff --git a/kabel/test/runtime/arithmetic_run.out b/crates/kabel/test/runtime/arithmetic_run.out similarity index 100% rename from kabel/test/runtime/arithmetic_run.out rename to crates/kabel/test/runtime/arithmetic_run.out diff --git a/kabel/test/runtime/fibonacci.kab b/crates/kabel/test/runtime/fibonacci.kab similarity index 100% rename from kabel/test/runtime/fibonacci.kab rename to crates/kabel/test/runtime/fibonacci.kab diff --git a/kabel/test/runtime/fibonacci.out b/crates/kabel/test/runtime/fibonacci.out similarity index 100% rename from kabel/test/runtime/fibonacci.out rename to crates/kabel/test/runtime/fibonacci.out diff --git a/kabel/test/runtime/fizzbuzz.kab b/crates/kabel/test/runtime/fizzbuzz.kab similarity index 100% rename from kabel/test/runtime/fizzbuzz.kab rename to crates/kabel/test/runtime/fizzbuzz.kab diff --git a/kabel/test/runtime/fizzbuzz.out b/crates/kabel/test/runtime/fizzbuzz.out similarity index 100% rename from kabel/test/runtime/fizzbuzz.out rename to crates/kabel/test/runtime/fizzbuzz.out diff --git a/kabel/test/runtime/fn_absent_block.kab b/crates/kabel/test/runtime/fn_absent_block.kab similarity index 100% rename from kabel/test/runtime/fn_absent_block.kab rename to crates/kabel/test/runtime/fn_absent_block.kab diff --git a/kabel/test/runtime/fn_absent_block.out b/crates/kabel/test/runtime/fn_absent_block.out similarity index 100% rename from kabel/test/runtime/fn_absent_block.out rename to crates/kabel/test/runtime/fn_absent_block.out diff --git a/kabel/test/runtime/if_statement.kab b/crates/kabel/test/runtime/if_statement.kab similarity index 100% rename from kabel/test/runtime/if_statement.kab rename to crates/kabel/test/runtime/if_statement.kab diff --git a/kabel/test/runtime/if_statement.out b/crates/kabel/test/runtime/if_statement.out similarity index 100% rename from kabel/test/runtime/if_statement.out rename to crates/kabel/test/runtime/if_statement.out diff --git a/kabel/test/runtime/logic.kab b/crates/kabel/test/runtime/logic.kab similarity index 100% rename from kabel/test/runtime/logic.kab rename to crates/kabel/test/runtime/logic.kab diff --git a/kabel/test/runtime/logic.out b/crates/kabel/test/runtime/logic.out similarity index 100% rename from kabel/test/runtime/logic.out rename to crates/kabel/test/runtime/logic.out diff --git a/kabel/test/runtime/max.kab b/crates/kabel/test/runtime/max.kab similarity index 100% rename from kabel/test/runtime/max.kab rename to crates/kabel/test/runtime/max.kab diff --git a/kabel/test/runtime/max.out b/crates/kabel/test/runtime/max.out similarity index 100% rename from kabel/test/runtime/max.out rename to crates/kabel/test/runtime/max.out diff --git a/kabel/test/runtime/recursive_fib.kab b/crates/kabel/test/runtime/recursive_fib.kab similarity index 100% rename from kabel/test/runtime/recursive_fib.kab rename to crates/kabel/test/runtime/recursive_fib.kab diff --git a/kabel/test/runtime/recursive_fib.out b/crates/kabel/test/runtime/recursive_fib.out similarity index 100% rename from kabel/test/runtime/recursive_fib.out rename to crates/kabel/test/runtime/recursive_fib.out diff --git a/kabel/test/runtime/variable.kab b/crates/kabel/test/runtime/variable.kab similarity index 100% rename from kabel/test/runtime/variable.kab rename to crates/kabel/test/runtime/variable.kab diff --git a/kabel/test/runtime/variable.out b/crates/kabel/test/runtime/variable.out similarity index 100% rename from kabel/test/runtime/variable.out rename to crates/kabel/test/runtime/variable.out diff --git a/kabel/test/syntax/assignment.kab b/crates/kabel/test/syntax/assignment.kab similarity index 100% rename from kabel/test/syntax/assignment.kab rename to crates/kabel/test/syntax/assignment.kab diff --git a/kabel/test/syntax/assignment.out b/crates/kabel/test/syntax/assignment.out similarity index 100% rename from kabel/test/syntax/assignment.out rename to crates/kabel/test/syntax/assignment.out diff --git a/kabel/test/syntax/function.kab b/crates/kabel/test/syntax/function.kab similarity index 100% rename from kabel/test/syntax/function.kab rename to crates/kabel/test/syntax/function.kab diff --git a/kabel/test/syntax/function.out b/crates/kabel/test/syntax/function.out similarity index 100% rename from kabel/test/syntax/function.out rename to crates/kabel/test/syntax/function.out diff --git a/kabel/test/syntax/if_else.kab b/crates/kabel/test/syntax/if_else.kab similarity index 100% rename from kabel/test/syntax/if_else.kab rename to crates/kabel/test/syntax/if_else.kab diff --git a/kabel/test/syntax/if_else.out b/crates/kabel/test/syntax/if_else.out similarity index 100% rename from kabel/test/syntax/if_else.out rename to crates/kabel/test/syntax/if_else.out diff --git a/kabel/test/syntax/no_semicolon.kab b/crates/kabel/test/syntax/no_semicolon.kab similarity index 100% rename from kabel/test/syntax/no_semicolon.kab rename to crates/kabel/test/syntax/no_semicolon.kab diff --git a/kabel/test/syntax/no_semicolon.out b/crates/kabel/test/syntax/no_semicolon.out similarity index 100% rename from kabel/test/syntax/no_semicolon.out rename to crates/kabel/test/syntax/no_semicolon.out diff --git a/kabel/tmp.kab b/crates/kabel/tmp.kab similarity index 100% rename from kabel/tmp.kab rename to crates/kabel/tmp.kab diff --git a/savefile_decoder/Cargo.toml b/crates/savefile-decoder/Cargo.toml similarity index 61% rename from savefile_decoder/Cargo.toml rename to crates/savefile-decoder/Cargo.toml index c4acba4d26008f1850cccb83a09f73e7f2c0387d..51e973d6b825f7bdc29d0a12a0ca045b0866f88f 100644 --- a/savefile_decoder/Cargo.toml +++ b/crates/savefile-decoder/Cargo.toml @@ -1,9 +1,9 @@ [package] -name = "savefile_decoder" +name = "starkingdoms-savefile-decoder" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" } \ No newline at end of file +starkingdoms-common = { path = "../common" } \ No newline at end of file diff --git a/savefile_decoder/src/main.rs b/crates/savefile-decoder/src/main.rs similarity index 100% rename from savefile_decoder/src/main.rs rename to crates/savefile-decoder/src/main.rs diff --git a/server/Cargo.lock b/crates/server/Cargo.lock similarity index 100% rename from server/Cargo.lock rename to crates/server/Cargo.lock diff --git a/server/Cargo.toml b/crates/server/Cargo.toml similarity index 88% rename from server/Cargo.toml rename to crates/server/Cargo.toml index 2aa241d407798fdf306f3e88c0aa33652735ed64..46bf0db4e1ec1315d247396b36777ac4c45dd2f2 100644 --- a/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -11,7 +11,7 @@ serde_json = "1" bevy_rapier2d = { git = "https://github.com/ghostlyzsh/bevy_rapier.git", features = ["serde-serialize"] } rand = "0.8.5" tracing-subscriber = "0.3" -starkingdoms-common = { version = "0.1", path = "../starkingdoms-common" } +starkingdoms-common = { version = "0.1", path = "../common" } jwt = "0.16" sha2 = "0.10" hmac = "0.12" diff --git a/server/Dockerfile b/crates/server/Dockerfile similarity index 100% rename from server/Dockerfile rename to crates/server/Dockerfile diff --git a/server/config.toml b/crates/server/config.toml similarity index 100% rename from server/config.toml rename to crates/server/config.toml diff --git a/server/parts.toml b/crates/server/parts.toml similarity index 100% rename from server/parts.toml rename to crates/server/parts.toml diff --git a/server/planets.toml b/crates/server/planets.toml similarity index 100% rename from server/planets.toml rename to crates/server/planets.toml diff --git a/server/src/config.rs b/crates/server/src/config.rs similarity index 100% rename from server/src/config.rs rename to crates/server/src/config.rs diff --git a/server/src/crafting/components.rs b/crates/server/src/crafting/components.rs similarity index 100% rename from server/src/crafting/components.rs rename to crates/server/src/crafting/components.rs diff --git a/server/src/crafting/mod.rs b/crates/server/src/crafting/mod.rs similarity index 100% rename from server/src/crafting/mod.rs rename to crates/server/src/crafting/mod.rs diff --git a/server/src/macros.rs b/crates/server/src/macros.rs similarity index 100% rename from server/src/macros.rs rename to crates/server/src/macros.rs diff --git a/server/src/main.rs b/crates/server/src/main.rs similarity index 100% rename from server/src/main.rs rename to crates/server/src/main.rs diff --git a/server/src/mathutil.rs b/crates/server/src/mathutil.rs similarity index 100% rename from server/src/mathutil.rs rename to crates/server/src/mathutil.rs diff --git a/server/src/module/component.rs b/crates/server/src/module/component.rs similarity index 100% rename from server/src/module/component.rs rename to crates/server/src/module/component.rs diff --git a/server/src/module/mod.rs b/crates/server/src/module/mod.rs similarity index 100% rename from server/src/module/mod.rs rename to crates/server/src/module/mod.rs diff --git a/server/src/module/save.rs b/crates/server/src/module/save.rs similarity index 100% rename from server/src/module/save.rs rename to crates/server/src/module/save.rs diff --git a/server/src/module/thruster.rs b/crates/server/src/module/thruster.rs similarity index 100% rename from server/src/module/thruster.rs rename to crates/server/src/module/thruster.rs diff --git a/server/src/packet.rs b/crates/server/src/packet.rs similarity index 100% rename from server/src/packet.rs rename to crates/server/src/packet.rs diff --git a/server/src/planet.rs b/crates/server/src/planet.rs similarity index 100% rename from server/src/planet.rs rename to crates/server/src/planet.rs diff --git a/server/src/player/client_login.rs b/crates/server/src/player/client_login.rs similarity index 100% rename from server/src/player/client_login.rs rename to crates/server/src/player/client_login.rs diff --git a/server/src/player/component.rs b/crates/server/src/player/component.rs similarity index 100% rename from server/src/player/component.rs rename to crates/server/src/player/component.rs diff --git a/server/src/player/mod.rs b/crates/server/src/player/mod.rs similarity index 100% rename from server/src/player/mod.rs rename to crates/server/src/player/mod.rs diff --git a/server/src/player/packet.rs b/crates/server/src/player/packet.rs similarity index 100% rename from server/src/player/packet.rs rename to crates/server/src/player/packet.rs diff --git a/server/src/player/player_mouse_input.rs b/crates/server/src/player/player_mouse_input.rs similarity index 100% rename from server/src/player/player_mouse_input.rs rename to crates/server/src/player/player_mouse_input.rs diff --git a/server/src/player/request_save.rs b/crates/server/src/player/request_save.rs similarity index 100% rename from server/src/player/request_save.rs rename to crates/server/src/player/request_save.rs diff --git a/server/src/player/send_message.rs b/crates/server/src/player/send_message.rs similarity index 100% rename from server/src/player/send_message.rs rename to crates/server/src/player/send_message.rs diff --git a/server/src/ws.rs b/crates/server/src/ws.rs similarity index 100% rename from server/src/ws.rs rename to crates/server/src/ws.rs diff --git a/crates/xtask/Cargo.toml b/crates/xtask/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..9716cf764ead9314fd168dae282ca08218a79f4f --- /dev/null +++ b/crates/xtask/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "xtask" +version = "0.1.0" +edition = "2021" + +[dependencies] +wasm-pack = "0.13" +colored = "2" +anyhow = "1" +notify = "7" +tiny_http = "0.12" \ No newline at end of file diff --git a/crates/xtask/src/main.rs b/crates/xtask/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..be4059bd0e461cdf888697b685b75f22dbee2d51 --- /dev/null +++ b/crates/xtask/src/main.rs @@ -0,0 +1,170 @@ +use std::env::{args, var}; +use std::error::Error; +use std::fs; +use std::io::Read; +use std::net::{SocketAddr, TcpListener, TcpStream}; +use std::path::{Path, PathBuf}; +use std::process::{Command, exit}; +use std::sync::mpsc; +use std::sync::mpsc::TryRecvError; +use std::thread::sleep; +use std::time::Duration; +use colored::Colorize; +use notify::{Event, EventKind, RecursiveMode, Watcher}; +use tiny_http::Server; +use wasm_pack::command::build::{BuildOptions, Target}; +use wasm_pack::command::run_wasm_pack; +use wasm_pack::progressbar::LogLevel; + +fn workspace_dir() -> PathBuf { + let output = std::process::Command::new(env!("CARGO")) + .arg("locate-project") + .arg("--workspace") + .arg("--message-format=plain") + .output() + .unwrap() + .stdout; + let cargo_path = Path::new(std::str::from_utf8(&output).unwrap().trim()); + cargo_path.parent().unwrap().to_path_buf() +} + +fn build_client() -> anyhow::Result<()> { + let cli = wasm_pack::Cli { + cmd: wasm_pack::command::Command::Build(BuildOptions { + path: Some(workspace_dir().join("crates/client")), + scope: None, + mode: Default::default(), + disable_dts: false, + weak_refs: false, + reference_types: false, + target: Target::Web, + debug: false, + dev: false, + release: false, + profiling: false, + out_dir: "pkg".to_string(), + out_name: None, + no_pack: false, + no_opt: true, + extra_options: vec![], + }), + verbosity: 0, + quiet: true, + log_level: LogLevel::Error, + }; + run_wasm_pack(cli.cmd) +} + +fn try_build_client() -> bool { + match build_client() { + Ok(_) => { + println!("{} -- Client package built successfully", "✓ Success".green().bold()); + true + }, + Err(e) => { + eprintln!("{} -- Client package failed to build: {}", "✗ Failed".red().bold(), e); + false + } + } +} + +fn start_server() { + let server = Server::http(var("BIND").unwrap_or("[::]:8000".to_string())).unwrap(); + for req in server.incoming_requests() { + let mut path = Path::new(req.url()); + if path == Path::new("/") { + path = Path::new("/index.html"); + } + + let path = path.strip_prefix(Path::new("/")).unwrap(); + + let full_path = workspace_dir().join("crates/client").join(path); + + let content = match fs::read(full_path) { + Ok(r) => r, + Err(_) => { continue; } + }; + + + } +} + +fn main() { + let mut args = args(); + let subcommand = args.nth(1).unwrap(); + + match subcommand.as_str() { + "client" => { + if !try_build_client() { + exit(1); + } + }, + "watch" | "serve" => { + let serve = subcommand == "serve"; + + if serve { + std::thread::spawn(start_server); + } + + try_build_client(); + let (tx, rx) = mpsc::channel::>(); + + // Use recommended_watcher() to automatically select the best implementation + // for your platform. The `EventHandler` passed to this constructor can be a + // closure, a `std::sync::mpsc::Sender`, a `crossbeam_channel::Sender`, or + // another type the trait is implemented for. + let mut watcher = notify::recommended_watcher(tx).unwrap(); + + // Add a path to be watched. All files and directories at that path and + // below will be monitored for changes. + watcher.watch(&workspace_dir().join("crates"), RecursiveMode::Recursive).unwrap(); + println!("{}", "[Watch] 🛈 Watching for file changes".blue().bold()); + // Block forever, printing out events as they come in + + let mut needs_rebuild = false; + + loop { + let res = rx.try_recv(); + + let res = match res { + Ok(r) => r, + Err(TryRecvError::Empty) => { + if needs_rebuild { + // wait 1s then check again, then rebuild + sleep(Duration::from_secs(1)); + if let Ok(r) = rx.try_recv() { + r + } else { + try_build_client(); + needs_rebuild = false; + + rx.recv().unwrap() + } + } else { + rx.recv().unwrap() + } + }, + Err(TryRecvError::Disconnected) => panic!("{:?}", TryRecvError::Disconnected) + }; + + match res { + Ok(event) => { + if let EventKind::Modify(_) = event.kind { + let mut has_non_generated_update = false; + for path in &event.paths { + if !path.to_str().unwrap().contains("client/pkg") && !path.to_str().unwrap().ends_with("~") { + needs_rebuild = true; + } + } + } + + }, + Err(e) => { + eprintln!("{} -- Error watching for files: {}", "[Watch] ✗ Error".red().bold(), e); + }, + } + } + }, + _ => panic!("unsupported command") + } +} diff --git a/docker/Dockerfile.build_env b/docker/Dockerfile.build_env deleted file mode 100644 index bf7857c9bfd67e152429cfdb52ca3f03ca5d1d50..0000000000000000000000000000000000000000 --- a/docker/Dockerfile.build_env +++ /dev/null @@ -1,12 +0,0 @@ -FROM rust:slim - -# Note that we add wget here -RUN apt-get update && apt-get install --yes libpq-dev wget build-essential git - -# Install sccache to greatly speedup builds in the CI -RUN wget https://github.com/mozilla/sccache/releases/download/v0.7.4/sccache-v0.7.4-x86_64-unknown-linux-musl.tar.gz \ - && tar xzf sccache-v0.7.4-x86_64-unknown-linux-musl.tar.gz \ - && mv sccache-v0.7.4-x86_64-unknown-linux-musl/sccache /usr/local/bin/sccache \ - && chmod +x /usr/local/bin/sccache - -RUN rustup self update && rustup update && rustup component add rustfmt && rustup component add clippy diff --git a/postgres.docker-compose.yml b/postgres.docker-compose.yml deleted file mode 100644 index 26f2ce45e4a12f98724b1cb7cb77bf82ac28c457..0000000000000000000000000000000000000000 --- a/postgres.docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: "3" -services: - hayyadb: - image: postgres - environment: - - POSTGRES_PASSWORD=postgres - - POSTGRES_USER=postgres - - POSTGRES_DB=stkapi - ports: - - 5432:5432 - volumes: - - db:/var/lib/postgresql/data - -volumes: - db: diff --git a/starkingdoms-backplane/.env b/starkingdoms-backplane/.env deleted file mode 100644 index 2cd864a26f4c9315f565eb39332070452cda99b9..0000000000000000000000000000000000000000 --- a/starkingdoms-backplane/.env +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL=postgres://postgres:postgres@localhost/stkapi \ No newline at end of file diff --git a/starkingdoms-client-js/.gitignore b/starkingdoms-client-js/.gitignore deleted file mode 100644 index a547bf36d8d11a4f89c59c144f24795749086dd1..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/starkingdoms-client-js/.prettierignore b/starkingdoms-client-js/.prettierignore deleted file mode 100644 index 1c3e3e34e99887e8628f2e2c3cf28404501db81d..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist -src/assets diff --git a/starkingdoms-client-js/.prettierrc b/starkingdoms-client-js/.prettierrc deleted file mode 100644 index be339da59a16228eecd71c33f4ea63b311dbde39..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": ["prettier-plugin-svelte"], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }], - "htmlWhitespaceSensitivity": "ignore", - "bracketSameLine": true -} diff --git a/starkingdoms-client-js/Dockerfile b/starkingdoms-client-js/Dockerfile deleted file mode 100644 index a99cb9847b07426e3bac07a633df31eb4e7bed70..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM nginx:alpine - -COPY starkingdoms-client/dist /usr/share/nginx/html \ No newline at end of file diff --git a/starkingdoms-client-js/index.html b/starkingdoms-client-js/index.html deleted file mode 100644 index 3b2f1559927eeb2e528152fe1bc5873fd99460b4..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/login/index.html b/starkingdoms-client-js/login/index.html deleted file mode 100644 index eef60b7a45041cbc52ac99cc240b2ff400c9243a..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/login/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/package.json b/starkingdoms-client-js/package.json deleted file mode 100644 index cce4a870c3ed112e6ee6ee2ded30fc9a606b53a0..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "starkingdoms-client", - "private": true, - "version": "0.1.0-alpha1", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json" - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@tsconfig/svelte": "^5.0.2", - "@types/debug": "^4.1.12", - "@types/node": "^20.10.0", - "autoprefixer": "^10.4.16", - "postcss": "^8.4.31", - "prettier": "^3.1.0", - "prettier-plugin-svelte": "^3.1.2", - "sass": "^1.69.5", - "svelte": "^4.2.8", - "svelte-check": "^3.6.2", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "vite": "^5.4.8" - }, - "dependencies": { - "@msgpack/msgpack": "^3.0.0-beta2", - "debug": "^4.3.4", - "pixi.js": "^7.3.2" - } -} diff --git a/starkingdoms-client-js/play/index.html b/starkingdoms-client-js/play/index.html deleted file mode 100644 index 9c33256a52872b3da7746364d2a8664ba970d67e..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/play/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/public/favicon.ico b/starkingdoms-client-js/public/favicon.ico deleted file mode 100644 index bdec274dffb8bb1b5c4a1fa7e3fb04cc85ebda0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmah}OKTHR6uwiXDM4Z=Vi%#%MIX`!6iT7#!nQL>W)dPn5`%#dvoSP;n2>kUjf$J> zrMUAa_!BHjcP`zyXg7lBLU7~4f<1oUZElDlIOWWpo^!wNyrYzbzhF?|y`T=SD|K5b zbq4|!G*@~YO2PI%a3%WxiC4GVRmo&hg~Q<+p69*JWHL{x)#|NAqoHUsG65NXb~+tx zuh;9U-EPN$`%d=G z^$*h9<_Im!P1J=xfJE^~7yGBfj4l)A+CTg`VBkE3hTYPHS>gTVsv ztTF54x}I!q9?A6dci?0!}#sPkN2J|5!?hh_birKMM}yTW?X z7k$z4wxhB#9Fg9%n#gW zu&)~5dU)|Nd`8a`x)5s&o>T4;cMAA8cZ_!W``0tc!QJH!W0$MkY3??6oOjG~a#N|N T76b~)e;?e%4~@qBxTe$}P#c}( diff --git a/starkingdoms-client-js/shipeditor/index.html b/starkingdoms-client-js/shipeditor/index.html deleted file mode 100644 index 975d1329d84189900666300bbfc3312b01e8cc24..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/shipeditor/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/signup/index.html b/starkingdoms-client-js/signup/index.html deleted file mode 100644 index dcfc5ef881ce25b99cdfe556f96c885042b587e8..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/signup/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/src/assets/autoplr_cfg.svg b/starkingdoms-client-js/src/assets/autoplr_cfg.svg deleted file mode 100644 index 518e4a9339bea23a18aaed4ce3dc1dbdd77b5fe8..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/autoplr_cfg.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/autoplr_error.svg b/starkingdoms-client-js/src/assets/autoplr_error.svg deleted file mode 100644 index 5727335d473aee2e7a8a0ba2cf4872643cb37d09..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/autoplr_error.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/autoplr_on.svg b/starkingdoms-client-js/src/assets/autoplr_on.svg deleted file mode 100644 index fbf864759e689db1c19180fe270f7c9bf28e044e..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/autoplr_on.svg +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/cargo_off.svg b/starkingdoms-client-js/src/assets/cargo_off.svg deleted file mode 100644 index 3adeab83203ae8ee73024dfc963e94d1b797c683..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/cargo_off.svg +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/cargo_on.svg b/starkingdoms-client-js/src/assets/cargo_on.svg deleted file mode 100644 index c758d429db2338da096ebafc8a49961e79d67f0e..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/cargo_on.svg +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/earth.svg b/starkingdoms-client-js/src/assets/earth.svg deleted file mode 100644 index 11dbbf41114f020348b2d42ccb1a96e9858b39db..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/earth.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/earth_icon.svg b/starkingdoms-client-js/src/assets/earth_icon.svg deleted file mode 100644 index fb339e77989c7dcee5fcbf934648cab9aed0a5fe..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/earth_icon.svg +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/ecothruster_on.svg b/starkingdoms-client-js/src/assets/ecothruster_on.svg deleted file mode 100644 index ce865c15aff78d6ec8d1673d97c52e7c68e98314..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/ecothruster_on.svg +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/editor_direction.svg b/starkingdoms-client-js/src/assets/editor_direction.svg deleted file mode 100644 index 8ee9e39a48a6bcd20d06375c9e65bec250271684..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/editor_direction.svg +++ /dev/null @@ -1,470 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/hearty.svg b/starkingdoms-client-js/src/assets/hearty.svg deleted file mode 100644 index 895220915275cb63e2ce7ad4ddfecf136e7aa4dc..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/hearty.svg +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/hearty_ferris.svg b/starkingdoms-client-js/src/assets/hearty_ferris.svg deleted file mode 100644 index 05af7631d6b5fca1cca27a81093ad506446fe979..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/hearty_ferris.svg +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/hearty_party.svg b/starkingdoms-client-js/src/assets/hearty_party.svg deleted file mode 100644 index 87dc174062870dd3c081b94f2decf77b0bae65e3..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/hearty_party.svg +++ /dev/null @@ -1,350 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/hub_off.svg b/starkingdoms-client-js/src/assets/hub_off.svg deleted file mode 100644 index 20b4eb7b5f5ea6a9f9269e88080941be4161f9ef..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/hub_off.svg +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/hub_on.svg b/starkingdoms-client-js/src/assets/hub_on.svg deleted file mode 100644 index 77a2fc9fa8f12b1bff6cab9f85e2caa9cfd2ba97..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/hub_on.svg +++ /dev/null @@ -1,396 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/landingleg.svg b/starkingdoms-client-js/src/assets/landingleg.svg deleted file mode 100644 index 633703c822148e64eb2702d3aeb6753155e38348..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/landingleg.svg +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/landingthruster_off.svg b/starkingdoms-client-js/src/assets/landingthruster_off.svg deleted file mode 100644 index fa11af4109d1528ed4376cec906d0e3e8c711625..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/landingthruster_off.svg +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/landingthruster_on.svg b/starkingdoms-client-js/src/assets/landingthruster_on.svg deleted file mode 100644 index 64a3b3790078c0b2848d9c53fdf4ec8770ab169b..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/landingthruster_on.svg +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/mars.svg b/starkingdoms-client-js/src/assets/mars.svg deleted file mode 100644 index 50618d6ba40a28f3ffded9de25aac6161789baa2..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/mars.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/mars_icon.svg b/starkingdoms-client-js/src/assets/mars_icon.svg deleted file mode 100644 index 4d288eb2e4d53e7b2826b9418a670c4f0c19912e..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/mars_icon.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/missing.svg b/starkingdoms-client-js/src/assets/missing.svg deleted file mode 100644 index c2b51e914e9da248c23f83a99e73652cd0809e3c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/missing.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/moon.svg b/starkingdoms-client-js/src/assets/moon.svg deleted file mode 100644 index 0944b5a1b7b87ba6f4d939d3bb973ea5500b9ac3..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/moon.svg +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/moon_icon.svg b/starkingdoms-client-js/src/assets/moon_icon.svg deleted file mode 100644 index 77f1a5a7de723a467bb7266434224add19766773..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/moon_icon.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/powerhub_off.svg b/starkingdoms-client-js/src/assets/powerhub_off.svg deleted file mode 100644 index cafda58f0f0892a216f898918b89ec7cce46d48c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/powerhub_off.svg +++ /dev/null @@ -1,540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/powerhub_on.svg b/starkingdoms-client-js/src/assets/powerhub_on.svg deleted file mode 100644 index 7ed9e5bbff1c9699ee40d992f14f473706985bce..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/powerhub_on.svg +++ /dev/null @@ -1,587 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/starfield.svg b/starkingdoms-client-js/src/assets/starfield.svg deleted file mode 100644 index 408597e3f85482c4ca6216db898e3eb447b8130d..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/starfield.svg +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/starfield_dim.svg b/starkingdoms-client-js/src/assets/starfield_dim.svg deleted file mode 100644 index 4a1155f42c1d0512bfb353a5aa63542de82cc493..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/starfield_dim.svg +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/starfield_transp.svg b/starkingdoms-client-js/src/assets/starfield_transp.svg deleted file mode 100644 index 1ebad5478766586785b0b74ef2bfca05234c4ca8..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/starfield_transp.svg +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/sun.svg b/starkingdoms-client-js/src/assets/sun.svg deleted file mode 100644 index 730172c343042372cabd3fcb3135a1531340daf4..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/sun.svg +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/sun_rings.svg b/starkingdoms-client-js/src/assets/sun_rings.svg deleted file mode 100644 index 2c4a6611342808e350db7030c892154145f09074..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/sun_rings.svg +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/superthruster_off.svg b/starkingdoms-client-js/src/assets/superthruster_off.svg deleted file mode 100644 index f3f61a59a31c7862b00a76df95afe07ea8ce6e5c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/superthruster_off.svg +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/superthruster_on.svg b/starkingdoms-client-js/src/assets/superthruster_on.svg deleted file mode 100644 index dc71420ec2547b959943aa3d4aea3d5dad0f134c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/superthruster_on.svg +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/thruster_off.svg b/starkingdoms-client-js/src/assets/thruster_off.svg deleted file mode 100644 index b7fba0f44e4e7af0bdbcbbbd98921638186acf38..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/thruster_off.svg +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/thruster_on.svg b/starkingdoms-client-js/src/assets/thruster_on.svg deleted file mode 100644 index aeb292daf86f337bccd84b4e9b18c6d8841b4bfe..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/thruster_on.svg +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/assets/trackindicator.svg b/starkingdoms-client-js/src/assets/trackindicator.svg deleted file mode 100644 index 573bccdc053d409e619e3edad5c600d9f84ecf61..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/assets/trackindicator.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/components/Chatbox.svelte b/starkingdoms-client-js/src/components/Chatbox.svelte deleted file mode 100644 index c380ff946ea399c49eaa07219e449e62954b28fe..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/Chatbox.svelte +++ /dev/null @@ -1,100 +0,0 @@ - - - -
- {#each messages as message} -

{message.message}

- {/each} -
- -
diff --git a/starkingdoms-client-js/src/components/ui/Button.svelte b/starkingdoms-client-js/src/components/ui/Button.svelte deleted file mode 100644 index d11905adf7752f743fddee8aa7f75b65b95d0d5c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/Button.svelte +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/components/ui/Checkbox.svelte b/starkingdoms-client-js/src/components/ui/Checkbox.svelte deleted file mode 100644 index 48eb485881402edae504ec2d54613d15c579e6c4..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/Checkbox.svelte +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - diff --git a/starkingdoms-client-js/src/components/ui/Column.svelte b/starkingdoms-client-js/src/components/ui/Column.svelte deleted file mode 100644 index 1532abfa41daa665b6741455e6e563fa3b26ec63..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/Column.svelte +++ /dev/null @@ -1,22 +0,0 @@ - - -
- -
- - diff --git a/starkingdoms-client-js/src/components/ui/ColumnTable.svelte b/starkingdoms-client-js/src/components/ui/ColumnTable.svelte deleted file mode 100644 index dfc3d96b59ed84a63b0b0e2f15bbe64b46d87a04..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/ColumnTable.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - -
- -
- - diff --git a/starkingdoms-client-js/src/components/ui/HorizontalGap.svelte b/starkingdoms-client-js/src/components/ui/HorizontalGap.svelte deleted file mode 100644 index 724ce8e4698c7641a62bb0b527a5b59b90170b39..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/HorizontalGap.svelte +++ /dev/null @@ -1,18 +0,0 @@ - - -
- -
- - diff --git a/starkingdoms-client-js/src/components/ui/PasswordInput.svelte b/starkingdoms-client-js/src/components/ui/PasswordInput.svelte deleted file mode 100644 index c34adbc718f2927ae46a76a298d3a345d956e13d..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/PasswordInput.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/components/ui/Popup.svelte b/starkingdoms-client-js/src/components/ui/Popup.svelte deleted file mode 100644 index a65dfd48f3b12107c5f8de141ceafccacddb6453..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/Popup.svelte +++ /dev/null @@ -1,216 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/components/ui/TextInput.svelte b/starkingdoms-client-js/src/components/ui/TextInput.svelte deleted file mode 100644 index d2d3bdf0df4e96056aa6016f14f6c190f42930a3..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/TextInput.svelte +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/components/ui/VerticalRule.svelte b/starkingdoms-client-js/src/components/ui/VerticalRule.svelte deleted file mode 100644 index 9e8adf2c3c8189823e1558518ddd7113ab6bb144..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/components/ui/VerticalRule.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - -
- - diff --git a/starkingdoms-client-js/src/config.json b/starkingdoms-client-js/src/config.json deleted file mode 100644 index d960119e0ebfb87efa06d51a682f2ee0bc670758..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "configSerial": 2024040503, - "backplaneBaseUrl": "https://backplane.starkingdoms.io", - "environments": [ - { - "name": "StarKingdoms", - "clientHubUrl": "wss://starkingdoms.io/hub", - "apiBaseUrl": "https://api.starkingdoms.io", - "isProduction": true, - "isDevelopment": false, - "isPrimary": true - }, - { - "name": "Local (Development)", - "clientHubUrl": "ws://localhost:3000/hub", - "apiBaseUrl": "http://localhost:8080", - "isProduction": false, - "isDevelopment": true - } - ] -} diff --git a/starkingdoms-client-js/src/config.ts b/starkingdoms-client-js/src/config.ts deleted file mode 100644 index 09d5c1a86320d7a5e15a9678806f255a0fe88762..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/config.ts +++ /dev/null @@ -1,53 +0,0 @@ -import createDebug from "debug"; -import CONFIG from "./config.json"; - -const logger = createDebug("config"); - -const CONFIG_URL = "https://configuration.starkingdoms.io"; - -export interface Config { - configSerial: number; - backplaneBaseUrl: string; - environments: Environment[]; -} - -export interface Environment { - name: string; - clientHubUrl: string; - apiBaseUrl: string; - isProduction: boolean; - isDevelopment: boolean; - isPrimary: boolean; -} - -async function fetchWithTimeout(resource: RequestInfo | URL, options = {}) { - // @ts-ignore - const { timeout = 8000 } = options; - - const controller = new AbortController(); - const id = setTimeout(() => controller.abort(), timeout); - - const response = await fetch(resource, { - ...options, - signal: controller.signal, - }); - clearTimeout(id); - - return response; -} - -export async function loadConfig(): Promise { - logger("loading configuration from " + CONFIG_URL); - try { - const response = await fetchWithTimeout(CONFIG_URL, { - timeout: 1000, - }); - return await response.json(); - } catch (e) { - logger(`error loading configuration: ${e}, using fallback`); - // @ts-ignore strong types are unhelpful here - return CONFIG; - } -} - -export const DEFAULT_CONFIG = CONFIG; diff --git a/starkingdoms-client-js/src/css/chat.scss b/starkingdoms-client-js/src/css/chat.scss deleted file mode 100644 index ac98e6bb91555fdb3aaab1c1821633f00a24f9da..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/chat.scss +++ /dev/null @@ -1,57 +0,0 @@ -@use "font"; - -.chat-container { - @extend .font-2; - - position: absolute; - top: 0.5em; - right: 0.5em; - width: 30vw; - height: min-content; - font-weight: 500; -} -.chat-container:hover { - opacity: 100%; -} -.chat-container > h1 { - margin: 2px 0 2px 0; -} -.chat-table { - height: 23vh; /* explain this? */ - display: block; - overflow: auto; - margin: 1em 0 1em 0; -} -.chat-box { - appearance: none; - background: transparent; - color: var(--text); - padding: 0.675em 1em; - border: 1px solid var(--links); - border-radius: 0.25rem; - cursor: text; - width: 100%; - max-width: 100%; -} -.chat-box:focus { - outline: none; - background-color: var(--links-ultratransparent); -} -.message { - padding-top: 0; - padding-bottom: 0; - margin-top: 1px; - margin-bottom: 1px; -} -.server-message { - color: #facb61; -} -.server-error { - color: #ff2222; -} -.global-message { - color: #4de640; -} -.direct-message { - color: #599fbd; -} diff --git a/starkingdoms-client-js/src/css/font.scss b/starkingdoms-client-js/src/css/font.scss deleted file mode 100644 index 2576124a8a5f4fceb9d29d9621b0974912908677..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/font.scss +++ /dev/null @@ -1,43 +0,0 @@ -:root { - --sans-serif-font-family: ui-sans-serif, system-ui, -apple-system, - BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", - sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji"; - --mono-font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; - - font-family: var(--sans-serif-font-family); - @extend .font-3; -} - -.mono { - font-family: var(--mono-font-family); -} - -.font-1 { - font-size: 0.75rem; - line-height: 1rem; -} -.font-2 { - font-size: 0.875rem; - line-height: 1.25rem; -} -.font-3 { - font-size: 1rem; - line-height: 1.5rem; -} -.font-4 { - font-size: 1.125rem; - line-height: 1.75rem; -} -.font-5 { - font-size: 1.25rem; - line-height: 1.75rem; -} - -h1 { - @extend .font-5; -} -h2 { - @extend .font-4; -} diff --git a/starkingdoms-client-js/src/css/footer.scss b/starkingdoms-client-js/src/css/footer.scss deleted file mode 100644 index ede4ee45d55f918c3961491a16a75dc9d896389a..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/footer.scss +++ /dev/null @@ -1,24 +0,0 @@ -@use "font"; - -%footer-common { - @extend .font-1; - position: absolute; - bottom: 0.5em; -} - -.footer-left { - @extend %footer-common; - left: 1em; -} - -.footer-right { - @extend %footer-common; - - right: 1em; -} -.footer-icon { - vertical-align: middle; - display: inline-block; - width: 1rem; - height: 1rem; -} diff --git a/starkingdoms-client-js/src/css/form.scss b/starkingdoms-client-js/src/css/form.scss deleted file mode 100644 index 69278952620698638b7131102be742fccc479c17..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/form.scss +++ /dev/null @@ -1,70 +0,0 @@ -@use "font"; - -.form { - input, - select { - margin-bottom: 0.75rem; - } - button { - margin-top: 0.5rem; - } -} - -%form-element-shared { - appearance: none; - background: transparent; - color: var(--text); - padding: 0.675em 1em; - border: 1px solid var(--links); - border-radius: 0.25rem; - cursor: text; - width: 100%; - max-width: 100%; -} - -.textentry { - @extend %form-element-shared; -} -.textentry:focus { - outline: none; - background-color: var(--links-ultratransparent); -} -.textentry-error { - border: 1px solid var(--error); -} - -.select { - @extend %form-element-shared; - position: relative; - border: 1px solid var(--links); - border-radius: 0.25em; - cursor: pointer; -} -.select::after { - content: ""; - width: 0.8em; - height: 0.5em; - background-color: var(--links); - clip-path: polygon(100% 0%, 0 0%, 50% 100%); -} - -%form-footer-shared { - @extend .font-2; - width: 100%; - display: block; - height: max-content; - margin-top: 1em; -} - -.account-info { - @extend %form-footer-shared; -} -.server-danger { - @extend %form-footer-shared; - color: var(--error); -} -.server-danger-icon { - height: 1.25rem; - vertical-align: middle; - display: inline-block; -} diff --git a/starkingdoms-client-js/src/css/game.scss b/starkingdoms-client-js/src/css/game.scss deleted file mode 100644 index fc5f2058326a2418144fcd1db8bf6171f8b84982..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/game.scss +++ /dev/null @@ -1,11 +0,0 @@ -.game { - width: 100vw; - height: 100vh; - margin: 0; - padding: 0; - position: fixed; - left: 0; - top: 0; - z-index: -1; - background: url("../assets/starfield.svg"); -} diff --git a/starkingdoms-client-js/src/css/globals.scss b/starkingdoms-client-js/src/css/globals.scss deleted file mode 100644 index 3126074bbc9cb978e663c1d1288ec68bc1b911b0..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/globals.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "font"; - -html { - box-sizing: border-box; -} -*, -*:before, -*:after { - box-sizing: inherit; -} - -body { - background-color: var(--bg); - color: var(--body); -} - -a { - color: var(--links); -} diff --git a/starkingdoms-client-js/src/css/grid.scss b/starkingdoms-client-js/src/css/grid.scss deleted file mode 100644 index 110c114f3b209306288efe05bb71746983c3f422..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/grid.scss +++ /dev/null @@ -1,18 +0,0 @@ -@keyframes bg-anim { - 0% { - background-position: 0 0; - } - 50% { - background-position: 12px 12px; - } - 100% { - background-position: 24px 24px; - } -} - -.bg-grid { - background-image: linear-gradient(to right, #80808012 1px, transparent 1px), - linear-gradient(to bottom, #80808012 1px, transparent 1px); - background-size: 24px 24px; - animation: bg-anim 1.5s linear infinite; -} diff --git a/starkingdoms-client-js/src/css/hud.scss b/starkingdoms-client-js/src/css/hud.scss deleted file mode 100644 index 5854734cd8bb3639e69ec1e59c452670db1583e2..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/hud.scss +++ /dev/null @@ -1,25 +0,0 @@ -.hud { - position: absolute; - bottom: 0.5em; - left: 0.5em; - width: calc(100% - 1em); -} - -#hud-content-wrapper { - width: min(100vw, 620px); - margin: 0 auto; -} - -#hud-content-wrapper > table { - width: 100%; - table-layout: fixed; -} - -#hud-content-wrapper td { - text-align: center; -} - -.hud-d { - margin-left: 5px; - margin-right: 5px; -} diff --git a/starkingdoms-client-js/src/css/json.scss b/starkingdoms-client-js/src/css/json.scss deleted file mode 100644 index a9046e3b35e5fa8c7a8d1e22b34af3c9e1c44066..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/json.scss +++ /dev/null @@ -1,21 +0,0 @@ -:root { - --ident: #75bfff; - --string: #ff7de9; - --literal: #86de74; - --indent-spacing: 16px; -} - -.json-ident { - color: var(--ident); -} -.json-string { - color: var(--string); -} -.json-literal { - color: var(--literal); -} -.json { - max-height: 200px; - display: block; - overflow: auto; -} diff --git a/starkingdoms-client-js/src/css/log.scss b/starkingdoms-client-js/src/css/log.scss deleted file mode 100644 index f807442814fb54fc012ffc1b7fde4f366b731d30..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/log.scss +++ /dev/null @@ -1,55 +0,0 @@ -.log-icon { - width: 16px; -} -.log-lalign { - text-align: left; -} -.log-item { - cursor: pointer; -} -.log-item:hover { - background-color: #4a4a4f; -} -.log { - border: none; - border-collapse: collapse; - display: block; - max-height: 200px; - overflow: auto; - width: 100%; - table-layout: fixed; -} -.log-selected { - background-color: #204e8a; - cursor: default; -} -.log-leaving { - color: var(--error); -} -.log-arriving { - color: var(--success); -} -.log > tbody > tr > td { - padding: 2px; -} -.log-hidden { - display: none; -} -#log_body { - width: 100%; -} -.log-container { - width: 350px; -} -.log-header { - padding: 5px; -} -.log-w240 { - width: 240px; -} -.log-w50 { - width: 50px; -} -.log-td { - padding: 5px; -} diff --git a/starkingdoms-client-js/src/css/style.scss b/starkingdoms-client-js/src/css/style.scss deleted file mode 100644 index 224c5be5dfa632c0b9f0977b286020bbb9d2888c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/style.scss +++ /dev/null @@ -1,10 +0,0 @@ -@import "globals.scss"; -@import "grid.scss"; -@import "footer.scss"; -@import "form.scss"; -@import "json.scss"; -@import "log.scss"; -@import "game.scss"; -@import "hud.scss"; -@import "chat.scss"; -@import "utils.scss"; diff --git a/starkingdoms-client-js/src/css/themes/catppuccin-mocha.scss b/starkingdoms-client-js/src/css/themes/catppuccin-mocha.scss deleted file mode 100644 index fae991c7a5fc4a675e47ae65d697e61a2bcfe28c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/themes/catppuccin-mocha.scss +++ /dev/null @@ -1,63 +0,0 @@ -:root { - --rosewater: 245, 224, 220; - --flamingo: 242, 205, 205; - --pink: 245, 194, 231; - --mauve: 203, 166, 247; - --red: 243, 139, 169; - --maroon: 235, 160, 172; - --peach: 250, 179, 135; - --yellow: 249, 226, 175; - --green: 166, 227, 161; - --teal: 148, 226, 213; - --sky: 137, 220, 235; - --sapphire: 116, 199, 236; - --blue: 137, 180, 250; - --lavender: 180, 190, 254; - --text: 205, 214, 244; - --subtext1: 186, 194, 222; - --subtext0: 166, 173, 200; - --overlay2: 147, 153, 178; - --overlay1: 127, 132, 156; - --overlay0: 108, 112, 134; - --surface2: 88, 91, 112; - --surface1: 69, 71, 90; - --surface0: 49, 50, 68; - --base: 30, 30, 46; - --mantle: 24, 24, 37; - --crust: 17, 17, 27; - --darkercrust: 12, 12, 22; - - /* Background colors */ - --bg: rgb(var(--base)); - --bg-secondary-half: rgb(var(--darkercrust)); - --bg-secondary-1: rgb(var(--crust)); - --bg-secondary-2: rgb(var(--mantle)); - - --surface-0: rgb(var(--surface0)); - --surface-1: rgb(var(--surface1)); - --surface-2: rgb(var(--surface2)); - - --overlay-0: rgb(var(--overlay0)); - --overlay-1: rgb(var(--overlay1)); - --overlay-2: rgb(var(--overlay2)); - - /* Typography */ - --body: rgb(var(--text)); - --headline: rgb(var(--text)); - --sub-headline: rgb(var(--subtext0)); - --label: rgb(var(--subtext0)); - --subtle: rgb(var(--overlay1)); - --links: rgb(var(--blue)); - --links-transparent: rgba(var(--blue), 0.35); - --links-semitransparent: rgba(var(--blue), 0.45); - --links-ultratransparent: rgba(var(--blue), 0.15); - --success: rgb(var(--green)); - --warning: rgb(var(--yellow)); - --error: rgb(var(--red)); - --error-transparent: rgba(var(--red), 0.35); - --tag: rgb(var(--blue)); - --pill: rgb(var(--blue)); - --sel-bg: rgba(var(--surface2), 0.4); - --cursor: rgb(var(--rosewater)); - --dm: rgb(var(--teal)); -} diff --git a/starkingdoms-client-js/src/css/utils.scss b/starkingdoms-client-js/src/css/utils.scss deleted file mode 100644 index f53d3e6ab98844fedb8ffb23b1043749b3c5ac8c..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/css/utils.scss +++ /dev/null @@ -1,4 +0,0 @@ -.hidden { - display: none; - visibility: hidden; -} diff --git a/starkingdoms-client-js/src/env.d.ts b/starkingdoms-client-js/src/env.d.ts deleted file mode 100644 index df42d3c25e33a597b4d1c859e7d447ad05b19ba2..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const APP_VERSION: string; -declare const COMMIT_HASH: string; diff --git a/starkingdoms-client-js/src/globals.ts b/starkingdoms-client-js/src/globals.ts deleted file mode 100644 index 743e89e55585ef7164f0ce992a7fb01eb62d3249..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/globals.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { ClientHub } from "./hub.ts"; -import { Part, Planet } from "./protocol.ts"; -import * as PIXI from "pixi.js"; - -export interface GlobalData { - client: ClientHub | null; - me: GlobalMe | null; - - players_map: Map; - inverse_players_map: Map; - - planets_map: Map; - - parts_map: Map; - - up: boolean; - down: boolean; - left: boolean; - right: boolean; - - rendering: GlobalRendering | null; - - saveEligible: boolean; - leaving: boolean; - scale: number; -} - -export interface GlobalRendering { - app: PIXI.Application; - player_text_map: Map; - planet_sprite_map: Map; - part_sprite_map: Map; - part_sprites_need_texture_change: number[]; - starfield: GlobalRenderingStarfield; - starfield_near: GlobalRenderingStarfield; - indicator_sprite_map: Map; -} - -export interface GlobalRenderingStarfield { - sprite: PIXI.TilingSprite; - off_x: number; - off_y: number; -} - -export interface GlobalMe { - username: string; - part_id: number; -} - -export const global: GlobalData = { - client: null, - me: null, - players_map: new Map(), - inverse_players_map: new Map(), - planets_map: new Map(), - parts_map: new Map(), - up: false, - down: false, - left: false, - right: false, - rendering: null, - saveEligible: false, - leaving: false, - scale: 1, -}; - -export function player(): Part | undefined { - if (global.me !== null) { - return global.parts_map.get(global.me!.part_id); - } else { - return undefined; - } -} diff --git a/starkingdoms-client-js/src/hub.ts b/starkingdoms-client-js/src/hub.ts deleted file mode 100644 index 59bb5c9d6bdebc00f0a4eb00cb31698e9a11fedc..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/hub.ts +++ /dev/null @@ -1,373 +0,0 @@ -import createDebug from "debug"; -import type { - DespawnPartPacket, - EnergyUpdatePacket, - MessagePacket, - Packet, - PartPositionsPacket, - PlanetPositionsPacket, - PlayerLeavePacket, - PlayerListPacket, - SaveDataPacket, - SaveEligibilityPacket, - SpawnPartPacket, - SpawnPlayerPacket, -} from "./protocol.ts"; -import { MessageType, PacketType } from "./protocol.ts"; -import { appendPacket } from "./packet_ui.ts"; -import { global } from "./globals.ts"; -import { startRender } from "./rendering.ts"; -import { ButtonType } from "./protocol.ts"; -import type Chatbox from "./components/Chatbox.svelte"; -import { part_texture_url } from "./textures.js"; -import * as PIXI from "pixi.js"; - -const logger = createDebug("hub"); -let hud = { - x: 0, - y: 0, - next_poll: 0, -}; - -export interface ClientHub { - socket: WebSocket; -} - -export function sendPacket(client: ClientHub, packet: Packet) { - client.socket.send(JSON.stringify(packet)); - appendPacket(packet); -} - -export async function hub_connect( - url: string, - username: string, - chatbox: Chatbox, - velocity: HTMLSpanElement, - x_pos: HTMLSpanElement, - y_pos: HTMLSpanElement, - energy: HTMLDivElement, -): Promise { - logger("connecting to client hub at " + url); - - if (x_pos === undefined || y_pos === undefined) { - console.log("tsc shut up please"); - } - - let ws = new WebSocket(url); - - let energy_bar_max_width = energy.offsetWidth; - ws.onerror = (e) => { - console.error(e); - throw e; - }; - - ws.onopen = () => { - logger("connected to client hub, sending username and auth details"); - - let client: ClientHub = { - socket: ws, - }; - global.client = client; - - let save = window.localStorage.getItem("save"); - if (save !== null) { - save = save.trim(); - } - let packet: Packet = { - t: PacketType.ClientLogin, - c: { - username, - save, - jwt: window.localStorage.getItem("stk-token"), - }, - }; - sendPacket(client, packet); - - // input - document.onkeydown = (e) => { - // Exit if key is not registered. - // If adding a handler, add key sym to this array - let inputKeys = [ - "ArrowUp", - "ArrowDown", - "ArrowLeft", - "ArrowRight", - "w", - "s", - "a", - "d", - ]; - if (inputKeys.indexOf(e.key) == -1) return; - - if (e.key == "ArrowUp" || e.key == "w") { - global.up = true; - } - if (e.key == "ArrowDown" || e.key == "s") { - global.down = true; - } - if (e.key == "ArrowLeft" || e.key == "a") { - global.left = true; - } - if (e.key == "ArrowRight" || e.key == "d") { - global.right = true; - } - let input_packet: Packet = { - t: PacketType.PlayerInput, - c: { - up: global.up, - down: global.down, - left: global.left, - right: global.right, - }, - }; - sendPacket(client, input_packet); - }; - document.onkeyup = (e) => { - if (e.key == "ArrowUp" || e.key == "w") { - global.up = false; - } - if (e.key == "ArrowDown" || e.key == "s") { - global.down = false; - } - if (e.key == "ArrowLeft" || e.key == "a") { - global.left = false; - } - if (e.key == "ArrowRight" || e.key == "d") { - global.right = false; - } - let input_packet: Packet = { - t: PacketType.PlayerInput, - c: { - up: global.up, - down: global.down, - left: global.left, - right: global.right, - }, - }; - sendPacket(client, input_packet); - }; - document.onmousedown = (e) => { - if (global.me !== null) { - let me_transform = global.parts_map.get(global.me?.part_id)!.transform; - let x = - e.clientX / global.scale - - window.innerWidth / 2 / global.scale + - me_transform.x; - let y = - e.clientY / global.scale - - window.innerHeight / 2 / global.scale + - me_transform.y; - - console.log(x, y); - - let button: ButtonType; - if (e.button == 0) { - button = ButtonType.Left; - } else if (e.button == 1) { - button = ButtonType.Middle; - } else if (e.button == 2) { - button = ButtonType.Right; - } - let packet: Packet = { - t: PacketType.PlayerMouseInput, - c: { - x: x, - y: y, - button: button!, - released: false, - }, - }; - sendPacket(client, packet); - } - }; - document.onmouseup = (e) => { - if (global.me !== null) { - let me_transform = global.parts_map.get(global.me?.part_id)!.transform; - let x = - e.clientX / global.scale - - window.innerWidth / 2 / global.scale + - me_transform.x; - let y = - e.clientY / global.scale - - window.innerHeight / 2 / global.scale + - me_transform.y; - - let button: ButtonType; - if (e.button == 0) { - button = ButtonType.Left; - } else if (e.button == 1) { - button = ButtonType.Middle; - } else if (e.button == 2) { - button = ButtonType.Right; - } - let packet: Packet = { - t: PacketType.PlayerMouseInput, - c: { - x: x, - y: y, - button: button!, - released: true, - }, - }; - sendPacket(client, packet); - } - }; - - ws.onmessage = (e) => { - let packet: Packet = JSON.parse(e.data); - - appendPacket(packet); - - if (packet.t == PacketType.SpawnPlayer) { - let p = packet.c; - if (p.username === username) { - global.me = { - username: p.username, - part_id: p.id, - }; - logger(`client spawned (username=${p.username} part_id=${p.id})`); - startRender(); - } else { - global.players_map.set(p.id, p.username); - global.inverse_players_map.set(p.username, p.id); - logger(`player joined (username=${p.username} part_id=${p.id})`); - } - } else if (packet.t == PacketType.PlayerList) { - let p = packet.c; - for (let i = 0; i < p.players.length; i++) { - global.players_map.set(p.players[i][0], p.players[i][1]); - global.inverse_players_map.set(p.players[i][1], p.players[i][0]); - } - logger(`added ${p.players.length} existing players to player list`); - } else if (packet.t == PacketType.PlanetPositions) { - let p = packet.c; - for (let i = 0; i < p.planets.length; i++) { - global.planets_map.set(p.planets[i][0], p.planets[i][1]); - } - } else if (packet.t == PacketType.PartPositions) { - let p = packet.c; - for (let i = 0; i < p.parts.length; i++) { - let id = p.parts[i][0]; - let new_part = p.parts[i][1]; - - let old_part = global.parts_map.get(id); - if ( - old_part !== undefined && - (old_part.part_type !== new_part.part_type || - old_part.flags !== new_part.flags) - ) { - global.rendering?.part_sprites_need_texture_change.push(id); - } - - global.parts_map.set(id, new_part); - if (id === global.me?.part_id) { - if (hud.next_poll <= 0) { - velocity!.innerText = Math.round( - Math.sqrt( - Math.pow(Math.abs(new_part.transform.x / 10 - hud.x), 2) + - Math.pow(Math.abs(new_part.transform.y / 10 - hud.y), 2), - ), - ).toString(); - hud.next_poll = 30; - - hud.x = new_part.transform.x / 10; - hud.y = new_part.transform.y / 10; - - x_pos!.innerText = Math.round( - new_part.transform.x / 10, - ).toString(); - y_pos!.innerText = Math.round( - new_part.transform.y / 10, - ).toString(); - } - hud.next_poll--; - } - } - } else if (packet.t == PacketType.SpawnPart) { - let p = packet.c; - let id = p.id; - let part = p.part; - global.parts_map.set(id, part); - - logger(`spawn part`); - let part_sprite = PIXI.Sprite.from( - part_texture_url(part.part_type, p.part.flags.attached), - ); - global.rendering!.part_sprite_map.set(id, part_sprite); - global.rendering!.app.stage.addChild(part_sprite); - } else if (packet.t == PacketType.DespawnPart) { - let p = packet.c; - let id = p.id; - let part_sprite = global.rendering!.part_sprite_map.get(id)!; - - global.rendering!.app.stage.removeChild(part_sprite); - global.rendering!.part_sprite_map.delete(id); - global.parts_map.delete(id); - } else if (packet.t == PacketType.PlayerLeave) { - let p = packet.c; - let username = global.players_map.get(p.id)!; - global.inverse_players_map.delete(username); - global.players_map.delete(p.id); - logger(`player removed (id=${p.id})`); - } else if (packet.t == PacketType.Message) { - let p = packet.c; - logger( - `message type=${p.message_type} actor=${p.actor} content=${p.content}`, - ); - - if (p.message_type == MessageType.Server) { - chatbox.addMessage("server-message", `[SERVER] ${p.content}`); - } else if (p.message_type == MessageType.Chat) { - chatbox.addMessage("global-message", `${p.actor}: ${p.content}`); - } else if (p.message_type == MessageType.Direct) { - // actor is who sent the message. destination is not included in this packet - if (p.actor === global.me!.username) { - // skip (shown above) - } else { - chatbox.addMessage( - "direct-message", - `${p.actor} -> you: ${p.content}`, - ); - } - } else { - chatbox.addMessage("server-error", `${p.content}`); - } - } else if (packet.t == PacketType.SaveEligibility) { - let p = packet.c; - global.saveEligible = p.eligible; - console.log(global.saveEligible); - } else if (packet.t == PacketType.SaveData) { - let p = packet.c; - // request save - // receive save data from server - // upload save file to storage - // done - chatbox.addMessage( - "server-message", - "[Save][2/3] Received save data from server!", - ); - logger(`save file received save=${p.payload}`); - chatbox.addMessage( - "server-message", - "[Save][3/3] Uploading save file to storage...", - ); - window.localStorage.setItem("save", p.payload); - chatbox.addMessage("server-message", "[Save] Game saved successfully!"); - - if (global.leaving) { - window.location.href = "/"; - } - } else if (packet.t == PacketType.EnergyUpdate) { - let p = packet.c; - - let percent_energy = p.amount / p.max; - energy.style.width = energy_bar_max_width * percent_energy + "px"; - } else { - logger(`unrecognized packet type ${packet.t}`); - } - }; - - return client; - }; - return null; -} diff --git a/starkingdoms-client-js/src/icons/ChevronDown.svelte b/starkingdoms-client-js/src/icons/ChevronDown.svelte deleted file mode 100644 index 1b5d8d2f8bb3df572b1e92755eda730109a10615..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/icons/ChevronDown.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/icons/ChevronUp.svelte b/starkingdoms-client-js/src/icons/ChevronUp.svelte deleted file mode 100644 index e0368189445b2f2b740f47efc6c11726e5bfd014..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/icons/ChevronUp.svelte +++ /dev/null @@ -1,17 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/icons/HeartIcon.svelte b/starkingdoms-client-js/src/icons/HeartIcon.svelte deleted file mode 100644 index 58f3a5012dc71787da975239f850591fceb89714..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/icons/HeartIcon.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/icons/MovableIcon.svelte b/starkingdoms-client-js/src/icons/MovableIcon.svelte deleted file mode 100644 index ac9474dd9d4d6f6939c94e6fca6fb7116d853a44..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/icons/MovableIcon.svelte +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - diff --git a/starkingdoms-client-js/src/icons/WarningIcon.svelte b/starkingdoms-client-js/src/icons/WarningIcon.svelte deleted file mode 100644 index d9f5c101505e36248a09f0d75039167900cc2e68..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/icons/WarningIcon.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/starkingdoms-client-js/src/jwt.ts b/starkingdoms-client-js/src/jwt.ts deleted file mode 100644 index 3f14a2b5b1e71fdbb7cf2a6277f7511e7b9ee8a1..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/jwt.ts +++ /dev/null @@ -1,34 +0,0 @@ -// StarKingdoms.IO, a browser game about drifting through space -// Copyright (C) 2023 ghostly_zsh, TerraMaster85, core -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -export function parseJwt(token: string) { - let base64Url = token.split(".")[1]; - if (base64Url === undefined) { - return undefined; - } - let base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - let jsonPayload = decodeURIComponent( - window - .atob(base64) - .split("") - .map(function (c) { - return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join(""), - ); - - return JSON.parse(jsonPayload); -} diff --git a/starkingdoms-client-js/src/packet_ui.ts b/starkingdoms-client-js/src/packet_ui.ts deleted file mode 100644 index 80d7d3a37e1cacb00a62c3f97ee5ca7f1f8fc0d8..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/packet_ui.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { type Packet, type_direction } from "./protocol.ts"; -import createDebug from "debug"; - -const logger = createDebug("jsonview"); - -let selected = document.getElementById("explorer_selected")!; -let table = document.getElementById("explorer_json")!; - -export function show_packet( - maybe_packet: Packet | null, - sequence_number: number, -) { - logger(`selected packet ${sequence_number}`); - if (maybe_packet === null) { - selected.textContent = "Selected: --"; - table.innerHTML = ""; - return; - } - let packet = maybe_packet!; - let direction = type_direction(packet.t); - - selected.textContent = `Selected: #${sequence_number} ${direction} ${packet.t}`; - - // iterate over everything and calculate a max depth - let max_depth = depthOf(packet.c); - logger(`indent depth ${max_depth}`); - - // generate a tree - let tree = generateTree(packet.c, 0); - - logger(`generating tree of ${tree.length} items`); - - let table_html = ""; - - for (let i = 0; i < tree.length; i++) { - let [indent, key, value, is_text] = tree[i]; - table_html += ` - - ${key} - ${value} - - `; - } - - table.innerHTML = ` - - - - - - - ${table_html} - - `; -} - -function depthOf(object: any) { - let level = 0; - for (let key in object) { - if (!object.hasOwnProperty(key)) continue; - - if (typeof object[key] == "object") { - let depth = depthOf(object[key]) + 1; - level = Math.max(depth, level); - } - } - return level; -} - -function generateTree( - object: any, - level: number, -): [indent: number, key: string, value: string, value_string: boolean][] { - let items: [ - indent: number, - key: string, - value: string, - value_string: boolean, - ][] = []; - - for (let key in object) { - if (!object.hasOwnProperty(key)) continue; - - if (object[key] === null) { - items.push([level, key, "null", false]); - } else if (object[key] === undefined) { - items.push([level, key, "undefined", false]); - } else if (typeof object[key] === "object") { - if (Array.isArray(object[key])) { - if (object[key].length == 0) { - items.push([level, key + ":", "[]", false]); - } else { - items.push([level, key + ":", "", false]); - } - for (let i = 0; i < object[key].length; i++) { - items.push([level + 1, i.toString() + ":", "", false]); - items = items.concat(generateTree(object[key][i], level + 2)); - } - continue; - } - items.push([level, key + ":", "", false]); - items = items.concat(generateTree(object[key], level + 1)); - } else if (Array.isArray(object[key])) { - for (let i = 0; i < object[key].length; i++) { - items.push([level, i.toString() + ":", "", false]); - items = items.concat(generateTree(object[key][i], level)); - } - } else if (typeof object[key] === "string") { - items.push([level, key + ":", '"' + object[key] + '"', true]); - } else { - items.push([level, key + ":", object[key].toString(), false]); - } - } - - return items; -} - -export let packets: Packet[] = []; -export let selected_packet: number | null = null; -// @ts-ignore -let last_packet: Date | null = null; -// @ts-ignore -const log_body = document.getElementById("log_body")!; -// @ts-ignore - -const up_arrow = ` - - `; -// @ts-ignore -const down_arrow = ` - - `; - -export function selectPacket(id: number) { - if (selected_packet !== null) { - document - .getElementById("packet-" + selected_packet)! - .classList.remove("log-selected"); - document - .getElementById("packet-" + selected_packet)! - .classList.add("log-item"); - } - document.getElementById("packet-" + id)!.classList.add("log-selected"); - document.getElementById("packet-" + id)!.classList.remove("log-item"); - selected_packet = id; - show_packet(packets[id], id); -} - -export function appendPacket(packet: Packet) { - packets.push(packet); - return; - /* - let duration = "--"; - if (last_packet !== null) { - duration = (new Date().getTime() - last_packet!.getTime()).toString() + "ms"; - } - last_packet = new Date(); - - let index_deepcopy = packets.length + 1; - let index = index_deepcopy - 2; - - let tr = document.createElement("tr"); - tr.classList.add("log-item"); - tr.id = "packet-" + index; - - let td_idx = document.createElement("td"); - td_idx.innerHTML = index.toString(); - td_idx.classList.add("log-td"); - tr.appendChild(td_idx); - - let td_direction = document.createElement("td"); - td_direction.innerHTML = type_direction(packet.t) == Direction.Clientbound ? down_arrow : up_arrow; - td_direction.classList.add("log-td"); - tr.appendChild(td_direction); - - let td_type = document.createElement("td"); - td_type.innerHTML = packet.t; - td_type.classList.add("log-td"); - tr.appendChild(td_type); - - let td_ts = document.createElement("td"); - td_ts.innerHTML = duration; - td_ts.classList.add(type_direction(packet.t) == Direction.Clientbound ? "log-arriving" : "log-leaving") - td_ts.classList.add("log-td"); - tr.appendChild(td_ts); - - tr.onclick = () => { - selectPacket(index); - }; - - log_body.appendChild(tr); - - log_body.scrollTop = log_body.scrollHeight; - - */ -} diff --git a/starkingdoms-client-js/src/page_loaders/home.ts b/starkingdoms-client-js/src/page_loaders/home.ts deleted file mode 100644 index f32ae96bc36d2a85afd51c8be09f2f4ef55572b9..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/home.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/Home.svelte. -import Home from "../pages/Home.svelte"; - -const page = new Home({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/page_loaders/login.ts b/starkingdoms-client-js/src/page_loaders/login.ts deleted file mode 100644 index f8d832d55c8e5b6cb2492a44ab06bd97003769cc..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/login.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/Login.svelte. -import Login from "../pages/Login.svelte"; - -const page = new Login({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/page_loaders/play.ts b/starkingdoms-client-js/src/page_loaders/play.ts deleted file mode 100644 index 409d31f119373b6f18ce486c60fb888ab1273fef..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/play.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/Play.svelte. -import Play from "../pages/Play.svelte"; - -const page = new Play({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/page_loaders/shipeditor.ts b/starkingdoms-client-js/src/page_loaders/shipeditor.ts deleted file mode 100644 index 3f99cf90a0e7443a2b9fa94bcdf6dba551ef1347..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/shipeditor.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/ShipEditor.svelte. -import ShipEditor from "../pages/ShipEditor.svelte"; - -const page = new ShipEditor({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/page_loaders/signup.ts b/starkingdoms-client-js/src/page_loaders/signup.ts deleted file mode 100644 index 7ac02ec2b2630333256cb744790dce10be39a911..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/signup.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/Signup.svelte. -import Signup from "../pages/Signup.svelte"; - -const page = new Signup({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/page_loaders/uikit.ts b/starkingdoms-client-js/src/page_loaders/uikit.ts deleted file mode 100644 index c32cb65318b9181b0bf100de62af1805b8a8cb99..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/page_loaders/uikit.ts +++ /dev/null @@ -1,10 +0,0 @@ -// DO NOT CHANGE THIS FILE! -// It's only purpose is to initialize the Svelte component tree. -// Actual code is in src/pages/UiKit.svelte. -import UiKit from "../pages/UiKit.svelte"; - -const page = new UiKit({ - target: document.getElementById("mount")!, -}); - -export default page; diff --git a/starkingdoms-client-js/src/pages/Home.svelte b/starkingdoms-client-js/src/pages/Home.svelte deleted file mode 100644 index 8f8e09107e6f817e38c31c234d504350a9624f27..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/pages/Home.svelte +++ /dev/null @@ -1,153 +0,0 @@ - - - - - -

About

- StarKingdoms is a browser game about floating through space. -
- - -

Join Game

- -
- - - - - - - - -
- - -

Tools & Options

- - - {#if window.localStorage.getItem("save") !== null} - - - - {/if} -
-
-
- - - -
-
- - - StarKingdoms Client {APP_VERSION} ({COMMIT_HASH}) - - - Made with by the StarKingdoms team - diff --git a/starkingdoms-client-js/src/pages/Login.svelte b/starkingdoms-client-js/src/pages/Login.svelte deleted file mode 100644 index fd6be41a898aeb606e4b1d2d8deac5335cb183b4..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/pages/Login.svelte +++ /dev/null @@ -1,112 +0,0 @@ - - - -
- - - - - - - - - {#if error !== null} - - {/if} - - - -
- - - StarKingdoms Client {APP_VERSION} ({COMMIT_HASH}) - - - Made with by the StarKingdoms team - diff --git a/starkingdoms-client-js/src/pages/Play.svelte b/starkingdoms-client-js/src/pages/Play.svelte deleted file mode 100644 index d4b94dfcf591d90a7fcb20e8e79fe551f0bc1ad3..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/pages/Play.svelte +++ /dev/null @@ -1,220 +0,0 @@ - - -
- - - - - - - - - - - - -
#DirTypeDelta
-
-

Packet Explorer

-

Selected: --

-
-
- - - -
- - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - -
PositionVelocityTrack Angle
- - - -- - , - -- - - -- - - -- -
Energy: -
-
-
-
-
- - - StarKingdoms Client {APP_VERSION} ({COMMIT_HASH}) - - - Made with by the StarKingdoms team - diff --git a/starkingdoms-client-js/src/pages/ShipEditor.svelte b/starkingdoms-client-js/src/pages/ShipEditor.svelte deleted file mode 100644 index 6fff70bb9e830bb7f3a5ef42031b1e14626e0eee..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/pages/ShipEditor.svelte +++ /dev/null @@ -1,637 +0,0 @@ - - - - {#each part_counts.entries() as [type, counts]} - {#if type !== PartType.Hearty} - - {/if} - {/each} - {#if cantplace_reason !== null} - - - Cannot place: {cantplace_reason} - - {/if} - - - - - - - - - - { - return false; - }} - style="background-size: {grid_size}px {grid_size}px; background-position: {x}px {y}px;" - tabindex="1" - bind:this={canvas} /> - - - ({grid_x}, {grid_y}) {scale.toFixed(2)}x - - - - StarKingdoms Client {APP_VERSION} ({COMMIT_HASH}) - - - Made with by the StarKingdoms team - - - diff --git a/starkingdoms-client-js/src/pages/Signup.svelte b/starkingdoms-client-js/src/pages/Signup.svelte deleted file mode 100644 index f7c4efc955c7d1cba8ab010ae6bc3920c6f8515e..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/pages/Signup.svelte +++ /dev/null @@ -1,114 +0,0 @@ - - - -
- - - - - - - - - {#if error !== null} - - {/if} - - - -
- - - StarKingdoms Client {APP_VERSION} ({COMMIT_HASH}) - - - Made with by the StarKingdoms team - diff --git a/starkingdoms-client-js/src/pages/UiKit.svelte b/starkingdoms-client-js/src/pages/UiKit.svelte deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/starkingdoms-client-js/src/planet_colors.ts b/starkingdoms-client-js/src/planet_colors.ts deleted file mode 100644 index 7cb4aaa235a8218247c376bac2cb5a874731f7d5..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/planet_colors.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PlanetType } from "./protocol.ts"; - -export function planet_color(type: PlanetType): string { - if (type === PlanetType.Earth) { - return "limegreen"; - } else { - return "white"; - } -} diff --git a/starkingdoms-client-js/src/protocol.ts b/starkingdoms-client-js/src/protocol.ts deleted file mode 100644 index a2a5fd05b954a1b6dfd09b2932cc404e66b68831..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/protocol.ts +++ /dev/null @@ -1,190 +0,0 @@ -export interface ProtoTransform { - x: number; - y: number; - rot: number; -} -export enum PlanetType { - Sun = "Sun", - Mercury = "Mercury", - Venus = "Venus", - Earth = "Earth", - Moon = "Moon", - Mars = "Mars", - Jupiter = "Jupiter", - Saturn = "Saturn", - Uranus = "Uranus", - Neptune = "Neptune", - Pluto = "Pluto", -} -export enum PartType { - Hearty = "Hearty", - Cargo = "Cargo", - Hub = "Hub", - LandingThruster = "LandingThruster", - LandingThrusterSuspension = "LandingThrusterSuspension", -} -export enum ButtonType { - Left = "Left", - Middle = "Middle", - Right = "Right", -} -export interface Planet { - planet_type: PlanetType; - transform: ProtoTransform; - radius: number; -} -export interface Part { - part_type: PartType; - transform: ProtoTransform; - flags: PartFlags; -} -export interface PartFlags { - attached: boolean; -} -export interface ClientLoginPacket { - username: string; - save: string | null; - jwt: string | null; -} -export interface SpawnPlayerPacket { - id: number; - username: string; -} -export interface PlanetPositionsPacket { - planets: [number, Planet][]; -} -export interface PartPositionsPacket { - parts: [number, Part][]; -} -export interface SpawnPartPacket { - id: number; - part: Part; -} -export interface DespawnPartPacket { - id: number; -} -export interface PlayerInputPacket { - up: boolean; - down: boolean; - left: boolean; - right: boolean; -} -export interface PlayerMouseInputPacket { - x: number; - y: number; - released: boolean; - button: ButtonType; -} -export interface PlayerListPacket { - players: [number, string][]; -} -export interface PlayerLeavePacket { - id: number; -} -export interface SendMessagePacket { - target: string | null; - content: string; -} -export enum MessageType { - Server = "Server", - Error = "Error", - Chat = "Chat", - Direct = "Direct", -} -export interface MessagePacket { - message_type: MessageType; - actor: string; - content: string; -} -export interface RequestSavePacket { - old_save: string | null; -} -export interface SaveEligibilityPacket { - eligible: boolean; -} -export interface SaveDataPacket { - payload: string; -} -export interface EnergyUpdatePacket { - amount: number; - max: number; -} - -export enum PacketType { - // serverbound - ClientLogin = "ClientLogin", - SendMessage = "SendMessage", - PlayerInput = "PlayerInput", - PlayerMouseInput = "PlayerMouseInput", - RequestSave = "RequestSave", - // clientbound - SpawnPlayer = "SpawnPlayer", - PlayerList = "PlayerList", - PlanetPositions = "PlanetPositions", - PartPositions = "PartPositions", - SpawnPart = "SpawnPart", - DespawnPart = "DespawnPart", - PlayerLeave = "PlayerLeave", - Message = "Message", - SaveEligibility = "SaveEligibility", - SaveData = "SaveData", - EnergyUpdate = "EnergyUpdate", -} - -export interface Packet { - t: PacketType; - c: - | ClientLoginPacket - | SpawnPlayerPacket - | PlayerListPacket - | PlanetPositionsPacket - | PartPositionsPacket - | SpawnPartPacket - | DespawnPartPacket - | PlayerLeavePacket - | SendMessagePacket - | MessagePacket - | PlayerInputPacket - | PlayerMouseInputPacket - | RequestSavePacket - | SaveEligibilityPacket - | SaveDataPacket - | EnergyUpdatePacket; -} - -export const SERVERBOUND = [ - PacketType.ClientLogin, - PacketType.SendMessage, - PacketType.PlayerInput, - PacketType.PlayerMouseInput, - PacketType.RequestSave, -]; -export const CLIENTBOUND = [ - PacketType.SpawnPlayer, - PacketType.PlayerList, - PacketType.PlanetPositions, - PacketType.PartPositions, - PacketType.SpawnPart, - PacketType.DespawnPart, - PacketType.PlayerLeave, - PacketType.Message, - PacketType.SaveEligibility, - PacketType.SaveData, - PacketType.EnergyUpdate, -]; - -export enum Direction { - Serverbound = "Serverbound", - Clientbound = "Clientbound", - InvalidType = "InvalidType", -} - -export function type_direction(type: PacketType): Direction { - if (SERVERBOUND.includes(type)) { - return Direction.Serverbound; - } else if (CLIENTBOUND.includes(type)) { - return Direction.Clientbound; - } else { - return Direction.InvalidType; - } -} diff --git a/starkingdoms-client-js/src/rendering.ts b/starkingdoms-client-js/src/rendering.ts deleted file mode 100644 index f95d43f7676c1108465721522a0a5ae3e94639c1..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/rendering.ts +++ /dev/null @@ -1,271 +0,0 @@ -import * as PIXI from "pixi.js"; -import { global, player } from "./globals.ts"; -import { - part_texture_url, - planet_texture_url, - indicator_texture_url, -} from "./textures.ts"; -import tex_starfield from "./assets/starfield_dim.svg"; -import tex_starfield_transp from "./assets/starfield_transp.svg"; - -const PART_WIDTH = 50; -const PART_HEIGHT = 50; - -export function startRender() { - let app = new PIXI.Application({ - width: window.innerWidth, - height: window.innerHeight, - resizeTo: window, - hello: true, - antialias: true, - }); - - (globalThis as any).__PIXI_APP__ = app; // eslint-disable-line - - document - .getElementById("gamewindow")! - .appendChild(app.view); - (app.view).classList.add("game"); - (app.view).id = "game-canvas"; - document.getElementById("game-canvas")!.addEventListener("click", () => { - (app.view).focus(); - }); - - global.rendering = { - app: app, - player_text_map: new Map(), - planet_sprite_map: new Map(), - part_sprite_map: new Map(), - indicator_sprite_map: new Map(), - starfield: { - sprite: new PIXI.TilingSprite( - PIXI.Texture.from(tex_starfield), - //1024, - //1024, - ), - off_x: 0, - off_y: 0, - }, - starfield_near: { - sprite: new PIXI.TilingSprite( - PIXI.Texture.from(tex_starfield_transp), - //1024, - //1024, - ), - off_x: 0, - off_y: 0, - }, - part_sprites_need_texture_change: [], - }; - - // Main starfield - global.rendering!.app.stage.addChild(global.rendering!.starfield.sprite); - - // Near starfield - global.rendering!.app.stage.addChild(global.rendering!.starfield_near.sprite); - - app.ticker.add(() => { - if (player() === undefined) { - return; - } - - let width = window.innerWidth; - let height = window.innerHeight; - global.rendering!.app.stage.x = - -player()?.transform.x! * global.scale + width / 2; - global.rendering!.app.stage.y = - -player()?.transform.y! * global.scale + height / 2; - /*global.rendering!.app.stage.x = - -player()?.transform.x! + width / 2; - global.rendering!.app.stage.y = - -player()?.transform.y! + height / 2;*/ - global.rendering!.app.stage.scale.x = global.scale; - global.rendering!.app.stage.scale.y = global.scale; - - // TODO: refactor, make parallax configurable - - // Main starfield - const sprite_size_scale_basis = 3 / 4; - const sprite_size_px_basis = 512; // size of single tile - const sprite_size = - (sprite_size_px_basis * sprite_size_scale_basis) / global.scale; - global.rendering!.starfield.sprite.height = - window.innerHeight / global.scale + sprite_size; - global.rendering!.starfield.sprite.width = - window.innerWidth / global.scale + sprite_size; - - global.rendering!.starfield.off_x = - (player()?.transform.x! * sprite_size_scale_basis) % global.scale; - global.rendering!.starfield.off_y = - (player()?.transform.y! * sprite_size_scale_basis) % global.scale; - - global.rendering!.starfield.sprite.x = - Math.floor(player()?.transform.x! / sprite_size) * sprite_size - - global.rendering!.starfield.sprite.width / 2 + - sprite_size / 2; - global.rendering!.starfield.sprite.y = - Math.floor(player()?.transform.y! / sprite_size) * sprite_size - - global.rendering!.starfield.sprite.height / 2 + - sprite_size / 2; - - global.rendering!.starfield.sprite.tilePosition.x = - global.rendering!.starfield.off_x; - global.rendering!.starfield.sprite.tilePosition.y = - global.rendering!.starfield.off_y; - - // Near starfield - //const sprite_size_near = - // sprite_size_px_basis * (sprite_size_scale_basis * 2); - global.rendering!.starfield_near.sprite.height = - window.innerHeight / global.scale + 2 * sprite_size; - global.rendering!.starfield_near.sprite.width = - window.innerWidth / global.scale + 2 * sprite_size; - - global.rendering!.starfield_near.off_x = - //(player()?.transform.x!/2) % (sprite_size*2*global.scale); - (player()?.transform.x! / 2) % - (sprite_size_px_basis * (sprite_size_scale_basis * 2)); - global.rendering!.starfield_near.off_y = - //(player()?.transform.y!/2) % (sprite_size*2*global.scale); - (player()?.transform.y! / 2) % - (sprite_size_px_basis * (sprite_size_scale_basis * 2)); - - global.rendering!.starfield_near.sprite.x = - Math.floor(player()?.transform.x! / 2 / sprite_size) * 2 * sprite_size - - global.rendering!.starfield_near.sprite.width / 2 + - sprite_size; - global.rendering!.starfield_near.sprite.y = - Math.floor(player()?.transform.y! / 2 / sprite_size) * 2 * sprite_size - - global.rendering!.starfield_near.sprite.height / 2 + - sprite_size; - - global.rendering!.starfield_near.sprite.tilePosition.x = - global.rendering!.starfield_near.off_x; - global.rendering!.starfield_near.sprite.tilePosition.y = - global.rendering!.starfield_near.off_y; - - for (let [id, part] of global.parts_map) { - let part_sprite; - - if (global.rendering!.part_sprite_map.has(id)) { - part_sprite = global.rendering!.part_sprite_map.get(id)!; - if (global.rendering!.part_sprites_need_texture_change.includes(id)) { - // slow :( - part_sprite.texture = PIXI.Texture.from( - part_texture_url(part.part_type, part.flags.attached), - ); - } - } else { - part_sprite = PIXI.Sprite.from( - part_texture_url(part.part_type, part.flags.attached), - ); - global.rendering!.part_sprite_map.set(id, part_sprite); - global.rendering!.app.stage.addChild(part_sprite); - } - - part_sprite.anchor.set(0.5); - part_sprite.height = PART_HEIGHT; - part_sprite.width = PART_WIDTH; - part_sprite.x = part.transform.x; - part_sprite.y = part.transform.y; - part_sprite.rotation = part.transform.rot; - } - for (let [id, planet] of global.planets_map) { - let planet_sprite; - - if (global.rendering!.planet_sprite_map.has(id)) { - planet_sprite = global.rendering!.planet_sprite_map.get(id)!; - } else { - planet_sprite = PIXI.Sprite.from( - planet_texture_url(planet.planet_type), - ); - global.rendering!.planet_sprite_map.set(id, planet_sprite); - global.rendering!.app.stage.addChild(planet_sprite); - } - - planet_sprite.anchor.set(0.5); - planet_sprite.height = planet.radius * 2; - planet_sprite.width = planet.radius * 2; - planet_sprite.x = planet.transform.x; - planet_sprite.y = planet.transform.y; - planet_sprite.rotation = planet.transform.rot; - } - for (let [id, username] of global.players_map) { - let username_text; - if (global.rendering!.player_text_map.has(id)) { - username_text = global.rendering!.player_text_map.get(id)!; - } else { - username_text = new PIXI.Text(username); - username_text.alpha = 0.6; - username_text.style = new PIXI.TextStyle({ - fontFamily: "sans-serif", - fontSize: 27, - fill: "#ffffff", - }); - global.rendering!.player_text_map.set(id, username_text); - global.rendering!.app.stage.addChild(username_text); - } - let player_transform = global.parts_map.get(id)!.transform; - - username_text.anchor.set(0.5); - username_text.x = player_transform.x; - username_text.y = player_transform.y - 50; - } - let username_text; - if (global.rendering!.player_text_map.has(global.me!.part_id)) { - username_text = global.rendering!.player_text_map.get( - global.me!.part_id, - )!; - - // don't really know where else to put this - for (let [id, planet] of global.planets_map) { - let indicator_sprite; - - if (global.rendering!.indicator_sprite_map.has(id)) { - indicator_sprite = global.rendering!.indicator_sprite_map.get(id)!; - } else { - indicator_sprite = PIXI.Sprite.from( - indicator_texture_url(planet.planet_type), - ); - global.rendering!.indicator_sprite_map.set(id, indicator_sprite); - global.rendering!.app.stage.addChild(indicator_sprite); - } - - indicator_sprite.anchor.set(0.5); - indicator_sprite.height = 32 / global.scale; // undo zoom scale effect - indicator_sprite.width = 32 / global.scale; - - let player_transform = global.parts_map.get( - global.me!.part_id, - )!.transform; - let angle_to_planet = Math.atan2( - planet.transform.y - player_transform.y, - planet.transform.x - player_transform.x, - ); - let indicator_distance = height / 4 / global.scale; - indicator_sprite.x = - player_transform.x + Math.cos(angle_to_planet) * indicator_distance; - indicator_sprite.y = - player_transform.y + Math.sin(angle_to_planet) * indicator_distance; - indicator_sprite.rotation = angle_to_planet; - indicator_sprite.alpha = 0.5; - } - } else { - username_text = new PIXI.Text(global.me!.username); - username_text.alpha = 0.6; - username_text.style = new PIXI.TextStyle({ - fontFamily: "sans-serif", - fontSize: 27, - fill: "#ffffff", - stroke: "#000000", - strokeThickness: 2, - }); - global.rendering!.player_text_map.set(global.me!.part_id, username_text); - global.rendering!.app.stage.addChild(username_text); - } - let player_transform = global.parts_map.get(global.me!.part_id)!.transform; - username_text.anchor.set(0.5); - username_text.x = player_transform.x; - username_text.y = player_transform.y - 50; - }); -} diff --git a/starkingdoms-client-js/src/save.ts b/starkingdoms-client-js/src/save.ts deleted file mode 100644 index ab539c4cddd3357b8660c9b7d4ad9fdf26c9669b..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/save.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { decode, encode } from "@msgpack/msgpack"; - -function base64ToBytes(base64: string) { - const binString = atob(base64); - // @ts-ignore - return Uint8Array.from(binString, (m) => m.codePointAt(0)); -} - -function bytesToBase64(bytes: any) { - const binString = String.fromCodePoint(...bytes); - return btoa(binString); -} - -export function unpack_save(data: string): any { - console.log(decode(base64ToBytes(data))); - // @ts-ignore - return decode(decode(base64ToBytes(data))[0]); -} - -export function __pack_save_for_api(data: any): string { - console.log([encode(data), []]); - return bytesToBase64(encode([Array.from(encode(data)), []])); -} diff --git a/starkingdoms-client-js/src/textures.ts b/starkingdoms-client-js/src/textures.ts deleted file mode 100644 index 4db5786178cbc41c78393312746220c6126a6368..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/textures.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { PartType, PlanetType } from "./protocol.ts"; -import tex_sun from "./assets/sun.svg"; -import tex_earth from "./assets/earth.svg"; -import tex_moon from "./assets/moon.svg"; -import tex_mars from "./assets/mars.svg"; -import tex_earth_icon from "./assets/earth_icon.svg"; -import tex_moon_icon from "./assets/moon_icon.svg"; -import tex_mars_icon from "./assets/mars_icon.svg"; -import tex_hearty from "./assets/hearty.svg"; -import tex_cargo_off from "./assets/cargo_off.svg"; -import tex_cargo_on from "./assets/cargo_on.svg"; -import tex_hub_off from "./assets/hub_off.svg"; -import tex_hub_on from "./assets/hub_on.svg"; -import tex_landing_thruster_off from "./assets/landingthruster_off.svg"; -import tex_landing_thruster_on from "./assets/landingthruster_on.svg"; -import tex_landing_thruster_suspension from "./assets/landingleg.svg"; -import tex_missing from "./assets/missing.svg"; - -export function planet_texture_url(type: PlanetType): string { - if (type == PlanetType.Sun) { - return tex_sun; - } else if (type == PlanetType.Mercury) { - return tex_mars; - } else if (type == PlanetType.Venus) { - return tex_moon; - } else if (type == PlanetType.Earth) { - return tex_earth; - } else if (type == PlanetType.Moon) { - return tex_moon; - } else if (type == PlanetType.Mars) { - return tex_mars; - } else if (type == PlanetType.Jupiter) { - return tex_earth; - } else if (type == PlanetType.Saturn) { - return tex_sun; - } else if (type == PlanetType.Uranus) { - return tex_mars; - } else if (type == PlanetType.Neptune) { - return tex_moon; - } else if (type == PlanetType.Pluto) { - return tex_mars; - } - return tex_missing; -} -export function indicator_texture_url(type: PlanetType): string { - if (type == PlanetType.Earth) { - return tex_earth_icon; - } else if (type == PlanetType.Moon) { - return tex_moon_icon; - } else if (type == PlanetType.Mars) { - return tex_mars_icon; - } - return tex_missing; -} - -export function part_texture_url(type: PartType, attached: boolean): string { - if (type == PartType.Hearty) { - return tex_hearty; - } else if (type == PartType.Cargo) { - return attached ? tex_cargo_on : tex_cargo_off; - } else if (type == PartType.Hub) { - return attached ? tex_hub_on : tex_hub_off; - } else if (type == PartType.LandingThruster) { - return attached ? tex_landing_thruster_on : tex_landing_thruster_off; - } else if (type == PartType.LandingThrusterSuspension) { - return tex_landing_thruster_suspension; - } - return tex_missing; -} diff --git a/starkingdoms-client-js/src/vite-env.d.ts b/starkingdoms-client-js/src/vite-env.d.ts deleted file mode 100644 index 4078e7476a2eaf5705d327b5c9d459c234c01652..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/src/vite-env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/starkingdoms-client-js/svelte.config.js b/starkingdoms-client-js/svelte.config.js deleted file mode 100644 index de2ddd659cda10c8c8daa1868d4c941e68daf60b..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/svelte.config.js +++ /dev/null @@ -1,7 +0,0 @@ -import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; - -export default { - // Consult https://svelte.dev/docs#compile-time-svelte-preprocess - // for more information about preprocessors - preprocess: vitePreprocess(), -}; diff --git a/starkingdoms-client-js/tsconfig.json b/starkingdoms-client-js/tsconfig.json deleted file mode 100644 index 175b3a53ba3f5be5475918f3112200e12c72b246..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true, - "allowJs": true, - "checkJs": true, - "isolatedModules": true, - "allowSyntheticDefaultImports": true - }, - "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/starkingdoms-client-js/uikit/index.html b/starkingdoms-client-js/uikit/index.html deleted file mode 100644 index a7647d92ce6ecb791e0f13444c69c72d16fd50bc..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/uikit/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - StarKingdoms.IO - - -
- -
- - - - diff --git a/starkingdoms-client-js/vite.config.ts b/starkingdoms-client-js/vite.config.ts deleted file mode 100644 index 9f9f17e1885c6607c867a934f302c797581d92f2..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/vite.config.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { defineConfig } from "vite"; -import { resolve } from "path"; -import * as child from "child_process"; -//@ts-ignore -import autoprefixer from "autoprefixer"; -import { svelte } from "@sveltejs/vite-plugin-svelte"; - -const commitHash = child - .execSync("git describe --no-match --always --abbrev=8 --dirty") - .toString() - .trim(); - -export default defineConfig({ - plugins: [svelte()], - define: { - APP_VERSION: JSON.stringify(process.env.npm_package_version), - COMMIT_HASH: JSON.stringify(commitHash), - }, - build: { - target: ["chrome89", "edge89", "firefox89", "safari15"], - cssCodeSplit: false, - rollupOptions: { - input: { - main: resolve(__dirname, "index.html"), - play: resolve(__dirname, "play/index.html"), - signup: resolve(__dirname, "signup/index.html"), - login: resolve(__dirname, "login/index.html"), - shipeditor: resolve(__dirname, "shipeditor/index.html"), - uikit: resolve(__dirname, "uikit/index.html"), - }, - }, - }, - appType: "mpa", - css: { - postcss: { - plugins: [autoprefixer({})], - }, - }, -}); diff --git a/starkingdoms-client-js/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs b/starkingdoms-client-js/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs deleted file mode 100644 index 4a1eedc2e2e739c2dd63e2f2ffa3783c46cce8c7..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/vite.config.ts.timestamp-1722468930578-9a55b81119f46.mjs +++ /dev/null @@ -1,44 +0,0 @@ -// vite.config.ts -import { defineConfig } from "file:///home/ghostlyzsh/dev/starkingdoms.tk/starkingdoms-client/node_modules/vite/dist/node/index.js"; -import { resolve } from "path"; -import * as child from "child_process"; -import autoprefixer from "file:///home/ghostlyzsh/dev/starkingdoms.tk/starkingdoms-client/node_modules/autoprefixer/lib/autoprefixer.js"; -import { svelte } from "file:///home/ghostlyzsh/dev/starkingdoms.tk/starkingdoms-client/node_modules/@sveltejs/vite-plugin-svelte/src/index.js"; -var __vite_injected_original_dirname = - "/home/ghostlyzsh/dev/starkingdoms.tk/starkingdoms-client"; -var commitHash = child - .execSync("git describe --no-match --always --abbrev=8 --dirty") - .toString() - .trim(); -var vite_config_default = defineConfig({ - plugins: [svelte()], - define: { - APP_VERSION: JSON.stringify(process.env.npm_package_version), - COMMIT_HASH: JSON.stringify(commitHash), - }, - build: { - target: ["chrome89", "edge89", "firefox89", "safari15"], - cssCodeSplit: false, - rollupOptions: { - input: { - main: resolve(__vite_injected_original_dirname, "index.html"), - play: resolve(__vite_injected_original_dirname, "play/index.html"), - signup: resolve(__vite_injected_original_dirname, "signup/index.html"), - login: resolve(__vite_injected_original_dirname, "login/index.html"), - shipeditor: resolve( - __vite_injected_original_dirname, - "shipeditor/index.html", - ), - uikit: resolve(__vite_injected_original_dirname, "uikit/index.html"), - }, - }, - }, - appType: "mpa", - css: { - postcss: { - plugins: [autoprefixer({})], - }, - }, -}); -export { vite_config_default as default }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9naG9zdGx5enNoL2Rldi9zdGFya2luZ2RvbXMudGsvc3Rhcmtpbmdkb21zLWNsaWVudFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL2hvbWUvZ2hvc3RseXpzaC9kZXYvc3Rhcmtpbmdkb21zLnRrL3N0YXJraW5nZG9tcy1jbGllbnQvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL2hvbWUvZ2hvc3RseXpzaC9kZXYvc3Rhcmtpbmdkb21zLnRrL3N0YXJraW5nZG9tcy1jbGllbnQvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBjaGlsZCBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuLy9AdHMtaWdub3JlXG5pbXBvcnQgYXV0b3ByZWZpeGVyIGZyb20gXCJhdXRvcHJlZml4ZXJcIjtcbmltcG9ydCB7IHN2ZWx0ZSB9IGZyb20gXCJAc3ZlbHRlanMvdml0ZS1wbHVnaW4tc3ZlbHRlXCI7XG5cbmNvbnN0IGNvbW1pdEhhc2ggPSBjaGlsZFxuICAuZXhlY1N5bmMoXCJnaXQgZGVzY3JpYmUgLS1uby1tYXRjaCAtLWFsd2F5cyAtLWFiYnJldj04IC0tZGlydHlcIilcbiAgLnRvU3RyaW5nKClcbiAgLnRyaW0oKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW3N2ZWx0ZSgpXSxcbiAgZGVmaW5lOiB7XG4gICAgQVBQX1ZFUlNJT046IEpTT04uc3RyaW5naWZ5KHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX3ZlcnNpb24pLFxuICAgIENPTU1JVF9IQVNIOiBKU09OLnN0cmluZ2lmeShjb21taXRIYXNoKSxcbiAgfSxcbiAgYnVpbGQ6IHtcbiAgICB0YXJnZXQ6IFtcImNocm9tZTg5XCIsIFwiZWRnZTg5XCIsIFwiZmlyZWZveDg5XCIsIFwic2FmYXJpMTVcIl0sXG4gICAgY3NzQ29kZVNwbGl0OiBmYWxzZSxcbiAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBtYWluOiByZXNvbHZlKF9fZGlybmFtZSwgXCJpbmRleC5odG1sXCIpLFxuICAgICAgICBwbGF5OiByZXNvbHZlKF9fZGlybmFtZSwgXCJwbGF5L2luZGV4Lmh0bWxcIiksXG4gICAgICAgIHNpZ251cDogcmVzb2x2ZShfX2Rpcm5hbWUsIFwic2lnbnVwL2luZGV4Lmh0bWxcIiksXG4gICAgICAgIGxvZ2luOiByZXNvbHZlKF9fZGlybmFtZSwgXCJsb2dpbi9pbmRleC5odG1sXCIpLFxuICAgICAgICBzaGlwZWRpdG9yOiByZXNvbHZlKF9fZGlybmFtZSwgXCJzaGlwZWRpdG9yL2luZGV4Lmh0bWxcIiksXG4gICAgICAgIHVpa2l0OiByZXNvbHZlKF9fZGlybmFtZSwgXCJ1aWtpdC9pbmRleC5odG1sXCIpLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBhcHBUeXBlOiBcIm1wYVwiLFxuICBjc3M6IHtcbiAgICBwb3N0Y3NzOiB7XG4gICAgICBwbHVnaW5zOiBbYXV0b3ByZWZpeGVyKHt9KV0sXG4gICAgfSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUEwVixTQUFTLG9CQUFvQjtBQUN2WCxTQUFTLGVBQWU7QUFDeEIsWUFBWSxXQUFXO0FBRXZCLE9BQU8sa0JBQWtCO0FBQ3pCLFNBQVMsY0FBYztBQUx2QixJQUFNLG1DQUFtQztBQU96QyxJQUFNLGFBQ0gsZUFBUyxxREFBcUQsRUFDOUQsU0FBUyxFQUNULEtBQUs7QUFFUixJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTLENBQUMsT0FBTyxDQUFDO0FBQUEsRUFDbEIsUUFBUTtBQUFBLElBQ04sYUFBYSxLQUFLLFVBQVUsUUFBUSxJQUFJLG1CQUFtQjtBQUFBLElBQzNELGFBQWEsS0FBSyxVQUFVLFVBQVU7QUFBQSxFQUN4QztBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsUUFBUSxDQUFDLFlBQVksVUFBVSxhQUFhLFVBQVU7QUFBQSxJQUN0RCxjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsTUFDYixPQUFPO0FBQUEsUUFDTCxNQUFNLFFBQVEsa0NBQVcsWUFBWTtBQUFBLFFBQ3JDLE1BQU0sUUFBUSxrQ0FBVyxpQkFBaUI7QUFBQSxRQUMxQyxRQUFRLFFBQVEsa0NBQVcsbUJBQW1CO0FBQUEsUUFDOUMsT0FBTyxRQUFRLGtDQUFXLGtCQUFrQjtBQUFBLFFBQzVDLFlBQVksUUFBUSxrQ0FBVyx1QkFBdUI7QUFBQSxRQUN0RCxPQUFPLFFBQVEsa0NBQVcsa0JBQWtCO0FBQUEsTUFDOUM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLElBQ0gsU0FBUztBQUFBLE1BQ1AsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUM1QjtBQUFBLEVBQ0Y7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo= diff --git a/starkingdoms-client-js/yarn.lock b/starkingdoms-client-js/yarn.lock deleted file mode 100644 index b27bb119f1a59cb8f9d2f005978b13c0495e7d33..0000000000000000000000000000000000000000 --- a/starkingdoms-client-js/yarn.lock +++ /dev/null @@ -1,1423 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@msgpack/msgpack@^3.0.0-beta2": - version "3.0.0-beta2" - resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-3.0.0-beta2.tgz#5bccee30f84df220b33905e3d8249ba96deca0b7" - integrity sha512-y+l1PNV0XDyY8sM3YtuMLK5vE3/hkfId+Do8pLo/OPxfxuFAUwcGz3oiiUuV46/aBpwTzZ+mRWVMtlSKbradhw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pixi/accessibility@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/accessibility/-/accessibility-7.3.2.tgz#e823d96a2d032a5bbaccdf547fcf46746bfb865a" - integrity sha512-MdkU22HTauRvq9cMeWZIQGaDDa86sr+m12rKNdLV+FaDQgP/AhP+qCVpK7IKeJa9BrWGXaYMw/vueij7HkyDSA== - -"@pixi/app@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/app/-/app-7.3.2.tgz#7121aaa11ffbf586738e2422db7e12464f6c46e7" - integrity sha512-3YRFSMvAxDebAz3/JJv+2jzbPkT8cHC0IHmmLRN8krDL1pZV+YjMLgMwN/Oeyv5TSbwNqnrF5su5whNkRaxeZQ== - -"@pixi/assets@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/assets/-/assets-7.3.2.tgz#9f460f9939b60d12a6af184bf21978f714876421" - integrity sha512-yteq6ptAxA09EcwU9D9hl7qr5yWIqy+c2PsXkTDkc76vTAwIamLY3KxLq2aR5y1U4L4O6aHFJd26uNhHcuTPmw== - dependencies: - "@types/css-font-loading-module" "^0.0.7" - -"@pixi/color@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/color/-/color-7.3.2.tgz#3a9f03ece87ed03748e1ee71658e1fc627c19981" - integrity sha512-jur5PvdOtUBEUTjmPudW5qdQq6yYGlVGsi3HyhasJw14bN+GKJwiCKgIsyrsiNL5HBUXmje4ICwQohf6BqKqxA== - dependencies: - "@pixi/colord" "^2.9.6" - -"@pixi/colord@^2.9.6": - version "2.9.6" - resolved "https://registry.yarnpkg.com/@pixi/colord/-/colord-2.9.6.tgz#7e4e7851480da6fd3cef4e331f008d60be7e1204" - integrity sha512-nezytU2pw587fQstUu1AsJZDVEynjskwOL+kibwcdxsMBFqPsFFNA7xl0ii/gXuDi6M0xj3mfRJj8pBSc2jCfA== - -"@pixi/compressed-textures@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/compressed-textures/-/compressed-textures-7.3.2.tgz#2a0f6c809e5bbdfdf4933c47cd261d89f38a9612" - integrity sha512-J3ENMHDPQO6CJRei55gqI0WmiZJIK6SgsW5AEkShT0aAe5miEBSomv70pXw/58ru+4/Hx8cXjamsGt4aQB2D0Q== - -"@pixi/constants@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/constants/-/constants-7.3.2.tgz#185b1fe4e65c936cdd59748111432f0878ee47d9" - integrity sha512-Q8W3ncsFxmfgC5EtokpG92qJZabd+Dl+pbQAdHwiPY3v+8UNq77u4VN2qtl1Z04864hCcg7AStIYEDrzqTLF6Q== - -"@pixi/core@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/core/-/core-7.3.2.tgz#9c72234da688b665325fd5f8362537e0877a2443" - integrity sha512-Pta3ee8MtJ3yKxGXzglBWgwbEOKMB6Eth+FpLTjL0rgxiqTB550YX6jsNEQQAzcGjCBlO3rC/IF57UZ2go/X6w== - dependencies: - "@pixi/color" "7.3.2" - "@pixi/constants" "7.3.2" - "@pixi/extensions" "7.3.2" - "@pixi/math" "7.3.2" - "@pixi/runner" "7.3.2" - "@pixi/settings" "7.3.2" - "@pixi/ticker" "7.3.2" - "@pixi/utils" "7.3.2" - "@types/offscreencanvas" "^2019.6.4" - -"@pixi/display@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/display/-/display-7.3.2.tgz#5d4005045ebd47db9974327df2f861e95ad84028" - integrity sha512-cY5AnZ3TWt5GYGx4e5AQ2/2U9kP+RorBg/O30amJ+8e9bFk9rS8cjh/DDq/hc4lql96BkXAInTl40eHnAML5lQ== - -"@pixi/events@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/events/-/events-7.3.2.tgz#ff985f7dae291a440298b2d5d91dd63341aa36d7" - integrity sha512-Moca9epu8jk1wIQCdVYjhz2pD9Ol21m50wvWUKvpgt9yM/AjkCLSDt8HO/PmTpavDrkhx5pVVWeDDA6FyUNaGA== - -"@pixi/extensions@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/extensions/-/extensions-7.3.2.tgz#8e5589c534d3866ddae023666891a793b308a256" - integrity sha512-Qw84ADfvmVu4Mwj+zTik/IEEK9lWS5n4trbrpQCcEZ+Mb8oRAXWvKz199mi1s7+LaZXDqeCY1yr2PHQaFf1KBA== - -"@pixi/extract@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-7.3.2.tgz#b9a29e147bc1817d0400a7dfcd4fb7dbf972ce41" - integrity sha512-KsoflvQZV/XD8A8xbtRnmI4reYekbI4MOi7ilwQe5tMz6O1mO7IzrSukxkSMD02f6SpbAqbi7a1EayTjvY0ECQ== - -"@pixi/filter-alpha@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-alpha/-/filter-alpha-7.3.2.tgz#7404c5e1a73f148579d32547680a35dcf5a45a67" - integrity sha512-nZMdn310wH5ZK1slwv3X4qT8eLoAGO7SgYGCy5IsMtpCtNObzE9XA4tAfhXrjihyzPS9KvszgAbnv1Qpfh0/uw== - -"@pixi/filter-blur@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-blur/-/filter-blur-7.3.2.tgz#290eb8b464ab3885829918cde38f1b5e10532dc8" - integrity sha512-unu3zhwHMhN+iAe7Td2rK40i2UJ2GOhzWK+6jcU3ZkMOsFCT5kgBoMRTejeQVcvCs6GoYK8imbkE7mXt05Vj6A== - -"@pixi/filter-color-matrix@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-color-matrix/-/filter-color-matrix-7.3.2.tgz#80e6dfb75caa7118e51a39686d46371f3c5f2010" - integrity sha512-rbyjes/9SMoV9jjPiK0sLMkmLfN8D17GoTJIfq/KLv1x9646W5fL2QSKkN04UkZ+020ndWvIOxK1S97tvRyCfg== - -"@pixi/filter-displacement@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-displacement/-/filter-displacement-7.3.2.tgz#648a46b6c3afadc188d4b700834ca722f870338e" - integrity sha512-ZHl7Sfb8JYd9Z6j96OHCC0NhMKhhXJRE5AbkSDohjEMVCK1BV5rDGAHV8WVt/2MJ/j83CXUpydzyMhdM4lMchg== - -"@pixi/filter-fxaa@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-fxaa/-/filter-fxaa-7.3.2.tgz#47c6ac6703284a32570adfe2cbf77bba5295c3cf" - integrity sha512-9brtlxDnQTZk2XiFBKdBK9e+8CX9LdxxcL7LRpjEyiHuAPvTlQgu9B85LrJ4GzWKqJJKaIIZBzhIoiCLUnfeXg== - -"@pixi/filter-noise@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/filter-noise/-/filter-noise-7.3.2.tgz#e5f1ea435611fa1a6f3c5a30f4ce3c86d90cc267" - integrity sha512-F8GQQ20n7tCjThX6GCXckiXz2YffOCxicTJ0oat9aVDZh+sVsAxYX0aKSdHh0hhv18F0yuc6tPsSL5DYb63xFg== - -"@pixi/graphics@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/graphics/-/graphics-7.3.2.tgz#42928e8840c24b4f53882b26c95cbc5ef227bfdb" - integrity sha512-PhU6j1yub4tH/s+/gqByzgZ3mLv1mfb6iGXbquycg3+WypcxHZn0opFtI/axsazaQ9SEaWxw1m3i40WG5ANH5g== - -"@pixi/math@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/math/-/math-7.3.2.tgz#bcf2357d8bfa2a7836d645063b1f854c4a24d745" - integrity sha512-dutoZ0IVJ5ME7UtYNo2szu4D7qsgtJB7e3ylujBVu7BOP2e710BVtFwFSFV768N14h9H5roGnuzVoDiJac2u+w== - -"@pixi/mesh-extras@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/mesh-extras/-/mesh-extras-7.3.2.tgz#fc00a6acb811a0780ce7b54ade844b32d20c9621" - integrity sha512-s/tg9TsTZZxLEdCDKWnBChDGkc041HCTP7ykJv4fEROzb9B0lskULYyvv+/YNNKa2Ugb9WnkMknpOdOXCpjyyg== - -"@pixi/mesh@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/mesh/-/mesh-7.3.2.tgz#e0159b03c1ae60dfba7c8e87f84c4400e4bcc9c7" - integrity sha512-LFkt7ELYXQLgbgHpjl68j6JD5ejUwma8zoPn2gqSBbY+6pK/phjvV1Wkh76muF46VvNulgXF0+qLIDdCsfrDaA== - -"@pixi/mixin-cache-as-bitmap@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-7.3.2.tgz#dc6b53f370444b12e58593aebc87231fff88f20e" - integrity sha512-bZRlyUN5+9kCUjn67V0IFtYIrbmx9Vs4sMOmXyrX3Q4B4gPLE46IzZz3v0IVaTjp32udlQztfJalIaWbuqgb3A== - -"@pixi/mixin-get-child-by-name@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-7.3.2.tgz#59ac446c3c75e096aee8d36bdb72bd4aa1430a4d" - integrity sha512-mbUi3WxXrkViH7qOgjk4fu2BN36NwNb7u+Fy1J5dS8Bntj57ZVKmEV9PbUy0zYjXE8rVmeAvSu/2kbn5n9UutQ== - -"@pixi/mixin-get-global-position@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-7.3.2.tgz#84efe8bf315e7e1f539435281302c938d98725ab" - integrity sha512-1nhWbBgmw6rK7yQJxzeI9yjKYYEkM5i3pee8qVu4YWo3b1xWVQA7osQG7aGM/4qywDkXaA1ZvciA5hfg6f4Q5Q== - -"@pixi/particle-container@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/particle-container/-/particle-container-7.3.2.tgz#7e2826ea986a1cf2954830eab99b7f8bee4042d7" - integrity sha512-JYc4j4z97KmxyLp+1Lg0SNi8hy6RxcBBNQGk+CSLNXeDWxx3hykT5gj/ORX1eXyzHh1ZCG1XzeVS9Yr8QhlFHA== - -"@pixi/prepare@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/prepare/-/prepare-7.3.2.tgz#d643bbab6df768c52819806a186063ea13bb2c73" - integrity sha512-aLPAXSYLUhMwxzJtn9m0TSZe+dQlZCt09QNBqYbSi8LZId54QMDyvfBb4zBOJZrD2xAZgYL5RIJuKHwZtFX6lQ== - -"@pixi/runner@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/runner/-/runner-7.3.2.tgz#5cd89cba0a604272e7320d292fedca36a681c486" - integrity sha512-maKotoKJCQiQGBJwfM+iYdQKjrPN/Tn9+72F4WIf706zp/5vKoxW688Rsktg5BX4Mcn7ZkZvcJYTxj2Mv87lFA== - -"@pixi/settings@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/settings/-/settings-7.3.2.tgz#6c14babf416d6c9ddb72f07b0c517ae0353a38b6" - integrity sha512-vtxzuARDTbFe0fRYSqB53B+mPpX7v+QjjnCUmVMVvZiWr3QcngMWVml6c6dQDln7IakWoKZRrNG4FpggvDgLVg== - dependencies: - "@pixi/constants" "7.3.2" - "@types/css-font-loading-module" "^0.0.7" - ismobilejs "^1.1.0" - -"@pixi/sprite-animated@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/sprite-animated/-/sprite-animated-7.3.2.tgz#a35891380b4c0e4029170fe5cbcbbb9edbba07c5" - integrity sha512-j9pyUe4cefxE9wecNfbWQyL5fBQKvCGYaOA0DE1X46ukBHrIuhA8u3jg2X3N3r4IcbVvxpWFYDrDsWXWeiBmSw== - -"@pixi/sprite-tiling@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/sprite-tiling/-/sprite-tiling-7.3.2.tgz#d1c75c7a4ffd7e92a68f95cd4bbb5be0b9eb6c66" - integrity sha512-tWVVb/rMIx5AczfUrVxa0dZaIufP5C0IOL7IGfFUDQqDu5JSAUC0mwLe4F12jAXBVsqYhCGYx5bIHbPiI5vcSQ== - -"@pixi/sprite@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/sprite/-/sprite-7.3.2.tgz#421bea2ccfc51230886e3533d99eeb00e5bf6bf8" - integrity sha512-IpWTKXExJNXVcY7ITopJ+JW48DahdbCo/81D2IYzBImq3jyiJM2Km5EoJgvAM5ZQ3Ev3KPPIBzYLD+HoPWcxdw== - -"@pixi/spritesheet@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/spritesheet/-/spritesheet-7.3.2.tgz#9fd551cef05c2302d1999c895510eeba038350e7" - integrity sha512-UkwqrPYDqrEdK5ub9qn/9VBvt5caA8ffV5iYR6ssCvrpaQovBKmS+b5pr/BYf8xNTExDpR3OmPIo8iDEYWWLuw== - -"@pixi/text-bitmap@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/text-bitmap/-/text-bitmap-7.3.2.tgz#68a7c21ce4174d34e46d4a957d4083f687fed3be" - integrity sha512-p8KLgtZSPowWU/Zj+GVtfsUT8uGYo4TtKKYbLoWuxkRA5Pc1+4C9/rV/EOSFfoZIdW5C+iFg5VxRgBllUQf+aA== - -"@pixi/text-html@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/text-html/-/text-html-7.3.2.tgz#443f669a3444386a62e28dd8f3da66e45593df05" - integrity sha512-IYhBWEPOvqUtlHkS5/c1Hseuricj5jrrGd21ivcvHmcnK/x2m+CRGvvzeBp1mqoYBnDbQVrD2wSXSe4Dv9tEJA== - -"@pixi/text@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/text/-/text-7.3.2.tgz#c38dcecd3b6aceec53b1d4207327812d88b1cf26" - integrity sha512-LdtNj+K5tPB/0UcDcO52M/C7xhwFTGFhtdF42fPhRuJawM23M3zm1Y8PapXv+mury+IxCHT1w30YlAi0qTVpKQ== - -"@pixi/ticker@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/ticker/-/ticker-7.3.2.tgz#898278eb07da4dc4c38cc710c1fff0c7ad5c6099" - integrity sha512-5kIPhBeXwDJohCzKzJJ6T7f1oAGbHAgeiwOjlTO+9lNXUX8ZPj0407V3syuF+64kFqJzIBCznBRpI+fmT4c9SA== - dependencies: - "@pixi/extensions" "7.3.2" - "@pixi/settings" "7.3.2" - "@pixi/utils" "7.3.2" - -"@pixi/utils@7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@pixi/utils/-/utils-7.3.2.tgz#556499eae6439259551ab9b86efb039522b61611" - integrity sha512-KhNvj9YcY7Zi2dTKZgDpx8C6OxKKR541vwtG6JgdBZZYDeMBOIghN2Vi5zn4diW5BhDfHBmdSJ1wZXEtE2MDwg== - dependencies: - "@pixi/color" "7.3.2" - "@pixi/constants" "7.3.2" - "@pixi/settings" "7.3.2" - "@types/earcut" "^2.1.0" - earcut "^2.2.4" - eventemitter3 "^4.0.0" - url "^0.11.0" - -"@rollup/rollup-android-arm-eabi@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54" - integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== - -"@rollup/rollup-android-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e" - integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== - -"@rollup/rollup-darwin-arm64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f" - integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== - -"@rollup/rollup-darwin-x64@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz#0605506142b9e796c370d59c5984ae95b9758724" - integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb" - integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== - -"@rollup/rollup-linux-arm-musleabihf@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3" - integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== - -"@rollup/rollup-linux-arm64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496" - integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== - -"@rollup/rollup-linux-arm64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065" - integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d" - integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== - -"@rollup/rollup-linux-riscv64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983" - integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== - -"@rollup/rollup-linux-s390x-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58" - integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== - -"@rollup/rollup-linux-x64-gnu@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b" - integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== - -"@rollup/rollup-linux-x64-musl@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127" - integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== - -"@rollup/rollup-win32-arm64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5" - integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== - -"@rollup/rollup-win32-ia32-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2" - integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== - -"@rollup/rollup-win32-x64-msvc@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" - integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== - -"@sveltejs/vite-plugin-svelte-inspector@^2.0.0-next.0 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz#365afaa0dd63517838ce4686a3dc3982be348a9b" - integrity sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg== - dependencies: - debug "^4.3.4" - -"@sveltejs/vite-plugin-svelte@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz#475d3496a2a1c7fb4ec6ee3a4d3f0af01fb052e1" - integrity sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA== - dependencies: - "@sveltejs/vite-plugin-svelte-inspector" "^2.0.0-next.0 || ^2.0.0" - debug "^4.3.4" - deepmerge "^4.3.1" - kleur "^4.1.5" - magic-string "^0.30.5" - svelte-hmr "^0.15.3" - vitefu "^0.2.5" - -"@tsconfig/svelte@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/svelte/-/svelte-5.0.2.tgz#c9ed3575c5445afb14965bb76e8446fbf7e4a0e6" - integrity sha512-BRbo1fOtyVbhfLyuCWw6wAWp+U8UQle+ZXu84MYYWzYSEB28dyfnRBIE99eoG+qdAC0po6L2ScIEivcT07UaMA== - -"@types/css-font-loading-module@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz#2f98ede46acc0975de85c0b7b0ebe06041d24601" - integrity sha512-nl09VhutdjINdWyXxHWN/w9zlNCfr60JUqJbd24YXUuCwgeL0TpFSdElCwb6cxfB6ybE19Gjj4g0jsgkXxKv1Q== - -"@types/debug@^4.1.12": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/earcut@^2.1.0": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.4.tgz#5811d7d333048f5a7573b22ddc84923e69596da6" - integrity sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ== - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.1": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@^20.10.0": - version "20.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" - integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== - dependencies: - undici-types "~5.26.4" - -"@types/offscreencanvas@^2019.6.4": - version "2019.7.3" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516" - integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A== - -"@types/pug@^2.0.6": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.10.tgz#52f8dbd6113517aef901db20b4f3fca543b88c1f" - integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== - -acorn@^8.10.0, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -autoprefixer@^10.4.16: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.10: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -buffer-crc32@^0.2.5: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001565" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz#a528b253c8a2d95d2b415e11d8b9942acc100c4f" - integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w== - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -code-red@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" - integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - "@types/estree" "^1.0.1" - acorn "^8.10.0" - estree-walker "^3.0.3" - periscopic "^3.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -earcut@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" - integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== - -electron-to-chromium@^1.4.535: - version "1.4.599" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.599.tgz#754d368c7d6086c92099236de10dbbc93dfb7688" - integrity sha512-FdLI0/h+PvShEqmBMnZCdbgabAuQiiM9Ph8hVGmPOR5GU1XXZgwLRCMogE63OrUxcDEOBlEMVYAgtkJjWFnhRA== - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -estree-walker@^3.0.0, estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -fast-glob@^3.2.7: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== - dependencies: - reusify "^1.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -fraction.js@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.3: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -immutable@^4.0.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-reference@^3.0.0, is-reference@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.2.tgz#154747a01f45cd962404ee89d43837af2cba247c" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - -ismobilejs@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" - integrity sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw== - -kleur@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -locate-character@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" - integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== - -magic-string@^0.30.4, magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nanoid@^3.3.6, nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -periscopic@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" - integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pixi.js@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/pixi.js/-/pixi.js-7.3.2.tgz#86f0287a3763e9141691f496e384a2763fb6552c" - integrity sha512-GJickUrT3UcBInGT1CU6cv2oktCdocE5QM74CD3t+weiJPPWIzleNlp7zrBR5QIDdU6bEO8CUgUXH2Y9QvlCMw== - dependencies: - "@pixi/accessibility" "7.3.2" - "@pixi/app" "7.3.2" - "@pixi/assets" "7.3.2" - "@pixi/compressed-textures" "7.3.2" - "@pixi/core" "7.3.2" - "@pixi/display" "7.3.2" - "@pixi/events" "7.3.2" - "@pixi/extensions" "7.3.2" - "@pixi/extract" "7.3.2" - "@pixi/filter-alpha" "7.3.2" - "@pixi/filter-blur" "7.3.2" - "@pixi/filter-color-matrix" "7.3.2" - "@pixi/filter-displacement" "7.3.2" - "@pixi/filter-fxaa" "7.3.2" - "@pixi/filter-noise" "7.3.2" - "@pixi/graphics" "7.3.2" - "@pixi/mesh" "7.3.2" - "@pixi/mesh-extras" "7.3.2" - "@pixi/mixin-cache-as-bitmap" "7.3.2" - "@pixi/mixin-get-child-by-name" "7.3.2" - "@pixi/mixin-get-global-position" "7.3.2" - "@pixi/particle-container" "7.3.2" - "@pixi/prepare" "7.3.2" - "@pixi/sprite" "7.3.2" - "@pixi/sprite-animated" "7.3.2" - "@pixi/sprite-tiling" "7.3.2" - "@pixi/spritesheet" "7.3.2" - "@pixi/text" "7.3.2" - "@pixi/text-bitmap" "7.3.2" - "@pixi/text-html" "7.3.2" - -postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.43: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.0" - source-map-js "^1.2.1" - -prettier-plugin-svelte@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-3.1.2.tgz#2e050eb56dbb467a42c45ad6ce18bb277d28ffa0" - integrity sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA== - -prettier@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" - integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -qs@^6.11.2: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rollup@^4.20.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.0.tgz#c14a3576f20622ea6a5c9cad7caca5e6e9555d05" - integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.24.0" - "@rollup/rollup-android-arm64" "4.24.0" - "@rollup/rollup-darwin-arm64" "4.24.0" - "@rollup/rollup-darwin-x64" "4.24.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" - "@rollup/rollup-linux-arm-musleabihf" "4.24.0" - "@rollup/rollup-linux-arm64-gnu" "4.24.0" - "@rollup/rollup-linux-arm64-musl" "4.24.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" - "@rollup/rollup-linux-riscv64-gnu" "4.24.0" - "@rollup/rollup-linux-s390x-gnu" "4.24.0" - "@rollup/rollup-linux-x64-gnu" "4.24.0" - "@rollup/rollup-linux-x64-musl" "4.24.0" - "@rollup/rollup-win32-arm64-msvc" "4.24.0" - "@rollup/rollup-win32-ia32-msvc" "4.24.0" - "@rollup/rollup-win32-x64-msvc" "4.24.0" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -sade@^1.7.4: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" - integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== - dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" - -sass@^1.69.5: - version "1.69.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" - integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -sorcery@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" - integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.14" - buffer-crc32 "^0.2.5" - minimist "^1.2.0" - sander "^0.5.0" - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -svelte-check@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.6.2.tgz#a6922160e17e93c6f5fa2b18ec342cc4c70d60ab" - integrity sha512-E6iFh4aUCGJLRz6QZXH3gcN/VFfkzwtruWSRmlKrLWQTiO6VzLsivR6q02WYLGNAGecV3EocqZuCDrC2uttZ0g== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - chokidar "^3.4.1" - fast-glob "^3.2.7" - import-fresh "^3.2.1" - picocolors "^1.0.0" - sade "^1.7.4" - svelte-preprocess "^5.1.0" - typescript "^5.0.3" - -svelte-hmr@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.15.3.tgz#df54ccde9be3f091bf5f18fc4ef7b8eb6405fbe6" - integrity sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ== - -svelte-preprocess@^5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz#7682239fe53f724c845b53026816fdfe15d028f9" - integrity sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw== - dependencies: - "@types/pug" "^2.0.6" - detect-indent "^6.1.0" - magic-string "^0.30.5" - sorcery "^0.11.0" - strip-indent "^3.0.0" - -svelte@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.8.tgz#a279d8b6646131ffb11bc692840f8839b8ae4ed1" - integrity sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@jridgewell/sourcemap-codec" "^1.4.15" - "@jridgewell/trace-mapping" "^0.3.18" - acorn "^8.9.0" - aria-query "^5.3.0" - axobject-query "^3.2.1" - code-red "^1.0.3" - css-tree "^2.3.1" - estree-walker "^3.0.3" - is-reference "^3.0.1" - locate-character "^3.0.0" - magic-string "^0.30.4" - periscopic "^3.1.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -typescript@^5.0.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -typescript@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" - integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -url@^0.11.0: - version "0.11.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" - integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== - dependencies: - punycode "^1.4.1" - qs "^6.11.2" - -vite@^5.4.8: - version "5.4.8" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.8.tgz#af548ce1c211b2785478d3ba3e8da51e39a287e8" - integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vitefu@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.5.tgz#c1b93c377fbdd3e5ddd69840ea3aa70b40d90969" - integrity sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== diff --git a/starkingdoms-client/Cargo.toml b/starkingdoms-client/Cargo.toml deleted file mode 100644 index f4d5ab73b3e45df8ae3db893e27b7e2975057d79..0000000000000000000000000000000000000000 --- a/starkingdoms-client/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "starkingdoms-client" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["cdylib", "rlib"] - -# Everywhere dependencies -[dependencies] -tracing = "0.1" # Log system -tracing-subscriber = "0.3" # Log layers -bevy_ecs = "0.15" -egui = "0.30" -wgpu = { version = "23", features = ["webgl"] } -winit = "0.30" -thiserror = "2" -image = "0.25" -egui-winit = { version = "0.30", default-features = false, features = ["links", "wayland", "x11"] } -egui-wgpu = "0.30" -web-time = "1" -futures = "0.3" -nalgebra = "0.33" - -# WASM dependencies -[target.'cfg(target_arch = "wasm32")'.dependencies] -tracing-web = "0.1" # Log output -console_error_panic_hook = "0.1" # Give useful information in the panic response, other than the useless "entered unreachable code" -wasm-bindgen = "0.2" -web-sys = "0.3" -wasm-bindgen-futures = "0.4" - -# Native dependencies -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -pollster = "0.4" \ No newline at end of file diff --git a/starkingdoms-client/index.html b/starkingdoms-client/index.html deleted file mode 100644 index 020158094f93fea3ab3d4b396ebe72ccaf0f74db..0000000000000000000000000000000000000000 --- a/starkingdoms-client/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - StarKingdoms.TK - - - - - - - - - - \ No newline at end of file diff --git a/starkingdoms-client/src/ecs.rs b/starkingdoms-client/src/ecs.rs deleted file mode 100644 index 7f69d2db9c592f5623d048844269fdaeb0c1a7c6..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/ecs.rs +++ /dev/null @@ -1,87 +0,0 @@ -use bevy_ecs::bundle::Bundle; -use bevy_ecs::component::Component; -use bevy_ecs::system::Resource; -use nalgebra::Matrix3; - -#[derive(Component, Debug, Clone, Copy)] -pub struct Translation { - pub x: f32, - pub y: f32, -} -impl Translation { - pub fn as_matrix(&self) -> Matrix3 { - Matrix3::from_iterator([ - 1.0, 0.0, self.x, - 0.0, 1.0, self.y, - 0.0, 0.0, 1.0, - ]) - } -} - -#[derive(Component, Debug, Clone, Copy)] -pub struct Shear { - pub x: f32, - pub y: f32, -} -impl Shear { - pub fn as_matrix(&self) -> Matrix3 { - Matrix3::from_iterator([ - 1.0, self.x, 0.0, - self.y, 1.0, 0.0, - 0.0, 0.0, 1.0, - ]) - } -} - -#[derive(Component, Debug, Clone, Copy)] -pub struct Scale { - pub width: f32, - pub height: f32, -} -impl Scale { - pub fn as_matrix(&self) -> Matrix3 { - Matrix3::from_iterator([ - self.width, 0.0, 0.0, - 0.0, self.height, 0.0, - 0.0, 0.0, 1.0 - ]) - } -} -#[derive(Component, Debug, Clone, Copy)] -pub struct Rotation { - pub radians: f32 -} -impl Rotation { - pub fn as_matrix(&self) -> Matrix3 { - let x = self.radians.cos(); - let y = self.radians.sin(); - Matrix3::from_iterator([ - x, y, 0.0, - -y, x, 0.0, - 0.0, 0.0, 1.0 - ]) - } -} - -#[derive(Component, Debug, Clone)] -pub struct SpriteTexture { - pub texture: String, -} - -#[derive(Bundle)] -pub struct SpriteBundle { - pub position: Translation, - pub shear: Shear, - pub scale: Scale, - pub texture: SpriteTexture, - pub rotation: Rotation -} - -#[derive(Resource, Debug)] -pub struct Camera { - pub x: f32, - pub y: f32, - pub shear_x: f32, - pub shear_y: f32, - pub zoom: f32, -} diff --git a/starkingdoms-client/src/input.rs b/starkingdoms-client/src/input.rs deleted file mode 100644 index 788000dea9d07ee70232026bb175db62be8ab979..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/input.rs +++ /dev/null @@ -1,7 +0,0 @@ -use bevy_ecs::event::Event; - -#[derive(Event, Debug, Copy, Clone)] -pub enum MouseWheelEvent { - Line { x: f64, y: f64 }, - Pixel { x: f64, y: f64 }, -} diff --git a/starkingdoms-client/src/lib.rs b/starkingdoms-client/src/lib.rs deleted file mode 100644 index 438f3ab87e0cd16169793658441c954c42c8b21f..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/lib.rs +++ /dev/null @@ -1,182 +0,0 @@ -use crate::ecs::{Camera, Translation, Rotation, Scale, SpriteBundle, SpriteTexture}; -use crate::input::MouseWheelEvent; -use crate::rendering::ui::UiRenderable; -use crate::rendering::App; -use bevy_ecs::event::{EventReader, Events}; -use bevy_ecs::schedule::Schedule; -use bevy_ecs::system::ResMut; -use bevy_ecs::world::World; -use ecs::Shear; -use egui::{Context, DragValue}; -use tracing::info; -use winit::event_loop::{ControlFlow, EventLoop}; - -#[cfg(target_arch = "wasm32")] -#[path = "wasm/mod.rs"] -pub mod platform; -#[cfg(not(target_arch = "wasm32"))] -#[path = "native/mod.rs"] -pub mod platform; - -pub mod ecs; -pub mod input; -pub mod rendering; - -// Hi, you've found the real main function! This is called AFTER platform-specific initialization code. -pub fn start() { - info!( - "Hello, world! StarKingdoms.TK v{} says hello, running on {}", - env!("CARGO_PKG_VERSION"), - if cfg!(target_arch = "wasm32") { - "wasm" - } else { - "native" - } - ); - - info!("Creating the ECS world..."); - let mut world = World::new(); - - world.insert_resource::>(Events::default()); - world.insert_resource(Camera { - x: 0.0, - y: 0.0, - shear_x: 0.0, - shear_y: 0.0, - zoom: 1.0, - }); - - let mut start_schedule = Schedule::default(); - // Add startup things here - // Caution: This will run before there are things on-screen - start_schedule.run(&mut world); - - let mut update_schedule = Schedule::default(); - // Add things to run every frame here - // Caution: This will run once before there are things on screen - update_schedule.add_systems(zoom_camera_on_mouse_events); - - world.spawn(SpriteBundle { - position: Translation { - x: 100.0, - y: 100.0 - }, - shear: Shear { - x: 0.0, - y: 0.0, - }, - scale: Scale { - width: 100.0, - height: 100.0, - }, - rotation: Rotation { - radians: 45.0_f32.to_radians() - }, - texture: SpriteTexture { - texture: "happy-tree".to_string(), - }, - }); - - let event_loop = EventLoop::new().unwrap(); - event_loop.set_control_flow(ControlFlow::Poll); - event_loop - .run_app(&mut App::new(world, update_schedule, Gui {})) - .unwrap(); -} - -fn zoom_camera_on_mouse_events(mut events: EventReader, mut camera: ResMut) { - for event in events.read() { - let raw_delta = match event { - MouseWheelEvent::Line { y, .. } => *y, - MouseWheelEvent::Pixel { y, ..} => *y, - } as f32; - - let delta = if raw_delta < 0.0 { - raw_delta * -0.9 - } else { - raw_delta * 1.1 - }; - - if delta < 0.0 { - camera.zoom *= 1.0 / delta; - } else { - camera.zoom *= delta; - } - } -} - -pub struct Gui {} -impl UiRenderable for Gui { - fn render(&mut self, ctx: &Context, world: &mut World) { - egui::Window::new("Main Menu") - .resizable(false) - .show(ctx, |ui| { - ui.heading("StarKingdoms.TK"); - ui.label("A game about floating through space"); - ui.separator(); - - let mut sprites = world.query::<(&mut Translation, &mut Shear, &mut Scale, &SpriteTexture, &mut Rotation)>(); - for (mut pos, mut shear, mut scale, tex, mut rot) in sprites.iter_mut(world) { - ui.heading(&tex.texture); - - egui::Grid::new("sprite_grid") - .num_columns(2) - .spacing([40.0, 4.0]) - .striped(true) - .show(ui, |ui| { - ui.label("X"); - ui.add(DragValue::new(&mut pos.x).speed(0.1)); - ui.end_row(); - - ui.label("Y"); - ui.add(DragValue::new(&mut pos.y).speed(0.1)); - ui.end_row(); - - ui.label("Shear X"); - ui.add(DragValue::new(&mut shear.x).speed(0.1)); - ui.end_row(); - - ui.label("Shear Y"); - ui.add(DragValue::new(&mut shear.y).speed(0.1)); - ui.end_row(); - - ui.label("Width"); - ui.add(DragValue::new(&mut scale.width).speed(0.1)); - ui.end_row(); - - ui.label("Height"); - ui.add(DragValue::new(&mut scale.height).speed(0.1)); - ui.end_row(); - - ui.label("Rotation"); - ui.add(DragValue::new(&mut rot.radians).speed(0.1)); - ui.end_row(); - }); - } - let mut camera = world.resource_mut::(); - egui::Grid::new("camera_grid") - .num_columns(2) - .spacing([40.0, 4.0]) - .show(ui, |ui| { - ui.label("Camera X"); - ui.add(DragValue::new(&mut camera.x).speed(0.1)); - ui.end_row(); - - ui.label("Camera Y"); - ui.add(DragValue::new(&mut camera.y).speed(0.1)); - ui.end_row(); - - ui.label("Shear X"); - ui.add(DragValue::new(&mut camera.shear_x).speed(0.1)); - ui.end_row(); - ui.label("Shear Y"); - ui.add(DragValue::new(&mut camera.shear_y).speed(0.1)); - ui.end_row(); - - ui.label("Camera Zoom"); - ui.add(DragValue::new(&mut camera.zoom).speed(0.1)); - ui.end_row(); - }); - }); - } -} diff --git a/starkingdoms-client/src/main.rs b/starkingdoms-client/src/main.rs deleted file mode 100644 index 570e0893bf673c407c70a5e21c49baed28bd2d6b..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/main.rs +++ /dev/null @@ -1,5 +0,0 @@ -/// --- IMPORTANT: DO NOT EDIT - EDIT THE APPROPRIATE PLATFORM SPECIFIC ENTRYPOINT --- -/// `platform::start` IS WHAT YOU WANT -fn main() { - starkingdoms_client::platform::entrypoint(); -} diff --git a/starkingdoms-client/src/native/mod.rs b/starkingdoms-client/src/native/mod.rs deleted file mode 100644 index 2140dc3c59d0776f13eba38dc3bd9cffe081e0c9..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/native/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE --- -/// THIS WILL ONLY EXECUTE ON NATIVE -/// DO ONLY PLATFORM SPECIFIC INITIALIZATION HERE -/// FOR ACTUAL PROGRAM LOGIC, EDIT `crate::start` -/// DO NOT RENAME -pub fn entrypoint() { - tracing_subscriber::fmt::init(); - - // All done with platform-specific initialization, call back into the common code path - crate::start(); -} diff --git a/starkingdoms-client/src/rendering/mipmap.rs b/starkingdoms-client/src/rendering/mipmap.rs deleted file mode 100644 index 34c8c33ca87417cc1373a25a52072465379ea2fd..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/rendering/mipmap.rs +++ /dev/null @@ -1,134 +0,0 @@ -use crate::rendering::texture::Texture; -use std::collections::HashMap; -use tracing::debug; -use wgpu::{ - include_wgsl, BindGroupDescriptor, BindGroupEntry, BindingResource, Color, ColorTargetState, - ColorWrites, CommandEncoderDescriptor, Device, FilterMode, FragmentState, LoadOp, Operations, - Queue, RenderPassColorAttachment, RenderPassDescriptor, RenderPipeline, - RenderPipelineDescriptor, Sampler, SamplerDescriptor, ShaderModule, StoreOp, TextureFormat, - TextureViewDescriptor, VertexState, -}; - -pub struct MipGenerator { - shader: ShaderModule, - sampler: Sampler, - pipelines: HashMap, -} -impl MipGenerator { - pub fn new(device: &Device) -> Self { - debug!("initializing MipGenerator, compiling shader module"); - let shader = device.create_shader_module(include_wgsl!("../shaders/text_quad_mips.wgsl")); - Self { - shader, - sampler: device.create_sampler(&SamplerDescriptor { - min_filter: FilterMode::Linear, - label: Some("MipGenerator sampler"), - ..Default::default() - }), - pipelines: HashMap::new(), - } - } - - pub fn generate_mips(&mut self, texture: &Texture, device: &Device, queue: &Queue) { - let pipeline = self - .pipelines - .entry(texture.texture.format()) - .or_insert_with(|| { - device.create_render_pipeline(&RenderPipelineDescriptor { - label: Some("MipGenerator format pipeline"), - layout: None, - vertex: VertexState { - module: &self.shader, - entry_point: Some("vs"), - compilation_options: Default::default(), - buffers: &[], - }, - primitive: Default::default(), - depth_stencil: None, - multisample: Default::default(), - fragment: Some(FragmentState { - module: &self.shader, - entry_point: Some("fs"), - compilation_options: Default::default(), - targets: &[Some(ColorTargetState { - format: texture.texture.format(), - blend: None, - write_mask: ColorWrites::default(), - })], - }), - multiview: None, - cache: None, - }) - }); - - let mut encoder = device.create_command_encoder(&CommandEncoderDescriptor { - label: Some("MipGenerator command encoder"), - }); - - let mut width = texture.texture.width(); - let mut height = texture.texture.height(); - let mut base_mip_level = 0; - - while width > 1 || height > 1 { - width = 1.max(width / 2); - height = 1.max(height / 2); - - let bind_group = device.create_bind_group(&BindGroupDescriptor { - label: Some("MipGenerator bind group"), - layout: &pipeline.get_bind_group_layout(0), - entries: &[ - BindGroupEntry { - binding: 0, - resource: BindingResource::Sampler(&self.sampler), - }, - BindGroupEntry { - binding: 1, - resource: BindingResource::TextureView(&texture.texture.create_view( - &TextureViewDescriptor { - base_mip_level, - mip_level_count: Some(1), - ..Default::default() - }, - )), - }, - ], - }); - - base_mip_level += 1; - - let texture_view = texture.texture.create_view(&TextureViewDescriptor { - base_mip_level, - mip_level_count: Some(1), - ..Default::default() - }); - - let render_pass_descriptor = RenderPassDescriptor { - label: Some("MipGenerator render pass"), - color_attachments: &[Some(RenderPassColorAttachment { - view: &texture_view, - resolve_target: None, - ops: Operations { - load: LoadOp::Clear(Color { - r: 0.0, - g: 0.0, - b: 0.0, - a: 1.0, - }), - store: StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - timestamp_writes: None, - occlusion_query_set: None, - }; - - let mut pass = encoder.begin_render_pass(&render_pass_descriptor); - pass.set_pipeline(pipeline); - pass.set_bind_group(0, Some(&bind_group), &[]); - pass.draw(0..6, 0..1); - } - - let command_buffer = encoder.finish(); - queue.submit(std::iter::once(command_buffer)); - } -} diff --git a/starkingdoms-client/src/rendering/mod.rs b/starkingdoms-client/src/rendering/mod.rs deleted file mode 100644 index 64e0e17c5aa440458b9e590e0f283853433b8f58..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/rendering/mod.rs +++ /dev/null @@ -1,230 +0,0 @@ -mod mipmap; -mod renderer; -mod texture; -pub mod ui; - -use crate::input::MouseWheelEvent; -use crate::rendering::renderer::RenderInitRes::{Initialized, NotReadyYet}; -#[allow(unused_imports)] -use crate::rendering::renderer::{Renderer, RenderInitRes}; -use crate::rendering::ui::UiRenderable; -use bevy_ecs::schedule::Schedule; -use bevy_ecs::world::World; -use std::ops::Add; -use std::process::exit; -use std::sync::Arc; -use std::time::Duration; -use tracing::info; -use web_time::Instant; -use winit::application::ApplicationHandler; -use winit::dpi::LogicalSize; -use winit::event::{MouseScrollDelta, WindowEvent}; -use winit::event_loop::{ActiveEventLoop, ControlFlow}; -use winit::window::{Window, WindowId}; - -pub struct App { - window: Option>, - renderer: Option>, - - #[cfg(target_arch = "wasm32")] - renderer_rx: Option>>, - - world: Option, - update_schedule: Option, - ui_renderable: Option, -} - -impl App { - pub fn new(world: World, update_schedule: Schedule, ui_renderable: T) -> Self { - Self { - window: None, - renderer: None, - #[cfg(target_arch = "wasm32")] - renderer_rx: None, - world: Some(world), - update_schedule: Some(update_schedule), - ui_renderable: Some(ui_renderable), - } - } -} -impl ApplicationHandler for App { - fn resumed(&mut self, event_loop: &ActiveEventLoop) { - if self.window.is_none() { - let attributes = Window::default_attributes().with_title("StarKingdoms.TK"); - - let window = Arc::new(event_loop.create_window(attributes).unwrap()); - self.window = Some(window.clone()); - - let world = self.world.take().unwrap(); - let update_schedule = self.update_schedule.take().unwrap(); - let ui_renderable = self.ui_renderable.take().unwrap(); - - #[cfg(not(target_arch = "wasm32"))] - { - let renderer = pollster::block_on(async move { - Renderer::try_init(window.clone(), world, update_schedule, ui_renderable).await - }); - match renderer { - Initialized(r) => { - self.renderer = Some(r); - } - NotReadyYet(w, u, t) => { - self.world = Some(w); - self.update_schedule = Some(u); - self.ui_renderable = Some(t); - } - } - } - #[cfg(target_arch = "wasm32")] - { - use winit::platform::web::WindowExtWebSys; - // Add it to the DOM - web_sys::window() - .unwrap() - .document() - .unwrap() - .body() - .unwrap() - .append_child(&window.canvas().unwrap()) - .unwrap(); - - let (tx, rx) = futures::channel::oneshot::channel(); - self.renderer_rx = Some(rx); - wasm_bindgen_futures::spawn_local(async move { - let renderer = - Renderer::try_init(window.clone(), world, update_schedule, ui_renderable).await; - tx.send(renderer).unwrap(); - }); - } - } - } - - fn window_event( - &mut self, - event_loop: &ActiveEventLoop, - _window_id: WindowId, - event: WindowEvent, - ) { - if event == WindowEvent::CloseRequested { - info!("Close requested by underlying event system"); - event_loop.exit(); - exit(1); - } - if let Some(renderer) = &mut self.renderer { - let egui_response = renderer.gui_winit.on_window_event(&renderer.window, &event); - if egui_response.consumed { - return; - } - } - - match event { - WindowEvent::Resized(new) => { - if let Some(renderer) = &mut self.renderer { - if new.width > 0 && new.height > 0 { - renderer.size = new; - renderer.scale_factor = renderer.window.scale_factor(); - renderer.logical_size = - LogicalSize::from_physical(renderer.size, renderer.scale_factor); - - renderer.surface_configuration.width = new.width; - renderer.surface_configuration.height = new.height; - renderer - .surface - .configure(&renderer.device, &renderer.surface_configuration); - } - } - } - WindowEvent::ScaleFactorChanged { scale_factor, .. } => { - if let Some(renderer) = &mut self.renderer { - renderer.scale_factor = scale_factor; - renderer.logical_size = - LogicalSize::from_physical(renderer.size, renderer.scale_factor); - } - } - WindowEvent::MouseWheel { delta, .. } => { - if let Some(renderer) = &mut self.renderer { - renderer.world.send_event(match delta { - MouseScrollDelta::PixelDelta(pos) => { - MouseWheelEvent::Pixel { x: pos.x, y: pos.y } - } - MouseScrollDelta::LineDelta(x, y) => MouseWheelEvent::Line { - x: x as f64, - y: y as f64, - }, - }); - } - } - _ => {} - } - } - - fn about_to_wait(&mut self, event_loop: &ActiveEventLoop) { - #[allow(unused_variables)] - if let Some(window) = self.window.clone() { - #[cfg(target_arch = "wasm32")] - { - let mut renderer_rxd = false; - if let Some(rx) = self.renderer_rx.as_mut() { - if let Ok(Some(renderer)) = rx.try_recv() { - match renderer { - Initialized(r) => { - self.renderer = Some(r); - renderer_rxd = true; - } - NotReadyYet(w, u, t) => { - let (tx, rx) = futures::channel::oneshot::channel(); - self.renderer_rx = Some(rx); - wasm_bindgen_futures::spawn_local(async move { - let renderer = Renderer::try_init(window.clone(), w, u, t).await; - tx.send(renderer).unwrap(); - }); - } - } - } - } - if renderer_rxd { - self.renderer_rx = None; - } - } - - #[cfg(not(target_arch = "wasm32"))] - { - if self.renderer.is_none() { - if let Some(window) = self.window.clone() { - let world = self.world.take().unwrap(); - let update_schedule = self.update_schedule.take().unwrap(); - let ui_renderable = self.ui_renderable.take().unwrap(); - - let renderer = pollster::block_on(async move { - Renderer::try_init(window.clone(), world, update_schedule, ui_renderable) - .await - }); - - match renderer { - Initialized(r) => { - self.renderer = Some(r); - } - NotReadyYet(w, u, t) => { - self.world = Some(w); - self.update_schedule = Some(u); - self.ui_renderable = Some(t); - } - } - - return; - } - } - } - - let Some(renderer) = &mut self.renderer else { - return; - }; - - renderer.render(); - - event_loop.set_control_flow(ControlFlow::WaitUntil( - Instant::now().add(Duration::from_secs_f64(1.0 / 60.0)), - )); - } - } -} diff --git a/starkingdoms-client/src/rendering/renderer.rs b/starkingdoms-client/src/rendering/renderer.rs deleted file mode 100644 index 150ffd21cea9fa3ebffc9081ba4a7779cc9c8275..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/rendering/renderer.rs +++ /dev/null @@ -1,389 +0,0 @@ -use crate::ecs::{Camera, Rotation, Scale, Shear, SpriteTexture, Translation}; -use crate::rendering::mipmap::MipGenerator; -use crate::rendering::renderer::RenderInitRes::{Initialized, NotReadyYet}; -use crate::rendering::texture; -use crate::rendering::ui::UiRenderable; -use bevy_ecs::schedule::Schedule; -use bevy_ecs::world::World; -use egui::ViewportId; -use std::collections::HashMap; -use std::fmt::{Debug, Formatter}; -use std::sync::Arc; -use tracing::info; -use web_time::Instant; -use wgpu::SurfaceConfiguration; -use wgpu::{ - include_wgsl, Adapter, Backends, BindGroupDescriptor, BindGroupEntry, BindingResource, Buffer, - BufferDescriptor, BufferUsages, Color, ColorTargetState, CommandEncoderDescriptor, Device, - DeviceDescriptor, Features, FragmentState, Instance, InstanceDescriptor, Limits, LoadOp, - Operations, Queue, RenderPassColorAttachment, RenderPassDescriptor, RenderPipeline, - RenderPipelineDescriptor, RequestAdapterOptions, ShaderModule, StoreOp, Surface, - TextureViewDescriptor, VertexState, -}; -use winit::dpi::{LogicalSize, PhysicalSize}; -use winit::window::Window; - -#[allow(unused_attributes, dead_code)] -pub struct Renderer { - pub last_frame_time: Instant, - - pub surface: Surface<'static>, - pub surface_configuration: SurfaceConfiguration, - pub device: Device, - pub queue: Queue, - pub adapter: Adapter, - - pub sprite_shader_module: ShaderModule, - pub sprite_pipeline: RenderPipeline, - - pub world: World, - pub update_schedule: Schedule, - - pub gui_ctx: egui::Context, - pub gui_winit: egui_winit::State, - pub gui_renderer: egui_wgpu::Renderer, - pub gui_renderable: T, - - pub textures: HashMap, - pub mip_generator: MipGenerator, - - pub frame_uniform: Buffer, - pub local_uniform: Buffer, - pub scale_factor: f64, - - pub window: Arc, - - pub size: PhysicalSize, - pub logical_size: LogicalSize, -} - -#[allow(clippy::large_enum_variant)] -pub enum RenderInitRes { - Initialized(Renderer), - NotReadyYet(World, Schedule, T), -} -impl Debug for RenderInitRes { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - Initialized(..) => write!(f, "[initialized renderer]"), - NotReadyYet(..) => write!(f, "[pending initialization]"), - } - } -} - -impl Renderer { - pub async fn try_init( - window: Arc, - world: World, - update_schedule: Schedule, - gui_renderable: T, - ) -> RenderInitRes { - let size = window.inner_size(); - if size.width == 0 || size.height == 0 { - return NotReadyYet(world, update_schedule, gui_renderable); - } - - // First, create an instance. This is our handle to wgpu, and is the equivalent of navigator.gpu in WebGPU - let instance = Instance::new(InstanceDescriptor { - backends: Backends::all(), // Select the appropriate backend for the HAL to use. Defined in the platform module, as it's platform-specific - ..Default::default() // Other fields aren't relevant here - }); - - // Next, get our render surface - let surface = instance.create_surface(window.clone()).unwrap(); - - // Next, request out adapter - let adapter = instance - .request_adapter(&RequestAdapterOptions { - power_preference: Default::default(), // Don't care - force_fallback_adapter: false, // We want a real GPU - compatible_surface: Some(&surface), // Find an adapter that is able to render to our window - }) - .await - .unwrap(); - - let mut limits = Limits::downlevel_webgl2_defaults(); - limits.max_texture_dimension_1d = 8192; - limits.max_texture_dimension_2d = 8192; - limits.max_texture_dimension_3d = 2048; - let (device, queue) = adapter - .request_device( - &DeviceDescriptor { - label: Some("Basic render device"), - required_features: Features::default(), - required_limits: limits, - memory_hints: Default::default(), - }, - None, - ) - .await - .unwrap(); - - let format = surface - .get_default_config(&adapter, size.width, size.height) - .unwrap(); - - surface.configure(&device, &format); - - let sprite_shader_module = - device.create_shader_module(include_wgsl!("../shaders/sprite.wgsl")); - let sprite_pipeline = device.create_render_pipeline(&RenderPipelineDescriptor { - label: Some("Sprite pipeline"), - layout: None, - vertex: VertexState { - module: &sprite_shader_module, - entry_point: Some("vs"), - compilation_options: Default::default(), - buffers: &[], - }, - primitive: Default::default(), - depth_stencil: None, - multisample: Default::default(), - fragment: Some(FragmentState { - module: &sprite_shader_module, - entry_point: Some("fs"), - compilation_options: Default::default(), - targets: &[Some(ColorTargetState { - format: format.format, - blend: None, - write_mask: Default::default(), - })], - }), - multiview: None, - cache: None, - }); - - let gui_context = egui::Context::default(); - let gui_winit = egui_winit::State::new( - gui_context.clone(), - ViewportId::ROOT, - &window, - Some(window.scale_factor() as f32), - None, - Some(device.limits().max_texture_dimension_2d as usize), - ); - let gui_renderer = egui_wgpu::Renderer::new(&device, format.format, None, 1, false); - - let frame_uniform = device.create_buffer(&BufferDescriptor { - label: Some("frame uniforms"), - size: 48 + 16, // mat3x3f, vec2f - usage: BufferUsages::UNIFORM | BufferUsages::COPY_DST, - mapped_at_creation: false, - }); - let local_uniform = device.create_buffer(&BufferDescriptor { - label: Some("local uniforms"), - size: 48, // mat3x3f - usage: BufferUsages::UNIFORM | BufferUsages::COPY_DST, - mapped_at_creation: false, - }); - - Initialized(Self { - mip_generator: MipGenerator::new(&device), - textures: HashMap::new(), - last_frame_time: Instant::now(), - surface, - device, - queue, - adapter, - sprite_shader_module, - sprite_pipeline, - world, - update_schedule, - gui_ctx: gui_context, - gui_winit, - gui_renderer, - gui_renderable, - logical_size: LogicalSize::from_physical(size, window.scale_factor()), - scale_factor: window.scale_factor(), - window, - frame_uniform, - local_uniform, - size, - surface_configuration: format, - }) - } - - pub fn render(&mut self) { - // update the world - self.update_schedule.run(&mut self.world); - // update the UI - let egui_output = self - .gui_ctx - .run(self.gui_winit.take_egui_input(&self.window), |ctx| { - self.gui_renderable.render(ctx, &mut self.world) - }); - self.gui_winit - .handle_platform_output(&self.window, egui_output.platform_output); - - let output = self.surface.get_current_texture().unwrap(); - let view = output - .texture - .create_view(&TextureViewDescriptor::default()); - - let render_pass_descriptor = RenderPassDescriptor { - label: Some("basic render pass"), - color_attachments: &[Some(RenderPassColorAttachment { - view: &view, - resolve_target: None, - ops: Operations { - load: LoadOp::Clear(Color { - r: 0.3, - g: 0.3, - b: 0.3, - a: 1.0, - }), - store: StoreOp::Store, - }, - })], - ..Default::default() - }; - let mut encoder = self - .device - .create_command_encoder(&CommandEncoderDescriptor { - label: Some("command encoder"), - }); - - let mut sprites_to_render: Vec<(Translation, Shear, Scale, SpriteTexture, Rotation)> = vec![]; - - let mut things_to_render = self.world.query::<(&Translation, &Shear, &Scale, &SpriteTexture, &Rotation)>(); - for thing in things_to_render.iter_mut(&mut self.world) { - sprites_to_render.push((*thing.0, *thing.1, *thing.2, thing.3.clone(), *thing.4)); - } - - let cam = self.world.resource::(); - - let mut frame_uniform = vec![]; - let frame_uniform_values = [ - cam.zoom, cam.shear_y,0.0, 0.0, - cam.shear_x,cam.zoom, 0.0, 0.0, - cam.x, cam.y, 1.0, 0.0, - self.logical_size.width as f32, self.logical_size.height as f32, 0.0, 0.0]; - for i in frame_uniform_values { - let mut bytes = i.to_ne_bytes().to_vec(); - frame_uniform.append(&mut bytes); - } - - self.queue.write_buffer(&self.frame_uniform, 0, &frame_uniform); - - for (pos, shear, scale, tex, rot) in sprites_to_render { - let tex = self.textures.entry(tex.texture.clone()).or_insert_with(|| { - info!("loading texture {}", &tex.texture); - let b: &[u8] = match tex.texture.as_str() { - "f" => include_bytes!("../textures/f.png"), - "happy-tree" => include_bytes!("../textures/happy-tree.png"), - "uv" => include_bytes!("../textures/uv.png"), - u => panic!("unknown texture {u}, has it been added in rendering::renderer::::render()?") - }; - texture::Texture::new( - b, - &tex.texture, - &self.device, - &self.queue, - &mut self.mip_generator, - ) - }); - - let xy_matrix = pos.as_matrix(); - let shear_matrix = shear.as_matrix(); - let rot_matrix = rot.as_matrix(); - let scale_matrix = scale.as_matrix(); - - let transform_matrix = scale_matrix * shear_matrix * rot_matrix * xy_matrix; - - - let mut local_buffer = vec![]; - let local_buffer_data = [ - transform_matrix.m11, transform_matrix.m12, transform_matrix.m13, 0.0, - transform_matrix.m21, transform_matrix.m22, transform_matrix.m23, 0.0, - transform_matrix.m31, transform_matrix.m32, transform_matrix.m33, 0.0, - ]; - for i in local_buffer_data { - let mut bytes = i.to_ne_bytes().to_vec(); - local_buffer.append(&mut bytes); - } - - self.queue - .write_buffer(&self.local_uniform, 0, &local_buffer); - - let bind_group = self.device.create_bind_group(&BindGroupDescriptor { - label: Some("test_bind_group"), - layout: &self.sprite_pipeline.get_bind_group_layout(0), - entries: &[ - BindGroupEntry { - binding: 0, - resource: BindingResource::Sampler(&tex.sampler), - }, - BindGroupEntry { - binding: 1, - resource: BindingResource::TextureView( - &tex.texture.create_view(&TextureViewDescriptor::default()), - ), - }, - BindGroupEntry { - binding: 2, - resource: BindingResource::Buffer( - self.frame_uniform.as_entire_buffer_binding(), - ), - }, - BindGroupEntry { - binding: 3, - resource: BindingResource::Buffer( - self.local_uniform.as_entire_buffer_binding(), - ), - }, - ], - }); - let mut pass = encoder.begin_render_pass(&render_pass_descriptor); - pass.set_pipeline(&self.sprite_pipeline); - pass.set_bind_group(0, Some(&bind_group), &[]); - pass.draw(0..6, 0..1); - } - // main game rendering done - // next up: egui UI rendering - for (id, image_delta) in &egui_output.textures_delta.set { - self.gui_renderer - .update_texture(&self.device, &self.queue, *id, image_delta); - } - { - let paint_jobs = self - .gui_ctx - .tessellate(egui_output.shapes, self.scale_factor as f32); - let screen_descriptor = egui_wgpu::ScreenDescriptor { - size_in_pixels: [self.size.width, self.size.height], - pixels_per_point: self.scale_factor as f32, - }; - self.gui_renderer.update_buffers( - &self.device, - &self.queue, - &mut encoder, - &paint_jobs, - &screen_descriptor, - ); - let render_pass = encoder.begin_render_pass(&RenderPassDescriptor { - label: Some("ui render pass"), - color_attachments: &[Some(RenderPassColorAttachment { - view: &view, - resolve_target: None, - ops: Operations { - load: LoadOp::Load, - store: StoreOp::Store, - }, - })], - depth_stencil_attachment: None, - timestamp_writes: None, - occlusion_query_set: None, - }); - let mut forgotten_render_pass = render_pass.forget_lifetime(); - self.gui_renderer - .render(&mut forgotten_render_pass, &paint_jobs, &screen_descriptor); - for id in egui_output.textures_delta.free { - self.gui_renderer.free_texture(&id); - } - } - - let buffer = encoder.finish(); - self.queue.submit(std::iter::once(buffer)); - - output.present(); - } -} diff --git a/starkingdoms-client/src/rendering/texture.rs b/starkingdoms-client/src/rendering/texture.rs deleted file mode 100644 index a83309c6178913df76b0512fa629e446da64dde8..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/rendering/texture.rs +++ /dev/null @@ -1,77 +0,0 @@ -use crate::rendering::mipmap::MipGenerator; -use image::EncodableLayout; -use wgpu::{ - Device, Extent3d, FilterMode, ImageCopyTexture, ImageDataLayout, Origin3d, Queue, - SamplerDescriptor, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages, -}; - -#[derive(Debug)] -pub struct Texture { - pub texture: wgpu::Texture, - pub sampler: wgpu::Sampler, -} -impl Texture { - pub fn new( - bytes: &[u8], - label: &str, - device: &Device, - queue: &Queue, - mip_generator: &mut MipGenerator, - ) -> Self { - let img = image::load_from_memory(bytes).unwrap(); - let rgba = img.to_rgba8(); - - let max_size = rgba.width().max(rgba.height()); - let log_factor = if max_size == 0 { 0 } else { max_size.ilog2() }; - let optimal_mip_levels = 1 + log_factor; - - let texture = device.create_texture(&TextureDescriptor { - label: Some(label), - size: Extent3d { - width: rgba.width(), - height: rgba.height(), - depth_or_array_layers: 1, - }, - mip_level_count: optimal_mip_levels, - sample_count: 1, - dimension: TextureDimension::D2, - format: TextureFormat::Rgba8UnormSrgb, - usage: TextureUsages::TEXTURE_BINDING - | TextureUsages::COPY_DST - | TextureUsages::RENDER_ATTACHMENT, - view_formats: &[TextureFormat::Rgba8UnormSrgb], - }); - queue.write_texture( - ImageCopyTexture { - texture: &texture, - mip_level: 0, - origin: Origin3d::ZERO, - aspect: Default::default(), - }, - rgba.as_bytes(), - ImageDataLayout { - offset: 0, - bytes_per_row: Some(rgba.width() * 4), - rows_per_image: Some(rgba.height()), - }, - Extent3d { - width: rgba.width(), - height: rgba.height(), - depth_or_array_layers: 1, - }, - ); - - let sampler = device.create_sampler(&SamplerDescriptor { - label: Some("test_sampler"), - mag_filter: FilterMode::Linear, - min_filter: FilterMode::Linear, - ..Default::default() - }); - - let tex = Self { texture, sampler }; - - mip_generator.generate_mips(&tex, device, queue); - - tex - } -} diff --git a/starkingdoms-client/src/rendering/ui.rs b/starkingdoms-client/src/rendering/ui.rs deleted file mode 100644 index 2aac1846e01424a29f8b9acd3b8c496f762ee8df..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/rendering/ui.rs +++ /dev/null @@ -1,5 +0,0 @@ -use bevy_ecs::world::World; - -pub trait UiRenderable { - fn render(&mut self, ctx: &egui::Context, world: &mut World); -} diff --git a/starkingdoms-client/src/shaders/sprite.wgsl b/starkingdoms-client/src/shaders/sprite.wgsl deleted file mode 100644 index 2674eb5f4959b31aee4df2051bfbaec434b02ac8..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/shaders/sprite.wgsl +++ /dev/null @@ -1,52 +0,0 @@ -struct VertexShaderOut { - @builtin(position) position: vec4, - @location(0) texcoord: vec2 -} - -struct FrameUniforms { - camera_transform: mat3x3f, - viewport_size: vec2f, -} -struct LocalUniforms { - transform: mat3x3f, -} -@group(0) @binding(2) var frame_uni: FrameUniforms; -@group(0) @binding(3) var local_uni: LocalUniforms; - -@vertex fn vs( - @builtin(vertex_index) vertexIndex : u32 -) -> VertexShaderOut { - let pos = array( - vec2(-0.5, -0.5), - vec2(0.5, -0.5), - vec2(-0.5, 0.5), - vec2(-0.5, 0.5), - vec2(0.5, -0.5), - vec2(0.5, 0.5) - ); - - var vsOutput: VertexShaderOut; - - let homogeneous_position = frame_uni.camera_transform * local_uni.transform * vec3f(pos[vertexIndex], 1); - let position = homogeneous_position.xy / homogeneous_position.z; - // convert from pixels to 0.0 to 1.0 - let zeroToOne = position / frame_uni.viewport_size; - // convert from 0 - 1 to 0 - 2 - let zeroToTwo = zeroToOne * 2.0; - // convert from 0 - 2 to -1 - +1 (clip space) - let flippedClipSpace = zeroToTwo - 1.0; - // flip Y - let clipSpace = flippedClipSpace * vec2f(1, -1); - - vsOutput.position = vec4f(clipSpace, 0.0, 1.0); - vsOutput.texcoord = pos[vertexIndex] + vec2f(0.5, 0.5); - - return vsOutput; -} - -@group(0) @binding(0) var tex_sampler: sampler; -@group(0) @binding(1) var tex: texture_2d; - -@fragment fn fs(fsInput: VertexShaderOut) -> @location(0) vec4 { - return textureSample(tex, tex_sampler, fsInput.texcoord); -} diff --git a/starkingdoms-client/src/shaders/text_quad_mips.wgsl b/starkingdoms-client/src/shaders/text_quad_mips.wgsl deleted file mode 100644 index f1715ccf4dcec951d62b7fa84b78fe1a54c1ca62..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/shaders/text_quad_mips.wgsl +++ /dev/null @@ -1,26 +0,0 @@ -struct VertexOutput { - @builtin(position) position: vec4, - @location(0) texcoord: vec2 -} -@vertex fn vs(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput { - let pos = array( - vec2(0.0, 0.0), - vec2(1.0, 0.0), - vec2(0.0, 1.0), - vec2(0.0, 1.0), - vec2(1.0, 0.0), - vec2(1.0, 1.0) - ); - var out: VertexOutput; - let xy = pos[vertexIndex]; - out.position = vec4(xy * 2.0 - 1.0, 0.0, 1.0); - out.texcoord = vec2(xy.x, 1.0 - xy.y); - return out; -} - -@group(0) @binding(0) var texSampler: sampler; -@group(0) @binding(1) var tex: texture_2d; - -@fragment fn fs(inp: VertexOutput) -> @location(0) vec4 { - return textureSample(tex, texSampler, inp.texcoord); -} \ No newline at end of file diff --git a/starkingdoms-client/src/textures/f.png b/starkingdoms-client/src/textures/f.png deleted file mode 100644 index 17b8705f65e0d9de741414d854f73ca606e5e8cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8848 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 O{wT?*-7UIf;{QKSZBwxT diff --git a/starkingdoms-client/src/textures/happy-tree.png b/starkingdoms-client/src/textures/happy-tree.png deleted file mode 100644 index 81a5289f4ee3c200fedcd446dc477f196d18afbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25451 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 jy6Ya(iP-7>yFE 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ʹ)w9yu{>FXIgcJ&{ED@WXRb2Np(pno57j!hfLQlL#2CfLu;{Hsk0 zpPAK{L|oD}#vEgFx841u!sNnevt6~BdyW^K z048NfqYCDpBR=Jg?bm^vz?TjOmG=Nc6T!e$+5v-nwOoq!Xj_U*S4bJygmH3`tc<_b* z&?J-69^yZm^LXy=>J;%NU+n}9z3m(JA~;`>O(~f+Y`lZ83WcFqcm3lU@3*lcJU;WU z9sKLB|IuAY&_dvc)!ojwf8l!~KveJj_K{Hs*$$hTNhg2s`PW}~_zDkEL4!c1tLy!r zkSFgDq`{t>;=EnHd>}wmgzjd@zAZ-|-QQuYsb|CcAU%BwA0D&#%JDVTng&^0$9i56 zetnToWgAqM8+H3Q9hS(?mmQKO@w%-0RhBGaoAxWyH88cj{6jmFZH=wZ z{w$mORG%RXCh?0$mV*hRQwr?~lsl^Sjidk`umBK~klJh6gi9_bMLPc61{gkG1JBL< zH9hg;2Y+^+W}9k6$Q=)YY6oI}PUF$abX=q7aucuxNajv%4}!*?d#zWqvD$22mfPG> zhlSfIHda zN5tWu+J1$^pF0UzM1-59Yz!&vjG5;&YpS*7^j==gVa1wWBmg} zP#%5G4uWmLblEoCf{Y64csKE>#r1xoRl4ZeMRdAB4#6@hLT$uR@^KZnHhm}M@WPjosba|aEC{onF)Kfih$jF`Jug_r!mB3k(x$%| zk%(3wb|k=4b>j}JAL-j}bpN_u7aJb`tp3t@W4uh}_K#VOgkI?W>o1~K)7)ecHD)of zjkA@m&A~OWUM&GQU%%C1B%{yTToB$rLAN)V`_$YQXYnaZ+p2ybo)De3Z4BmY?^*J+ zr7a*dT18x{X=0i#Y2l@Kv&7!~#FZ=j*>B|Ae*P{n=#1Y*f6g^4)24HX$J2HcGU9G@ zhae=5;=4}tC}LK}caUw3WU2uj>_At@)~=sd->I4_MsZt9UU1pppe9I&$!xcJyFZ1U z7L&}DZ(Dd>@cUiXb_eU2b8`P?er{p0Of@LR6yO9oOC#W_!*kRGHw6S6Dh4Nr-nZ}} zNR8sxla!dJxtO&8dE!al*q95DxLkDJzeg02aX2jGi_h8XpWPEhHQc&&9P*tXHtj|E z=T?bXnsPU@y$BLqyAv`hm|*$zJqE#z0_qv{4Mp@T09?|pYeLM?1b@T1XC7$t+iLB2+MqFhGGTcYvxQe=l#0c=`EUdUwo zK1d*4jV`?mB(B!ae_5?<$Bz(#^xh>#P()ChXsEXXlYhE$#Ow|+T0x+V zVUNbSk@(oDvGCs`LB4n-=rKOh+P)iJ@Ut6#s)w9mA#HJ@jWfd0RTHNO`n{qwwrb)K zZF-exLbP;jl{Epn#`lkhIQ7omC%R0oK}vgO?_yidze#2hUU%*maf94y-ire7nOI_E ziVSoAHy)5&M$y;!V~)oYn#_(mpAKoy*ukZnOe6a%@o~@DzpAtu1=~nIn6)n5ML8M} z%1DIy(+)*S#%~954n~IcTu#RuM}(*(Llr0Wp|I~mr&EmKH#29?4{3_rPWlP4Z}AE= z7j?oS>K?$_<1;4yzGl|7xM<@20{jJ^^xFzw3ma5t z8SI1uS5j>y!otUdVzaI3u$&*cartNQE`kc9sMGO;S~C%iwt=pQ;XFy*oen;HeSuG1 zv`oa(swLK%xqQI84oKNgQ6LY&eD#SaOM+Nb)g-})gFv9@$_qP@kQO_T08tcwN4t|S zVOrmGIE{dhE}$v?p2e0QZ$L5brqbIfAi2B58;7o5-~hYu@zFMY8mKIJfQ z1ahi@%yVMUbP%Kqk0Pdy+L!d~dbxJ@FXmUG4AeSdYZJYKB;<8S0`Xhhj_8>`xElc} z;*9ZJ0Rza|W4N$b$fAJJ|L0kzeqpd-iK(kSaPB|<85Ik1)w@~u-Ys9~Z;*li_#MKr zd>g5Vpji7-uH7P({D$|=zT8!^02l^x25I!UjMsaCwemDBsQIm#8Awlq4ZfHKr2|mH zxmS19IRNVPHew+&kh@X>1!}-oqv|>gwP(AwNw*u`fhD_cSYJ=HkW!>XrwQZ+JYN%i zyeVBT$kPH%#tPhlme8S_eyB~+BV_5X{PSA2&WS}3_Z^N>9Y>gJ^fp$e!{ z$AmqX;M&DkAgMU`kOk@)AZ0~fMD(s}0nG+k`+q^o{#~AO&tmUE%KniD`ezn@FZe}3 z^3(SqW&ecz|Ersm+HaUN?NDKyNkdwBc2IsRp;~3}c!vAp0FgQC@<4nCk;y%9^!}mg zs;d^ut2R(M zv=H-F4#n#eRQCysBP#j&CR%A}DMr?ISyGBS>gR5wQD;biX)Zmoy|4y+;UcjrhhT(M znCkTx14*(_pN^_|jbmb0SeBS}F!jY42H=nix%7yrMRBW|@@S_Kv};9^dW_DE$_r0I zMbsXA)(`H@-u7kTB5nt#sxIYq2`b&~85s{SXr2lt_{FJr4)S|^BkL5r6Q5RwNT}Mt zTJ9iMxSmA@F-ae;2K9uriOA6dcJB2@30CfWcO94Ii@dKtPpc`Ve(vt3A;dy>QGE+z z>ae0@YT;9CtB|>OyULT6;LtKDcY)0JkLnesWNY=g3OiMl*^ZvRKC?$NB4v*5)p4SH z#Kb1@V>Qt!nOwK+PfYyx8g7zc!D*Wl5outw8cL`ER$d0)^3JLq?3DG0e6GUIz z^*zB9hCU_gKHK6A2vhA1FHs)L-Vs zmym5k^soBunJTy3SR(n$VT*LHpIYo8yhn}s5D}w{akpjz&fVqop7STB1%N*NVpjll z&_!Onccpb^Q;B0l=j@fZ|J+9X7imotIUbh(x4Fsxq0!v_tDEt>k^d-R+GPoY{pS!8 z0mp&>rT<@`TK}I6Y3m&xm$0|Kj07f5U^0r$WJt}ra&Y*2NBg3wcj{s$Wjjip%G!?hW)af;vD>`#g zEQoWQ?iW5fF|PQXW!34Dr8L$oIwOjCnWfRRvZGS5#bPm9`n9c=KYxil=;V+2vp_Hm zqqM_MYUZb;2dYntkVuG;&m_cwhtnz!4v2CE^X^Zb^a*HI=-oLTi3{yujihu zta+rRmHA4eUEBXb+zTud@XBXk;aDjA6%9m+wW0+5Euyyu`?3zw(0f^JLfMu zFd;Hj(exh5%+6x2A~t;HqJKfSmzi}@=vAwp*wT?Z$KaoxRg2tyx(1B%-fC!dkm4>C*Yp$GGzZ47Voi#2G3QcvuA0qz%kP-hMoO1Y|0}#r_=KNw$oU{$dfMeJ>a{;oZ%<1rpT93N5 z<*WN`$XPN(Tk~Q_>+c<`+A}Ev`HII*8eq~q%*s}d_^99#H_DyE5NUV9)}%bXzr=yf z%M|D9I@x{Rb>lI2w>i4MhIXdE!S$l($28N(7fW=8BUsC=nm9z~U`1B``$zV}HI7Ou z)TI$};|oaTpb;EKkwOedDQ=BFpR2PS|| zCP*!Qllf{dW!r01^+AE!;IWtUcl@a82xai9L z5gMJ&-=lBR)=vO4@@pu{!NRsv&|I{!;rGMM)sF#m(^lN-Eau!AauuxJ)3UDU8tEHJIm5_R47F_i&;(L5Hd+O&THY*TANP8`Q9v2C!sbhqL@Jne4;kJCXGzuYixBFv2_F$fzOUv7H<9b70 z_Y482O(dkvPHl5RuozZ^N2^exrO&G-G-=ZVL}peR%$U`c0MqRfq8@p9lOfyk4%VjF zysO`CJkhJ0BSPj!xUBE<{-s_HyUnIjgT^mn#g5mHF(tqce?%JK7DkcSwELL#t~@C^ zX3M#9G&@duEoy;7zNdU`SYtZDP0kcOfTrYw->TYwFp0heA-%4%)`8U(<4W=S^G>bH z*(fbetu~erzY3zWt*UNteXOV(5oLKM8T3>+DLL~l1&i;9MX}{?Pu+sAuUWd?*rYz; zNL+`zd0ZDCw@p`UvYNZi$$T#so3ZSu;1aXC>VX&dCm7+H{(2idyW0X!6Q+Ol(|zO! zVKqWzUMORer^Ou=Nn&h#wH=5HCPx!W2ti)2zB z%RH{5i4@)az377C*v2dyvqvw&T$Ozn20HEUS6`W2_AUl;VCF?X5fE397T z=5--(yuGO65P^8zlLZ7Jiz+53dP)xG_;!O|gjw>!O8A#D$3+YLYa9Maii>NoVc<7K zmTtMOjx`7t2+HF6)^2K*q^~hjaxZ1h+bWts_9!>YaW`fv5pP~QtkkdmzqtD9fF{?d z@c{w~5{d|jFqtS4F!H`^fxqyAE*INKc-Np!q+q;DKduFxvoD$^dp9~7VI8(H#Gd33Xh~YT-G>!M9`RoS4Xa;CjH|BywxA} zK%V^IjmH|x3xqvjY3;)IJLOXL!)mS{a0F6ly&4wTXo_L*WKDHc(Nju#PV|>Yrfo=r z;uYtgCX#mVXsVV#TiN}4OMSI-Jwf~459-Qyg?&u@dH7Fw>4Vy0$?4I7&!c2e<_cHA z9-R&7ts-%~4*z-|6E)7{3yS_m{@hss^q3^H`wdkNwLoM+LVVqA)D;`{IZP&gHH=ZN z0Ke5dUCeK4QxOBOF5Erd-vRtFyJOAkOa>lWT2Y~Aee-6= z`WlT;x0;VA#(@v*-aUW*{0JG!CqakMz#6)AZ0x4BgF~kyn&&?&(@4RhTSxS))IjzS zi%kAFooxlSOrbkx?vKjPhl!Iz0gAlzGmwf<3Vg@cb5Nb)G?UO*DuxeYBG2r7m7I(R z-)q40SK)vaG&G3IBLXIziM2X>l$3I71edmj>rk)EJ+d1)DXr(<_3bgJ$1lvcANZsE z8Y7@r`-bjdK+D%Vh-zlYhzc-||NJ*6WfkkjH#4UV;@KcN7z5Ry-6!v#UB;qF*PHo_ zpEe}%N(3g?nN|j`3ofO``coPn`6d8Q8_(R^P~o(&l`CFAW_pPFd)ir5aNbqyfOf~_ zU+yS*)IGbfAF-8I=f<|++!obA8Lkd}_0RoGfB`kkn@`o!1?RdKENs7F zwUEZNk=H79D4rNCF)Cm{LwTD8IDMFg8&Iv84DsVY+DX4C@ZFT6Epms7pnQ6CFGn>9 zQne?^?-haKB4f&WSElVLGZq|^Fhgr9n6V+LQK#UZ$3ET=^xKW9tAi2*LjhsbNF?~Y z;3rrW3+%*%@I(vYC1*#7dFWDZ;F5lhFNfYFGwcvJ-qP0AHdOymWEjRL!~Qg`42oAZ zxiL!FO2mH$VP5U8t5RoLaID%d2$tpU;huI6dj{U+{dM-x z7ADnrl0v#&pM5QJh3~`}Z!p;c9$&bzOJM&0*MlE17p#6`uS)0H|WhUnR zW;%N6ntAjBoP;k93I9N^B;4!s%mh8#R+w0I(*tnJt-)_?~dJp%}J)Ii6S`Dqs ztW696ryaK-1tgUF4htQ=$@?-9N;6@0B2YS0L6gtY((-v7=B}oRzhD9;bQd`I3Rs{q z0#>>vSQVoHGNyd6XOX3yU6>5wM0^dj48jMQT3T8Ozl@%l`}vg)Xs0>}B&!bbeLZGF zvd-gfJ0?+MbuU&&cP_G$yWo4lGm6gR_DLv|#9Th~n>$xkS2S-4UBiVxe;XiSqguPx+gJPG3zF9mth@qSkL5UZ5 zw6%qX1+le#D68*+BP&DXoeCXaNCaZ9Diwe#xE+RWyO}*FGfA7lO0~*`Sz}DY){A(Y zwRv7Wlf}c7q{6q(UPa0CZSIPNBN{jH&ec#WM)x^-GFT}%wz5~fQ|MAg^Z}OcJW&&N z9k}(V)WD~LBG4oI)71vdQXvKeVA3cFo&;FE5xQ)ktFg!cjaJxpFuaag#xdvOMo{yE zg_x|RfN4f~Vb~>(3&vICf%j=vRNXbp10T{FUg@6v)OHKYj5f3mH@-YW<*Q4_E#=LB2 zmKO%-;i$g)4Z)Lam!aSX*)kmy9B|&SGQ*f*{COF-deq}D&+4}o_%x8dNpFOTJetIK zqTC(~Y6oK&be6#-!D1J_7?xYb+%5{9KrbSI`1B zzK@?FyThY3b3EEW=xA;;6aB{t-ud zOl&|_aOCL&IhPz10S(P$pbI|-p7P0p>Q&0aH)3#LeQ^Iet!=-WnmOE8PnEn*-a zItte}LB{0Y3An|`izsZYtd`)BWQEYKZZru;N5^SKvpiyc)##)5EG|kk0BLoo6EjsJ`0d!qi@hTNS;Ig|NT@;(5@~ ziW!p%@JCc|w_d?+7c!el{m3eSXy4y1AXzX#=O0XV|Cvs6XxI+_okx#CYCu17N*s!O zrzOU3RYnwrf!Aj)7wNS#!WSCkBsMf&v%f$f{>=^$2{D<0%qvZj2;{9>LV8>Py`G8g zRrfBE89Q>+8o0|QhOqBYzc{BsAc_!KZhs+4o3M z*A^y-%%VRLJH^Jokxt}ie%`NhGF5uvlSUav2^E%%2kQAM$2fR4tTyQMC_YFS!gmw- zRU5E+!L3YcXGnxLrfAQ8{8r;;R_REQ?Mh>ma#gLk!&39|$?cG~(4!J-Ta3jR# zK1-!}Z&21}@(c6(2GEUC#KH%hlc^IRH!k%(3p);SoRQ^Au$Y8>Zrwxr%`k`PfPfz#;RGli%hEv&sG;DW|6k#~m``OebHd5wwi>p>YA z+g*{xwAwXCDus}CQcfWEg~pt`ib4Y+NZ+ZetU4d+melEBV9xn*ks~t;Hg@vzA6;hTX{_gZd-m9JwBxZU|?*Q z4nDaPPV}W-ed&TvJRf(q(REWE*UR`7ShdmSqS00KnJ6IQhp*k21#Bp#~9CA|ue`7pKcBbhu*On%QiIAI1U?5=5MY+{k>oZJFD%8MAHO z-l!zLjk8$&libRghw7=mR^C~SxRu@u+q55Cx$?|ZQSy*w;t0-;A6+=%z1drI6MV^e ze6)XVQ@9-4Y8@V_1i>e&4mc7D5`nzg;VU4Ih)5ITWs%Q;O~YYi=0r83G(W||mJz@0 zYF*=DvsIVJQvAPOcW!;?5}kdnXuKSeA~?i_ja$QA)V7BL3fixCm!ngGfls8!&qr=< z)fV<+-w)cBWvT7(V<*kNf6{f4P2RthpuMZjkm>!LZ=vZ}V=(o4a_ClhkinCp`L28c zWYQE^SbS==yI#n>-Esu5RXg{v7e%n??LMT^$-g;5TY-DVUiXpsl1wk#3Y6` zwk}5`6(21ZjeLZwT& z#Gik$XD-!5rWyHB^`?9%GA>XbS4eSZ)k&f?DhYMf{OC7957vD}(X`gR{)b>b8-d^K zn$$~_qlRyq{s5bzemntd3%jb=cbP5y+5{oWb!~#@lRvv4_^+y zWvVvZ3jBfC$nCxFzB!S^pdry#86HqW-4I z9a*g>hzEv-YcaQk6ZU}-0d26_ydhEgmDSCT<7|qe+eq0xO_!P9!!nS4hhB9x82K;V zzVrg@jFX7g%+U9{%;U~cd~EQzB($Ts;L7NttOHR+E}b7`=OJ@9IB>%nf9nLMp)v4X zE!srDgN+&>H*av(gI;ux=A}@s@uQ|WS%<>vTeqiZz-OvJF*uwXEa-`x_fH^*#$iY; zH;n?JPWm6GTRQYT%Thi`y?HgmH<^T;O<8Oc2-Fn*G=e0`9Eo(vXest`s60mO54xDwN1D0-*iqs$c^nWx=v2p$J zz@J;G@0~CL>jLJM2PMK=DGx7jn(u5TV1r&Ia9f=Eka0JcS19>~g_vLB1LCs0j@`!J zj|&*7M%^0uUn-b*u_sQc^qLJqmogQ&c?5dTs(GaKAF#i0(?_AEcGJGFn-uFJkY?WLWWP0;pnW4~AHUHy(J%}29Nj_I#SCj*z4#c$hNXC*JBH?|%6Pn#^Z<~n#0=EnTnARne6jscmN5kR` z4%z-8Q6ZO!8EwOWzovQI-1l!xl>5AVc>|<5J3Sk;33&Pn>sCX4fOlA#6OJiSEbzsT z3)eQ?+V#E)UkToiTmWmf01-2z!2dc9aPP~1x8O>8xUUS>=8}O{BidOi@inpQAjCWo zTA4;@tNgvOeeWNj=V5bsYo$8(d9cSuB6RLewdQYH%*`XtfwVw)e-U#df-${)>v9nB z(Q$FiP@C(t{WP9l&`4AqIec0(%Kq|JoI3Yyto25~+xo~wE)QTT3pUN>_L&E-hT@y@ zZjpH&D(ub!hJzp)!8Kbo|2sA#**k+SBP=YWH{5g zp;5B+upQ{+_lvjWO?|!nefv1}MT*A=7%Uhy5t8*nSF`g4mr6KO39>d(Y96X3rve-f z7P-U;G(>*_cJfXp#J#9@IRs3Jk48glJT!2E@Bz?nDl*yqsH+CZBz)JU5@)%K!E!4) zHTq*dX3fW*$ekkK9*kI{awSmjQO5E<@^x0CNJ4F(TcOQ+GR&v#avz`i6MFUN^E4B* z1x+IjP-!8EByB0SOM@I`B9e$X5!ft5UbwQx55br)Yk9hejA>SFz>`GuV(Q7ypsNIq zb%-ex{K!g(=x5HlF>w};p6ovS86*?|$I4-r7R4kN7lQAaW`@8KK9|E?DqjfLjj#e; z{lF6833+0UFzQ#h4h@+7;&+h~s1B@`lis8iH3S-yi|fB$cD4s2CWor4`Vp2-2?LqP~@+`5LoNInD1OfmH|m5 z<)2fuAquS$2LH@V%avfU;}psVkMuAK?;-TT(*sLag7|b45uK_&!~U*2ySxDtZb1jq zl_sg3n*56;ZsTNoU>b=qu2>#2R z`txDnOTBS#Xwwu_A#bcn2DZCL#(2^~uILisTV=-v!!6wzoP&Rq=YWX`{dMFOjR7Hk z#$mmxq*z8IlJ4$*$}<}YB@=2^2khUjai7R-<2?%ampdnk_qkWD^u3oA!{UdG z=KXW|w#0z;a?!x;D(I@2i6K~4AA5el(P-W+;KI?W7n?kN>>{jCf^Y}QKMr>H+-S~J zS{AORN1@!=1U5Ow0p3t7&#uVK-R85CS{8cyBSi>lMw#R5--C>c>bH7gRAHWPHnyeN z`PrXs8O_m^jk$9sxJ!o`mm?wBXT?oe8dSF>rd^@*4WiIMBuZcy8K5@#hEpB)c zKBNXIIJ*MXz}dA-+#?dfp=tj#1J@N6A9HW{Y9QMUA3ci)nwJUYD>CjK2+Af%eCe== z1szGp!%CX)m{R!^y<*1l%)ytx!T92p@H_t!Hn?!=N9<~|5{dBl&~^|EOJg|@jBi-e z14w7pij@b!Q8LEO;GuBsDlvx|HFUwN6p!)OX$?t)p->w78xtB79!$}4#htHa8aDr? zEu0G0*bI2Lj2=dRDFopQK^6Pa09OlRD7dm5o6=RoOq21JcQ=lLbEg!(g25|}7ezl; zkYr$7zhPZwwJtRHK1+Un^pGQG;ZhJ6lNSFAx`P4>KEbtUs)c1 zK0h!R??J+9wW8=3-@hm6IL~aX1WrzuvD=!xkz)E>veBnD@kJMDqQ$+!!vHLq*~rJC zCb3qP!2MNG{UaTlWNc%E^la-9yJ&s3+i32nYBk7vDnbpGRV+xzl=do@zE2S7@Y(wdA-3wAhrZfusDX=##SLbT(b>kZPR%f>5kr$V(4fllCr{n*r5=Io zWS>qDM5Yj(5&y*EiM7raAk$jYNZG5_WWY6rjCKgPfA*ZQHUH%n{n9|wAe&KW1^8I@ zg|H_7XlJ=f@e)HJSxeMq7f^m+-4m)dU>*#Ym%Y)~VNa{M7CN4XhZ&1BxpVv2%gP#4 zt=xb`;XQhcbJ`Wxyvx1^oRIGlPH&%iY;_ZMc4{MY3J7b!JQ}K|0OKcO+VjFGQpY= z&<3{}*ir6W>ycZ#2EaWNfvlB#+vI)KmWckGawX?MI6AEPSiOo+b47RQSio;oaIMwH z1^EHKL?sLqGfFGnK|XaCurPmozxtE`P&Yu|1*NNW27M7SMgbh3JJ5*kd*|yuuK)+*i)P~apw*6hrlq>Zj07vpzHA$vQ6H{ z2vpV=oh2WsRs`^l4~$*G2aJ~|@tAZJ^INg_P@Fcb{RsR^9!%U5kAdo^i5d9a4dRIp zotfWhKOkbjzx$sbq|E2s^qVmhk(MPRqL|+@lQ%;XYBc@Qd zu4Kaa$B@agkOs>_i}}*uQX??=8<*hA_Etr58yMDpwS5jE7`%$e>1SydPr{)`4-|1LW(DI`jf;%;? zLkBW}qJ&XbOLqZ-jxuP=qFrcOjni4tn?KiVqD~8$ViUq9JrZs`ntw*R`tDX!R58FM z06*>uH_#dd;Z|lTmKQI-V@HumDAR3C4nIo9WAA1w$$3$JQ^4qokYzK*N(c=&gwlXY zV%ZuWUR-tLy>Pl4|Jb9uC2RQ=g=Y1|*(uSSi3j38GlNCTH*}m*b`T~cejr%Ut*RdM(HtU z`-vh$>1ckiR|~oZwj;bb{&C<0_t72HWdTX~$pK>FGPOfK`O&^d2MXbZ!I0rJWj!|_ zO2)zVnG&$OM(CE|ksxy!mDsHC|D209?cWmfK-Aa~c0;trsjWQpbE_)Q?s>s4iHXQ% zz>vg;F%nhR*!aXM$CLr>ium|%q2Xszh6b!SE;9-nCf^5}bERW0C$sOW+vTH0on^wokKk*=&C<*L?Dv7A0S++x`@ zm~$fyQj`ME+Q?qn3h7&C9owBt|6oS7oBR8-wJg1d;p#SO4IdmKClx zWu6;Ocf3=9Y-iwE6 zEY^li_a1yj#NjrzICLV`Hk~Tt9ucZ3&p;~Ks1GG^)QTQjQmps?WfEmJsA!BXk*P4eEU5k+}k!3nH6a z=%_AgpT~d&%KR+;S%oSru!1nD4@l>hkVFz%vh&h*=5c5g0sT>g+OX z?PAakmOQ^wv`}WhDxC+ZfQ2#CtY7PEI|FXN>5j__6mr`dWjWUbo(gQpPlM&e>I&=Y z9SmS)dpq|#M1Tx!LbYyQ){|h$$(uEFoK5{ONi$46Agj#vipH)j6W$|G%PHG9VDSF} zU}tbo*Tm&a2X`ayCJ?L|?oAeIj{a$s<;?$O4(o+?ROG08;V#(NNO~g>7*?>c|A$`k zvprS0Y-&0rrUGZhcM~`znKliWK}>}NUy@*wUmImjCfX`@Gr`Bn=n5F+&B(Z5|h?sSd0F(2&Yo6N9B(>81VCjrF&nfFWLv|TAc58BcB?`n4@9AyHfRU zN+;w_+6yH8Lw*D>)=rXtli!NV$-guz^Le=Gt}Z{l?e8rSpx`(NclSqEEsJ|5AA#Rx zFVEP`{3kb)v)8oUHej$m;SR!J$Qy9yW_GNcm(^UtA`fwqm+ek0;vUTQ##E!5IpOl( zZykCzGpj*DXvRsiM_hu|w;vCF{y6b!zHOs9#zsHcPu9Y< zN$r#S+mlD$Bxn=?d@M-?B-^)Q5QY3!H0`0qE8V^4LRBw=V)*6j&Pecve|gL6@3_gP z8<3z!_Pbuayj0qO!B`4<#yu2De){ScqdssvMnYMIw!~EB-*MU`N3dzrr!XT-m+HGr zu)Xh{LuC+Nzx_lFq%}pC0rm;#`SgGRKe~1qMM!rBI@LBX_@H~IG#NhT3oqJLJd_^B z4rXc?1lO;Xnuyf@i9#a5h&ObsBH@m_d~rvF@TI=b7I&14KM01DXd}D_c2X{+ojBk3 z)0aFX%P$SUqw@xHse!Dy^Gdl4nz2v#C%X1yy79YKZlPnXc`0KPB#-^H6;?_@)W1I$ zSC;**NVPs*NvCYSE`e|lS+7fSu3md)?mUCXtASzTPm&&XOP9#DIQ|D+DleCmN0Zu^ zI)Zu@co1wHtx^EaY#kxH>X+W;9~@g`x!%6i&#YeS-k>M0JWOVu9oI0j93IQXp${XU z>+g^_w?Lc5xwM{ZaOxlhP96m&*kgW#dxM8Xknz(*^IMl7E>L-KYP@y0w zLa&mJpAJ>+KD$I4-&SXC;wd7wH73Zhcv9K3U7`Qa1*jIx)D$FRp_Y{I&Tn@=aPHhQ ztO*orpEWwW5o@-)-tgy&QgamZ@4=NB)x(>$=0@w(-n#e0)Dn-P>ipERlkF@_j39#%JK!eEUonLij zo$R?N2P=-2y!@_BlH<14t-its10`#a+$<{a8>w%ZWt;nWu}o=j0tL3@3Z6%5k4d&OUO= zXiu&hu5;*Iw*@@{KUcypj!G4I$rKV9_zU) z(lMyspX406yh^kOr6O~L*satH&K(~gfaH!$4O*4M$FF99n{~GyuK=EccNw;%>ncy$ z)Q!eNlcrAY^rYY00JNKrw``2tHf$mUk$fbjYHXVl5@jP1?a_u_`=;`W%>W0Xhe^fh zZr(YUpH48&Mf8I!m(1u%MMQp0CN{oZE1xU018uwCqFflRLS%F`%sByeaX3&*V<27p zM-WoG#@Fi;eE-&Zg)O#|QhHh3JnzDuwQ8;%>*MJ>u!;!H_>vD2|2ik5%K}_etit;a zU(5c171gG!%uQCa%#-|Q1-W}~*jCUb8J1L7;W6LYpJ@Tn_|^ia zS$@X#xMZcZ$YMD_tSVYb<$Z}qMT3@z;5|z76%mY?4Z4!F_8sbZyi>q@+}P--FwIeSZ#Qenv@xCm;|M0{)Dh+qt6a_FIs+>umwd*%msHn+!*t zoMKNh8YM|~2a{O@ubbt4Wnc|}fP7MQXz_A%9C;uGc$ zh)dv1ULEmag~zoumjr-q*;RU{K!8hUBF%}DwvC3U%B#%E`YWaX*23t5kPa$i2|d%H zR4Wriz^%X=!N%`;aI;_;K$ma4CcTyA+I3 z21eK{!B*@?wR zp`VZnN20V($NCFHb_$iffDOcN0SEE_J5Iku9eK`^6V>R_y0Gv{_aC|L6O$@@HOz&x>M2mC1W3Y&^Ium#B z;&mvMDI`qJRy3kEorjR)ABsbz38^K!fbmdtE=}L5`|Kzg3tP1g`!nL3_Tm9ZA1{G3 z6>W>W=t)DT*`&I<34w4zHW7ty))OMv<0m_)Xl-_pJf{Ib? zXNDYS&>DX-Rd(y*eE*F28@5Hg;lEjHW(Rkh57Xe__t@oZddBwny$XU?P2lpT*Bg(0oWWT1 zSO-LRx^p#>$M!W)jS#qua{C0JV!+>UQ{X`$<}}Vp4J%=$?n%P|b+gHJz~ICiaV!7) zd&Haq)j8`msLAy};@lkUtM^xgsUNwv^dR%c(x9m*2-kY`=cpc+(D9*~>ns z&hB<`p7}ne=<@#9+vcsU9^M^3I$2lb$eW~lUXSqyD%1UKQvzwF1Ut?*$5dpwtyQ(7 zgN$owdg+i4isQfmtET-GswYaWZp#0>l<{=ghcLb zf=qo6RjGV*=MQ=oR_?J~#|7R-1QdT+^){)Hd0%L5eHwMtt?vGtRaFJVa$xx(6 z7f6PSq64e)Ay36CcrT=IlCNwKvZ^0(d-oq7dV{!ug|_l(U4E1G1W0SK#~NQ2*wM8u z8>V7-ykW=v!>RkOvidXj%USI8Z+xoB|1vzfin+78!<$g%shs&1FxNM6IZe-BM+4ng zd`&gA0vE4f9xZNvVXCh7bCtyX-&_?y{0~=)O`_xW1-s?2wcqfbN_i7f=}b0)^Hyu; zrfa}{no38(^G`q)hs5-RnG#5Us;UY#Di-(3>5E)VRn$Z%j{-I@^h<{+GMx z01b${!PE9AtrMw;kD6JJ4(=+AmMU$aUN8!X+0r_`v(hs!uQ_a;rY~Lv&yS8Z4Q&aFECxXQwD8WWLD?hN(;}^tkW`b)a4+P=(Y6R80k49Y`mjZZL zv3KO-3FPvn3)!+uBvgmNlHW?=-O(snrQ}n$%lLk@yT9Q{qrr_m$!xmL%N;zSmp@;iw^FMaGC}B z2z5K&E*C>XYStz~2Zmz*w*Im{kA2w+liQ^8lI1yh^W0;zMv^`er7%T&laUFY?#j19 zYZn6V)?Zkzg#$05J3$vC{rlQ+Kn;Vf*u%2sW@egx<0IPLWh(Ke$0$P~($p6iQ<>nf z1OLDTewwBfVkL&l|EeQWcOrL>0sG=H0LF{F^vk4ItTNo)av5NQ9L@$@E6PkmAX$OA z(+_deYL;RM&=Ka|oN5&c^ZZNo#9me(23GvU_rn?PZ?5rND}^WPFEljn(nn0h8$1cB ztDEHp2Rzwr^Q~g*BXJq&V66(@(@iqpBN$}SO~f2@p+2Os)-)Aln`2S~A{V8h(a5*!81S*N>i-{sUb!SNE|_I+te^knHxP~b8Fuv|c1lQTlkKKI{qO*_S%kJq-{ zvuDT>*k4jQd`CLW0A{+GKWBrJP!e%}^lc~1-#zAEy7B$&!D6@N1_~}|nE*S5H41zd z7PuJU|L#z@XAawPx1qzSq7^V;hCgFp8{+?M-iNzBh^y$TMF1Hw{J%ABK;`~Ae}2o! z!Iy`xJr3ZlC&>PXp0&;-YPM@DD_1+XnlE%&fuPSIZwD3v&o{Ss3P{M1+_Z@p3s4jC zw+P*iNF%xm1GRhXz1UGt2hEpg9o@OdSzi5UZw(03SovZ>HdtrLCl7KXXLd z(M=bCC%D;m_A%D-GPRNz8v^SZ`~WH9#z#k4oftP6rKOTi88_U;nZDdm8$dVD_!c`?Nj~)V5Ae=g0}>>J&8@jb-xvAcG>IAX%J)4 zl-cIDN5+orM9mi$oS}_HzRMOB0QSk$k$>dmP3asRZkjz=*|4X9elo84@aqghTrX3f6QuEHD6P3i# zp^&Eok55)nr1bV4>0e4(NkQd(e%BkY|6NAL-k-)nNQk~-cVb=Wf#wZjPi*NY9sZbe zd;m3{m8eZByFH*e-`W1{+veb9?`o>v6`!Vd67%%d=$o&?7U;Kx8Y<_A?NZ@T@3GCC z5PiT=K!Yr4=wULo!YVKs3NOoutLT*>a3j<@)Fe!nGZo|^A8fpT zhRe^|r(w^CJ*W5Irk7eL5GqzH2U9Ix!}>!I4+ua8tWE>e3>x}*vSC@wMQ(^OUip$A zr*26s+`c-1%*px(+#?_I+k!Y5AJ#!|?G7Fs;Jgpz%Rr3|?HNJJuxiP3ZE<{WVZ%e} zx9)5%My80W-STB!7|9!x#*x*s(N^fci&f$A4VcY34y zXJy2*AhDYhTPK!#`A-Lp2$sCi??WJE4Us1{Kp-aj7@`|J=WF{-0JQPS!*HirT)_cW zpsN1L_*`Z8TWNFfmyT><68T_6+(Z#qfyCx3;4eIUdMszddULe&@nkai$UH? zgo>-je;{p(NR)@=Q7dd0hEMeJn4Kd)3Q4ajxk4WXVEMQ@!Dv1`%}Nk z9vRBut<|TBcsQ!$^j96T!nVmut2HAL)qD$`Nle9w;8Y25ug^isT_kz{Gt?i78*PQw66`V=i~Eh1?l zaB)oOegT>ljV?k4Lwdzkk$0a?SZh%52z_+`q zyZl=G7SB8)fRs2Of~xow3yaM+AfCV_p5=$#&Yh;CbNRJnkYBb!?*{IPaXV(6<@>&^tT(09P@Z2d+S3Ur~oULz=1k7 z(@kgFej6BGSGajDxLo!tbFC2%zDRlb4KD6J{ha}q^-fXS!q2uTBj7k7%g*>1K1crE`zBp&Zs*8_(z^HT`;Y8~4CiZ64XjH5Al?zH+GE+0m^MLe&k(`B&q3Z zdP5J#a(tQD1V$?MgKtMOtWdOd6Z;SMtx$ygxYpvv%#2 zl7ho)C6CK)&zpD@veEYdZxWF0K!^eGQ(}tEhbmn`-iC^OOfoL~y8EW@lEj}iUA57PMGNY%RcKKrA4vKJoqP|-YS5cTqPzJ5V)^RE4-WFrDN zqy~NgeVcr3Z(*PjZUx)x`aC9ki;Ryg_Lg8p`15qac7rnJ^wBtjr)HkVqwSPHii8DQ zAG<&rym+J0V7?ZlAra^`Z3l{FB3eYpD}+9Yp2CmAdSBpPz{L=oOxQnP?4_8EZ@$Sf z_y`=3CdV`xe9XLWn=D|GQ9p$;x+kge@V-bJm33==l!yg%Z;Rj82eaFkKJ#Yuaks#x z^~80b(I`>-z;_N5*yhzZ1@qnTDn=-n$sL=oO0IxhZugoWEo;5?cxV@cqrztW%e=L>Kxcp~Xf4=&cgTVIQ!>RkP z1`TG|`~bmu)u^>E(q3gfC%;A5LK%7wmD{@s}}IQZYrA&h~1VGElVV4&TDU+94A+R0f!L&WE4h%s4;Or`vuSJ?NL z9E<9gwD+bpp4=B1s1nk;a80osld_DPJ z0@R)$@BI%h__J$=Cd)G37w{;+oUXOuhs*Kv?Up#%Fi95eHf6AVUf%0Q?`=!I1yrWs zZcE!<3ft$K;nCa~n~^>Lpt(-CD_ZXgMg1`$tC`_jXJ@dFTC13y09Mlfy!nC+MGS)j z_~H!ee8@Cgp-IdUok=`@&+y8w3V2=l3OA>Z0^{Lz$HeiMnw^{fdP9C>p@R07WaLQdfcQ{~nI^Il!_# z8%jXitse3~CTojVE6Ih&zehygLa3qo0(oKwkgl zL)S?e9h*94F}y2xE{PvCq5GFHKVhaqS;%_tJO4b$FZqse*8>NO0k7Z+F{|V>grY;l z!@?$Qi~hZ6p=zzsRvi`FkSB#Fms*v#;T62OATZpXXF`^jW=UauKw+8lVu@}DAfRJj z%FrC9zOHCx@M)tU`n!3DvkR;0IPnn|%!#V?`XOZ2mz;7y#`E?}_|en&^5B!9WG{EHPd5$wxc_1LDf;ZLk$n2fU-w{vfP)dM4ZUBqJHck!Q?e=+!M=rW-Y(f|Ld`|^0G zxA*Z;;a)^4l(prig($LQn@Unwl4MJaB_VruVw7tM(Mq9FS5cP6kbN2Z8WXZFV+q-k zWsGH(-+2$-eD3%4`+Q&b_utQ7&dfQ_dCv2kXFbn3GvG!e_W1(Y`&!)J)*EZAH`%{f zIE?$07^Z1=p8P$8)|Nea#6K!3iWm4O9Q%yE=p#;T+ah~J*D{sbCL(d%@)1v3J$^>; z(cJb}WuNT#qv8BKClijZAU)?aXGk3jrCut6teo2`{WH%!~W|-=#>Dq(@VPYb;JLr#zBE%2}LW z3ib4cX3)PHtyHw9jNtQ@{+218|2?21&!yDT#QMnKU%n-;vEUt-4~qv6c8i#Jil-ta zX}wk0+0kf|&K*~8e|8(U6_&6};Rji*vC|0$Zhy9<7l?Qk&?HgzJBMy$y*+o!0=fMC z!{QrqQxbZ&Gl7Oo&kNjZRxP;_d^tB>nNq>ht+`+PtcxEJs$g#O%NR}(-nljd#xQD^ zE{G|Vb8d69e-p>`Nw-qSS{k7*o1&;IoKt)#Yz#fDA==>1g6G1wPgb3_6pyNC6uR2Je@>iJCmSexSJFU1OOalQ+!@tw~KFlH-A`5y{?FOc~8Gpec; z;n~NAdi9Ft2Z9aNEG(SvzVfE24}U-Z#k!s*w>0f=s+A&VTy(5T#-(a zZm~Mf>vZ3JdETbocW`*;cLH8%Kc(OiYM3BdB=yxa;F@k#m!q%dSh<~UAbA4md;JPn z)Fhg$>DW#mPE6sh4)&Ym{Wa9k|ES1G(Wj8Q(0vZ?Ol3h5-hEgHBcAzK)mACEQ{})y z(Ub~jW>FgC*vaG#r;2{fugtzfYgvvQKB4GeZinO!b`z*Dyps<6xNY8mI4C>bA#Zmh zC*9k*WoZU`_jMPn5N~hI6_G<{Ubr&U!t5`V$h;7VG+AThh(i{Ug;z$tUviJ4pQH0uf7EG{T)HTSph?pC3oi&KX~mg} z%(@g+qaP|YB0XiEN3*X94OYA{`|Pnmo%3v1g?SlWugSEn*if>D3?1Cg&MFlH4$JvY zl#%WclK_y-oPYSx{N7!@EuXbimd^JabuH#J@*F6O+HO?*`n2y;UzZVEZs#}^x3bU- z5jw4(n$uArcv`p!ahPq6VcVvPz@V z6pXyn+{Ns;l2Zdjd&)7i-&p61xxec`a6g)M)D&BsrC%tLyoB_jrAh&X!fqR&Thw%Y zF8-y;smaCbL(x=yqinx$*RB1*vBuCl<%;*%B?i$jZK!@|3V z6nn0M2cn&`8=;7@0%{)9ddpT)`eafE0qjo`Akar7smVggWXyw@yb3X z&<+T!Of!@RIa*Flz99jbVxCiMY;5OD0xrKR^a{%+lX48t&F&sZnJ7{<@M`t$w%V$6 z;D-|HPPW-m+qvwdztA}|DU_x6Sn;m!F*BUexCJ9DwxhJque_UtruC>*8`uUewB00>rHX^v|>9gk<2ePb{toYRb^Z9_~s@TlwWRO{7zas>Q;- zi{1OWlSKT!+>Y=pnU$IRdDhN%iJzU;ROZX_+=$!6CSQDQ66FywM0WIxhnG+DFKBxd z8!oCIV;7z5&XfKlKuDteb?=q|YllD~+9;Y<-7GTnW?GP#=U9xJzj(ZPJ3?2{W%k{S z7((xOd^P<8OMJ9;1N{?U{BO0U!SzmB7awKzS+!CeZ=jA>9gcpBCbjB+T6t`KI{sc` zN?Kap($im#%WVGnQmeH0%wb(#lHLZPCD)VInbFF z>Goj+Ps3F&5=um89B&2v`f~V~cKsb{W6*?&#C|u~TMv8n9t{}e-F;7T3rx}bot}tA zyv*_BDR3_Do~9qhbn>iXAaJ788>>5qGA^j)j~DL?&Z8ILR|+1t4{&q7qMR+qV{hhF z`Pq5RtI8_ThNGzH$CK_)NTyE!MaS#1!^%RzfgZ8Q1$B`{@n(>seJ&u22Gzo>I+zB2 zT9iGX3DN5(YV8iJ6a~t$L&Vgbi^>#HGNBh>JWn$CrwkIR5D^@cO$fKQqf3^NY(9#3 z;cD=@*3xuxzZK6Z3Qc`~=}4I7WRgfgBx`LD&wkG~q8I14PGawH^JipfZ>J(Kvpf3#6mZm-5|QX`DXDwfo(ZsRj=eA59a*^z~QI?FnV=2J}L6 z4+95st#qmGUVz09LUkDwJ#@n*XL|M*`@of2~dHiSxe>yq+!=XPTc!_J|whK5wsjTpwR z4{9J7PAA-%y=}8)#?Z6^JND_$ZJ}>pcy^BNR?xTenmPe6N zw$e|ZKHqDfjHi5mwq@MOp~uS^W7L;d-hO!)rB!`6e&zzR)#yZ*cTIs7a>lvx9-qJ3 zn6~94wGHVh_mW!|9DIqpUF5R75Ias#&T5#Wa0$6ax@|2Y=yllfRIWcR=8N=TlE@{Y%6aK-W*HNB-uwQje60h$4*}l$9hl< z+!KZ`Y>%1)7Yt;+yUEkWv9!?2If70YpCoT!y_1UwGyVYexF=<%Isl2_sHeyC(lm+8 z{WXf<6b^UE{iR#IwGK7#FmRm@?n=y$nC2q<#EpEhKkBv9YGmWT(;#$Cq^(hWh<|dF?tZeOSjbL=1y_Oe-{+7&P9w}p&GqTf7;Q-ZyKIMq6&&bTI zJncl4G|V_ZxqIi&DkjcJ+J5~Vro$z!p#UdrHY?Ldio*MYOZ+#q$ne9=yg1nfy_AP7;~l>^lfq>g6ok z(%#+I!D&FXy0YcxkHwyTww8K8ol6*X{FFoVqboDw(xLc7H4#b0M5r}dnS@FDI;hz z%li|nZVR654l#c6!43z=>-mA}WA49Ge^3|rIt!J2j6nrTi#HDgoq%%qsJeTMr6f(z z(}6M+iOeo0Sb^)D#XSY{5U&kXB7uLGfL{Kl19oZ4ZHeqYk5-DL_=nF``t4uy4=b}R znen`w%W4u13=C{LJ#bpZCIcu4XhD!_bDv~qEU1y>N5vj73T%V1biLgL9G31G$A9uC$;_Hh222h?jS`2Z! zA%+Je`DUZ>pZn6)C&oK=bK=GXZ%E4**2zCnJ-%%D&U>W4RL_@bw}}%*QEO~B#Fl1PvfgIkg}o;QLAb0UYFBINy5ZFUB`Kp9HvFP~B#MDmhjD%M<8zJhc3 ztHRUrl<i7EgA2+xOO$n$A$&rNb?Pv{OrdG;yANlXad?7{m zzwY&>3Cp7$96n9u;f7G?+G?4KSyZpV9(M-&$JC@dr>LhZs(SaEThXMO4~+?nLFsr} zIcw$0-!b&$D*iUNnxa$zd}2Z5qd~&ssawyf`L20e&dAUW{uV)6vT0n@vU<38 zuU>_o_mAi&;{nprY0F!ZmrzCav5N{wM}%pL!Hugs)Hs40<804xYRu|oo>i_+r}e6b zzWin@sPQoN7L+5Pzp-TYzeAI2Rjv!F)-pS|tGV-K1&0{tn6&nM{YBDDfOOj5pe{k= z$%#t0dy*NKD&bd?3lu&>?<-cY~m`Qqg2u3WaJN&h4*Yvoxz-a~BeWX|RnSy`Cc z)xB^UCD3s48ND$ntDNS#s2W8npp~K3+L~9nGW}TsNn}~it`4&y>T@64K^ve_1r48E302f zE{FW85$%2<+24Q-8?xJ>cb-h#z9r}m%>oDBUrUJ|J}-!`Lm81~-Iio8LWOpqCe1I6 zK}7A7B0Dq&c%GD{#riF(I=171!VI!grkVDC!gb3^ByUx#82R$5TxDfadLqu+pI+Np zZcnq#*{!|`G5l$#Y|VQofVO_HUmgP@PFDmZ&!JdUj@rLc$~Kg|#3zQhSq0fY^4+cd z1?;2eOyYHl_6-6icO{QvjjRG(*^)wbgS7cwh_6Y^Teg@VEj(~7*R6$UQ@amj8wN(> z`M5>)#DkY-qGDo>eX(` zt6$`oD$Dova{LM!(2WnqLx85SO)G$(HK8hC09t_ z?K~%}=m9+<>|0|yw%}U1)Vd!_9>iyRYE*y#FH2Xl_DDL6r)_kRF}?HS-i_5G_uQ+1 zN6fRrntem9P$KJ;j`t7PX!S+J;N5}myJevOa-V{`e!Nl1K#J3wGx|-A3OR}4r zS65h^dP16EE1!@9jQr2v;ag(0!tS+CDvq*a4dQj6=>+#!_0HQw1{ni;Y3b##x)M~e z$_^+2M*VSke1dM?!c2gMIE3X);IrSBB{rc&kbXC>ldI;eb7RA-imq~JdrbG)mH0Dp zRN6{OORM41%Y(VX&RzXHK+(eIs)jd>p-I_m7-90nt6AQgNcZ`Tu|{lTQog3>F;h4i zo~1=2295H%H!$WM5SD4-r7J^GVz)aGzr9JpP+T?N$xFzZMC` zpQTozOLC>=oc#!;oBZaLNhI{lIR@fMMvHF&Xk2ZJadpnbQhOXqxLHCD#Z4qk0Y@xF zBS&pjKrLSdG7Na6;BWYrr*?b<VBti#`X<-tAs&4D8%eLvUZN_ zAN;+gr*rnd+hAw7+D)XpuK0T2$e45eWM4UZrl1dz+jH;IBFgv$->UWl=fI&*b(G(5 z%~JhK1)jN;o0Gh;aSAx_w{Ln%0OGm!iB$?amfIh7DlDaOQD_D09UcPt47I_t{ACz zMGGUvkK0GnBtqoJZ3=N;S8_Fk$ri!4MW#+YtWG&Sd)@YaBwy5B6$(fv))Z%;FM?d#B3gtAX*ZC0U3OeJOUhN-Mzxi69 zXO%k^#as5Z?R9FQR(ms_Nd-G*C6dJEZ(vn&a49}c<^hksq`8(7{e%y>#%S`}*sj!% zO9xp0n(pM1bNt1%B&TMUGtrLcOWB?Nx_`p4xUS71_4cc|B@v2q5qg0Jax4D%8 zrSUdbYg>kpWN}U3N=tl4JMmt5j0B2Tj`gZO!ap*EE@zxq1~TcPLQ3~uwoZ4HO0lz7 zf>$ekiA?YyaG-rja^DYV1;S3?e0 zX3!%=gXQo*iVsJGC(U4eS(@ZENIs-^%&8}7;va5dmB>;ni;>kGOVf=wTYW4}fRayV zYNwOi)tE}3p)jV?#m*u2Mwt&AwCc@Nr-gUVP;d((a}0c9euOGp%4&CSA zZ4W57!FH=%9Y^_4LLCiIsR4xY^p+hH#}*;HBoMey z4;=sdN0PO_Imu6z4t$Odxn#WTEMG)~;F!GDsT=q#8QijsTiso2#7W`n8gy{r8nhyL zFimj|$><$Ds;RG*mt2O!Am*}$Rb)DI6=PkkCPOaA1 z0N5HLb+;Z0Uf3lceqdqXF+X9gQbs$f{({pU%>hu76QVk93U`lgXEmrh&zWH1^RNTG zjULma%sAdi$%)E12|YHbxx=|;8)u5m48#Z57OGX$NV)`ozeLzFXzweZT19Vzh=nOI z=blh`P;Oo4d!X-hNcnib4+Bo(3fH&xOnJ_rqN)fU+)4;{>gbOq21}dMj0^|o$HdLX zuXC?lepxcu(#)usNn9a(7dcbV^9=kv^4W^+pFhgYWcpU8ux1W!;ugH1bG~ry=UI*y zbC#?ND7sIM}U^Fwu0!}Diu3Vhl@Jx zQJXB^FM}yhhP?3N13BTDSEV%83FMbn10C}uu1tS3xPA-ff8_P+n;9t`(jwpO0`8TbJ^A({$jx|3nXd4AP{r z7@!UQ+rMEv2!GSP6SH%j$%RT{<84ovShv;Z=H`F#deammc$Dfd3{xJ@L_jJ4?wwX6<5iT@OVo;n6kTIeM$ z){|Zun(qcdg1RzretELs<$D5zv(R3rGwI={*^>?0dhUW@5Tulmx${3a4tup|Fl57uoLo}FAUV%?_x>?GMpt{1uQ zL`*o2sIX5yCOnS_B%kSi)2(o78&hf1tuNFzO)}SS;i49kIh?;mh+6#20m||Ube)P3 zMCmfFQ>`nt#1(bXm*>`w`&@689o^W)NO0?CecwX2e%6Yoz--V3s!4!PzpctVGK^sNUlWOdOvc)}Ly!CjZvAuC7?z!S#)6nSOJwq9lRC>+|%%WzI5V z1A5Z3I;hinTGz|5lBwI9YT) zT%?hhpuK7-fxSvIsmbS>uFT&)wtw*T)&kt8+Fpk7dv(agfRD56^$Pt8Fl5tT9H!eV z*F1}6a1cBQUd1)5+s(ZaEqIWNk~ca2EW_=h5DS=H!8LLxOg~x>YnbXvin? zH|CS}92k5}QN5#2TQ%*3IGwV5ryV~*0_Z?r74ltQBQmva)pntD^8+7UiL1Ks$7OD3 zr}!B=1IjHZ_vfuuP}$W>t9V2R?8!QFP+ zD#5;Nk^P{7YQwuYa!=!@OxmUwhzzo5l8H7xY8%$g@dzkeSl1;j)OHC%=6Z8}_E4wn zx&i|FD1V9vZkiOmt%2PoO>(@x0BjWJCuj5EeqdPWR5x5JSY%z!0-HVH%bL7tgP~-O zM#07zZ1{;|*>Ka_t?568+4tRrp-2);%wc;E+5f8s)&XnsN$M(864;PpeCm;UmUTVA zb^Kz^*)`1prc2>xvtJiplbf+t>mY!LTfG?Wdb6e^l&NnoZ-$uuwiJfwm6avCp?}bN z4zISa3w?{UNXF*L*aYn0$>Q{FH%%68$Ws7Bz@!FfXQ}d21!5_L~WifuJF%| z?`ll$Y+?cSXy1khX1Qbwb028f7pD(xtl*RdZu4{&%>D!ayMxW}z`^B(f6xN=84E%aG#a`vHkMXrdg7ZLI1Xln{6-Xg5XyTg}Dp1kEAQ4 zMl*`vi}pS1ZA5cA4k05$UJsp4+N>7Pkqp=xhI#e!;iArag!Y-|2nPUInT(2fD_*BPQ}t$_b3$ID z`3PoiZ=i`mciq4V5buCBU#Z~!-9}JPgaMv!v=xL+!zUCjS5%lJoKB6%fq*~+(&L5+ zL~~IHr^hjrF7p_>!8(QJ;#=-hMz2FBP+-YPk2VXN=zj{^@S)SP7lop}t%aEyyjC6i z+)Rmj>(KQ_eVEFGFR7BDIm8IOweLv!Z+E{(eKA| z7@8TNN2poTc>n~^urY&=V4*UJ!dJnvu1Ur#B~`%9=v(4&nHUIN{!J|Luljb~ym4n; zrIGT_l)xGi_|3-}EX$#A&UKgb84=Eu8Doa&t-OC(_C!RvHMa4l#-0Ly86LaDj0J z>2)mcJ>0|MfS(Agv0XrOw}N^j!_PzOj@^dUyZ*LuSW5#cC-+=y+(L1=l(UVSwWl+< z{7xaX6N}`fOU$05CB}L*D*AHVM$@}m)+FExm;OfZ>8+~$WV5bIJV1ciQXiVJSw*^W z>2E}hZmOGyA+e&S@J{NqblE(NhYR`T$hzw$dB@rm_SQfED|yvoW1LGptnq;yx$$tp z_Q2asJ76=GqS&$xEHlD35BoPx`oHR10CFv8L$fHD)9ka&uw{lc?0-?pK+4~4jBB3T z%)SU?5P{$e<%3}>R{RGt0B-zmkiD*K*ec1|npIH*<(7~fB}erTJQd!|mDu*CW8o)fW7-dc(`T@v?H~={Qj*d9}+UR~4R@e}pm`!ZjLJ&VpBb zoaNOftKYgJR)Ih!lN4z8qrx*vDLXQx{P5v)?Xiap7w^5;T!;S?WkdYiUNyl}$$YHC z@{ke-Ha+uC7ejrTi|1jw*ZIk)F9WXDk_`3ky;)nYILiw;F|IIyIRZ%}algUyZB~;8 z+`B}zZa*9wW6V(qepH(9NRRN*TBk8R?kqkK${du7vYAdzRgjJ$4e*Y=bn;DaS(sUtRu~ zX!rdP65##FJYZ<`P#uVHjBX7~C1jH75@D507YV@QULzCw3hS?U2C=~!Uh{{A!2;py z=BJXdDgNZC1PXgCmNt1FZw5<4;tHzMzz%NK>up>)Vt7Zh@TONzII^m%p*utXzn%_j zc-T^kzBC*I0TuI1e`AKdooevZK#jbp+)&oV;^?f+@^&C;!%qv7nuS*btxonu6zqli z+V2Ck(r^r_A2qV^mCe4E&HA?Y`iB0T&0>O;8&C>4clX0O5|if|0ZR^~KW(1D&8@cW zFnEAT9=jMUkC@X|AK`vrm{EQ$Jo)hb|8R#b9gf1Y6`zvcjK4>hp7sX4Cc;8tnuF=Y z#5P#qYpA{1K}Anxv%yvtdjqxMb%H3*Xz!+oGPy*)&bZrDI3#S{wK#7Y3cvfJzVVo4(4}=AH+Na8H>Gc6Mz)kw$+DN z4QlVvy6}$_TZQz@k?_L_Ybh~LQQ^RuTmQ&(T~OK;S>`FVmihbt9}JC-sQAFd@!`|U RD+us+N$tw{Pv=Y@{2$!|2igDt diff --git a/starkingdoms-client/src/wasm/mod.rs b/starkingdoms-client/src/wasm/mod.rs deleted file mode 100644 index b306036d4bddf30b23e10932c4cecbe744c194b6..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/wasm/mod.rs +++ /dev/null @@ -1,33 +0,0 @@ -use tracing::Level; -use tracing_subscriber::fmt::format::Pretty; -use tracing_subscriber::prelude::*; -use tracing_web::{performance_layer, MakeWebConsoleWriter}; -use wasm_bindgen::prelude::wasm_bindgen; - -/// --- IMPORTANT: THIS IS A DUAL TARGET CRATE --- -/// THIS WILL ONLY EXECUTE ON WEBASSEMBLY -/// DO ONLY PLATFORM SPECIFIC INITIALIZATION HERE -/// FOR ACTUAL PROGRAM LOGIC, EDIT `crate::start` -/// DO NOT RENAME -#[wasm_bindgen(start)] -pub fn entrypoint() { - // Panic handler - console_error_panic_hook::set_once(); - - /* ----- Logging setup ----- */ - let fmt_layer = tracing_subscriber::fmt::layer() - .with_ansi(false) // not supported in browsers - .without_time() // std::time doesn't exist in wasm - .with_writer(MakeWebConsoleWriter::new().with_max_level(Level::DEBUG)); // wgpu spams the console, and this is slow as hell - - let perf_layer = performance_layer() // enable performance tracing - .with_details_from_fields(Pretty::default()); // ... with pretty fields - - tracing_subscriber::registry() - .with(fmt_layer) - .with(perf_layer) - .init(); // register the logger - - // All done with platform-specific initialization, call back into the common code path - crate::start(); -}