From 6c682ed1c424ff7057e9afa33065318a4569b347 Mon Sep 17 00:00:00 2001 From: core Date: Thu, 30 Nov 2023 21:27:31 -0500 Subject: [PATCH] fully restructure the client --- starkingdoms-client/index.html | 123 +++-------- starkingdoms-client/package.json | 3 + starkingdoms-client/play/index.html | 96 +++++++++ .../src/css/{chat.css => chat.scss} | 6 +- starkingdoms-client/src/css/font.scss | 43 ++++ .../src/css/{footer.css => footer.scss} | 18 +- starkingdoms-client/src/css/form.css | 158 -------------- starkingdoms-client/src/css/form.scss | 80 +++++++ .../src/css/{game.css => game.scss} | 0 starkingdoms-client/src/css/globals.css | 45 ---- starkingdoms-client/src/css/globals.scss | 19 ++ .../src/css/{grid.css => grid.scss} | 0 .../src/css/{hud.css => hud.scss} | 0 .../src/css/{json.css => json.scss} | 0 .../src/css/{log.css => log.scss} | 0 .../src/css/{popup.css => popup.scss} | 4 - starkingdoms-client/src/css/style.css | 10 - starkingdoms-client/src/css/style.scss | 11 + .../definitions.css => catppuccin-mocha.scss} | 30 ++- .../css/themes/catppuccin-mocha/colors.css | 31 --- starkingdoms-client/src/css/utils.scss | 4 + starkingdoms-client/src/hub.ts | 2 +- starkingdoms-client/src/main.ts | 196 ------------------ starkingdoms-client/src/packet_ui.ts | 3 +- starkingdoms-client/src/rendering.ts | 9 +- starkingdoms-client/src/routes/ingame/main.ts | 114 ++++++++++ starkingdoms-client/src/routes/menu/main.ts | 64 ++++++ starkingdoms-client/src/textures.ts | 4 +- starkingdoms-client/vite.config.ts | 15 ++ starkingdoms-client/yarn.lock | 178 +++++++++++++++- 30 files changed, 704 insertions(+), 562 deletions(-) create mode 100644 starkingdoms-client/play/index.html rename starkingdoms-client/src/css/{chat.css => chat.scss} (91%) create mode 100644 starkingdoms-client/src/css/font.scss rename starkingdoms-client/src/css/{footer.css => footer.scss} (61%) delete mode 100644 starkingdoms-client/src/css/form.css create mode 100644 starkingdoms-client/src/css/form.scss rename starkingdoms-client/src/css/{game.css => game.scss} (100%) delete mode 100644 starkingdoms-client/src/css/globals.css create mode 100644 starkingdoms-client/src/css/globals.scss rename starkingdoms-client/src/css/{grid.css => grid.scss} (100%) rename starkingdoms-client/src/css/{hud.css => hud.scss} (100%) rename starkingdoms-client/src/css/{json.css => json.scss} (100%) rename starkingdoms-client/src/css/{log.css => log.scss} (100%) rename starkingdoms-client/src/css/{popup.css => popup.scss} (89%) delete mode 100644 starkingdoms-client/src/css/style.css create mode 100644 starkingdoms-client/src/css/style.scss rename starkingdoms-client/src/css/themes/{catppuccin-common/definitions.css => catppuccin-mocha.scss} (57%) delete mode 100644 starkingdoms-client/src/css/themes/catppuccin-mocha/colors.css create mode 100644 starkingdoms-client/src/css/utils.scss delete mode 100644 starkingdoms-client/src/main.ts create mode 100644 starkingdoms-client/src/routes/ingame/main.ts create mode 100644 starkingdoms-client/src/routes/menu/main.ts diff --git a/starkingdoms-client/index.html b/starkingdoms-client/index.html index ea6a9c7dc607e13ee35917d8350bfb328c76bbd5..81b03fa6074722575ef41e19f8ba53c9e011e22d 100644 --- a/starkingdoms-client/index.html +++ b/starkingdoms-client/index.html @@ -2,41 +2,24 @@ - - StarKingdoms + StarKingdoms.IO -
- -
- - - - - - - - - - + diff --git a/starkingdoms-client/package.json b/starkingdoms-client/package.json index d6775051a47a9cd078fcc98713916e4730bf0731..f57a145ebcd302bf8c12c70f245aa2dfb93c77f4 100644 --- a/starkingdoms-client/package.json +++ b/starkingdoms-client/package.json @@ -11,7 +11,10 @@ "devDependencies": { "@types/debug": "^4.1.12", "@types/node": "^20.10.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.31", "prettier": "^3.1.0", + "sass": "^1.69.5", "typescript": "^5.2.2", "vite": "^5.0.0" }, diff --git a/starkingdoms-client/play/index.html b/starkingdoms-client/play/index.html new file mode 100644 index 0000000000000000000000000000000000000000..664c636f2f165ec29d1bbbe2a62248b659cf7dc1 --- /dev/null +++ b/starkingdoms-client/play/index.html @@ -0,0 +1,96 @@ + + + + + + + StarKingdoms.IO + + +
+ + + + + +
+ +
+ + StarKingdoms Client + Made with + + + + by the StarKingdoms team + + + + diff --git a/starkingdoms-client/src/css/chat.css b/starkingdoms-client/src/css/chat.scss similarity index 91% rename from starkingdoms-client/src/css/chat.css rename to starkingdoms-client/src/css/chat.scss index ea01e506711d375f26526573353ebcb62806a0ea..45983b7ac9cb58595fee0dc7e235f2699d09157c 100644 --- a/starkingdoms-client/src/css/chat.css +++ b/starkingdoms-client/src/css/chat.scss @@ -1,11 +1,13 @@ +@use "font"; + .chat-container { + @extend .font-2; + position: absolute; top: 0.5em; right: 0.5em; width: 30vw; height: min-content; - font-size: 0.875rem; /* 14px */ - line-height: 1.25rem; /* 20px */ font-weight: 500; } .chat-table { diff --git a/starkingdoms-client/src/css/font.scss b/starkingdoms-client/src/css/font.scss new file mode 100644 index 0000000000000000000000000000000000000000..2576124a8a5f4fceb9d29d9621b0974912908677 --- /dev/null +++ b/starkingdoms-client/src/css/font.scss @@ -0,0 +1,43 @@ +: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/src/css/footer.css b/starkingdoms-client/src/css/footer.scss similarity index 61% rename from starkingdoms-client/src/css/footer.css rename to starkingdoms-client/src/css/footer.scss index aef515d71159e0d2f721c90c074b7fffdd5a584e..ede4ee45d55f918c3961491a16a75dc9d896389a 100644 --- a/starkingdoms-client/src/css/footer.css +++ b/starkingdoms-client/src/css/footer.scss @@ -1,15 +1,19 @@ -.footer-left { - font-size: 0.75rem; - line-height: 2rem; +@use "font"; + +%footer-common { + @extend .font-1; position: absolute; bottom: 0.5em; +} + +.footer-left { + @extend %footer-common; left: 1em; } + .footer-right { - font-size: 0.75rem; - line-height: 2rem; - position: absolute; - bottom: 0.5em; + @extend %footer-common; + right: 1em; } .footer-icon { diff --git a/starkingdoms-client/src/css/form.css b/starkingdoms-client/src/css/form.css deleted file mode 100644 index 32aacf27879bcc2bc61c2362074d3e2091ee95d3..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/css/form.css +++ /dev/null @@ -1,158 +0,0 @@ -.launch-btn { - appearance: none; - width: 100%; - padding: 1em; - margin-top: 1em; - color: var(--text); - background: transparent; - border: 2px solid var(--links); - border-radius: 5px; - transition: 0.1s ease-in-out; -} -.launch-btn:hover { - cursor: pointer; - background-color: var(--links-transparent); -} - -.username-label { - margin-top: 1em; -} -.fm-select { - margin-bottom: 1em; - position: relative; -} - -.username-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%; -} -.username-box:focus { - outline: none; - background-color: var(--links-ultratransparent); -} - -.fm-select-button { - appearance: none; - background: transparent; - color: var(--text); - width: 100%; - padding: 0.675em 1em; - border: 1px solid var(--links); - border-radius: 0.25rem; - cursor: pointer; - display: flex; - justify-content: space-between; - align-items: center; -} -.fm-selected-value { - text-align: left; -} -.fm-arrow { - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 6px solid var(--links); - transition: transform ease-in-out 0.3s; -} -.fm-select-dropdown { - position: absolute; - list-style: none; - width: 100%; - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2); - background-color: var(--bg-secondary-1); - border: 1px solid var(--links); - border-radius: 4px; - padding: 10px; - margin-top: 10px; - max-height: 200px; - overflow-y: auto; - transition: 0.2s ease; - - /*transform: scaleY(0);*/ - opacity: 0; - visibility: hidden; -} -.fm-select-dropdown:focus-within { - box-shadow: 0 10px 25px var(--links-ultratransparent); -} - -.fm-select-dropdown li { - position: relative; - cursor: pointer; - display: flex; - gap: 1rem; - align-items: center; -} - -.fm-select-dropdown li label { - width: 100%; - padding: 8px 10px; - cursor: pointer; -} - -.fm-select-dropdown::-webkit-scrollbar { - width: 7px; -} -.fm-select-dropdown::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 25px; -} - -.fm-select-dropdown::-webkit-scrollbar-thumb { - background: #ccc; - border-radius: 25px; -} - -.fm-select-dropdown li + li { - margin-top: 5px; -} - -.fm-select-dropdown li, -.fm-select-dropdown input ~ label { - border-radius: 5px; -} - -.fm-select-dropdown li:hover, -.fm-select-dropdown input:checked ~ label { - background-color: var(--surface-0); -} -.fm-select-dropdown input:focus ~ label { - background-color: var(--surface-1); -} - -.fm-select-dropdown input[type="radio"] { - position: absolute; - left: 0; - opacity: 0; -} -.fm-select.active .fm-arrow { - transform: rotate(180deg); -} -.fm-select.active .fm-select-dropdown { - opacity: 1; - visibility: visible; - /*transform: scaleY(1);*/ -} -.server-danger { - width: 100%; - display: block; - height: max-content; - margin-top: 1em; - color: var(--error); - font-size: 0.875rem; - line-height: 1.25rem; -} -.server-danger.hidden { - display: none; -} -.server-danger-icon { - height: 1.25rem; - vertical-align: middle; - display: inline-block; -} diff --git a/starkingdoms-client/src/css/form.scss b/starkingdoms-client/src/css/form.scss new file mode 100644 index 0000000000000000000000000000000000000000..9123d56e94769e9b4f8a8bdb39c79742622b9070 --- /dev/null +++ b/starkingdoms-client/src/css/form.scss @@ -0,0 +1,80 @@ +@use "font"; + +.form { + input, + select { + margin-bottom: 0.75em; + } + button { + margin-top: 0.25em; + } +} + +%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%; +} + +.btn { + @extend %form-element-shared; + border: 2px solid var(--links); + transition: 0.1s ease-in-out; +} +.btn:hover { + cursor: pointer; + background-color: var(--links-transparent); +} + +.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/src/css/game.css b/starkingdoms-client/src/css/game.scss similarity index 100% rename from starkingdoms-client/src/css/game.css rename to starkingdoms-client/src/css/game.scss diff --git a/starkingdoms-client/src/css/globals.css b/starkingdoms-client/src/css/globals.css deleted file mode 100644 index a0730f7ce03cc27ea8d5b7a38cf8c5d544ffe51b..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/css/globals.css +++ /dev/null @@ -1,45 +0,0 @@ -html { - box-sizing: border-box; -} -*, -*:before, -*:after { - box-sizing: inherit; -} - -body { - background-color: var(--bg); - color: var(--body); - /* Stolen from Tailwind. Looks good in most places. */ - 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"; - font-size: 1rem; - line-height: 1.5rem; -} - -.mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, - "Liberation Mono", "Courier New", monospace; -} - -h1 { - font-size: 1.25rem; - line-height: 1.75rem; -} -h2 { - font-size: 1.125rem; - line-height: 1.75rem; -} diff --git a/starkingdoms-client/src/css/globals.scss b/starkingdoms-client/src/css/globals.scss new file mode 100644 index 0000000000000000000000000000000000000000..3126074bbc9cb978e663c1d1288ec68bc1b911b0 --- /dev/null +++ b/starkingdoms-client/src/css/globals.scss @@ -0,0 +1,19 @@ +@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/src/css/grid.css b/starkingdoms-client/src/css/grid.scss similarity index 100% rename from starkingdoms-client/src/css/grid.css rename to starkingdoms-client/src/css/grid.scss diff --git a/starkingdoms-client/src/css/hud.css b/starkingdoms-client/src/css/hud.scss similarity index 100% rename from starkingdoms-client/src/css/hud.css rename to starkingdoms-client/src/css/hud.scss diff --git a/starkingdoms-client/src/css/json.css b/starkingdoms-client/src/css/json.scss similarity index 100% rename from starkingdoms-client/src/css/json.css rename to starkingdoms-client/src/css/json.scss diff --git a/starkingdoms-client/src/css/log.css b/starkingdoms-client/src/css/log.scss similarity index 100% rename from starkingdoms-client/src/css/log.css rename to starkingdoms-client/src/css/log.scss diff --git a/starkingdoms-client/src/css/popup.css b/starkingdoms-client/src/css/popup.scss similarity index 89% rename from starkingdoms-client/src/css/popup.css rename to starkingdoms-client/src/css/popup.scss index 722fa401eca492fdddb737fa6e22879a8a40b98a..849c781e610252d9943f3e99fecf5ef2b6a8245c 100644 --- a/starkingdoms-client/src/css/popup.css +++ b/starkingdoms-client/src/css/popup.scss @@ -29,7 +29,3 @@ margin: 0 0 0.5em; color: var(--sub-headline); } -.hidden { - display: none; - visibility: hidden; -} diff --git a/starkingdoms-client/src/css/style.css b/starkingdoms-client/src/css/style.css deleted file mode 100644 index eb4b78e29760fc73d6d8f84b57a51a5f29597fa9..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/css/style.css +++ /dev/null @@ -1,10 +0,0 @@ -@import "globals.css"; -@import "grid.css"; -@import "popup.css"; -@import "footer.css"; -@import "form.css"; -@import "json.css"; -@import "log.css"; -@import "game.css"; -@import "hud.css"; -@import "chat.css"; diff --git a/starkingdoms-client/src/css/style.scss b/starkingdoms-client/src/css/style.scss new file mode 100644 index 0000000000000000000000000000000000000000..62bf7695488aa666bb2ed6789c3b648a94fcabd6 --- /dev/null +++ b/starkingdoms-client/src/css/style.scss @@ -0,0 +1,11 @@ +@import "globals.scss"; +@import "grid.scss"; +@import "popup.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/src/css/themes/catppuccin-common/definitions.css b/starkingdoms-client/src/css/themes/catppuccin-mocha.scss similarity index 57% rename from starkingdoms-client/src/css/themes/catppuccin-common/definitions.css rename to starkingdoms-client/src/css/themes/catppuccin-mocha.scss index bf5df171bc6fd150353df885764ac5eac478ec10..883c857305107b740088750802317a9bc18098f9 100644 --- a/starkingdoms-client/src/css/themes/catppuccin-common/definitions.css +++ b/starkingdoms-client/src/css/themes/catppuccin-mocha.scss @@ -1,7 +1,31 @@ -/* Common name definitions for all Catppuccin-based themes. */ -/* This is also a good reference if you want to make your own themes, for what variables you *must* define. */ - :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; + /* Background colors */ --bg: rgb(var(--base)); --bg-secondary-1: rgb(var(--crust)); diff --git a/starkingdoms-client/src/css/themes/catppuccin-mocha/colors.css b/starkingdoms-client/src/css/themes/catppuccin-mocha/colors.css deleted file mode 100644 index 6fc519602f4653bf87a738562e985261ccf4f375..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/css/themes/catppuccin-mocha/colors.css +++ /dev/null @@ -1,31 +0,0 @@ -/* Color palette from Catppuccin Mocha. Thanks! */ -@import "../catppuccin-common/definitions.css"; - -: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; -} diff --git a/starkingdoms-client/src/css/utils.scss b/starkingdoms-client/src/css/utils.scss new file mode 100644 index 0000000000000000000000000000000000000000..f53d3e6ab98844fedb8ffb23b1043749b3c5ac8c --- /dev/null +++ b/starkingdoms-client/src/css/utils.scss @@ -0,0 +1,4 @@ +.hidden { + display: none; + visibility: hidden; +} diff --git a/starkingdoms-client/src/hub.ts b/starkingdoms-client/src/hub.ts index 5860c0dd402ef1060b69685ca422c25cafa5d3de..9b91944e081c6c2577e376335973b5ef22bbd4e0 100644 --- a/starkingdoms-client/src/hub.ts +++ b/starkingdoms-client/src/hub.ts @@ -11,7 +11,7 @@ import { SpawnPlayerPacket, } from "./protocol.ts"; import { appendPacket } from "./packet_ui.ts"; -import { global } from "./main.ts"; +import { global } from "./routes/ingame/main.ts"; import { startRender } from "./rendering.ts"; import { addMessage } from "./chat.ts"; diff --git a/starkingdoms-client/src/main.ts b/starkingdoms-client/src/main.ts deleted file mode 100644 index 06021ab28d0276f88859a40568876dc50c84ce7b..0000000000000000000000000000000000000000 --- a/starkingdoms-client/src/main.ts +++ /dev/null @@ -1,196 +0,0 @@ -import createDebug from "debug"; -import { ClientHub, hub_connect } from "./hub.ts"; -import { ConfigServer, loadConfig } from "./config.ts"; -import "./css/style.css"; -import "./css/themes/catppuccin-mocha/colors.css"; -import { Part, Planet } from "./protocol.ts"; -import * as PIXI from "pixi.js"; - -let config = await loadConfig(); - -const logger = createDebug("main"); -logger( - `Hello, world! StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) at your service!`, -); -/* -if (window.localStorage.getItem("stk-packet-mode") === "debug") { - document.getElementById("packet_log")!.classList.remove("log-hidden"); -} else { - document.getElementById("packet_log")!.remove(); -} - - */ - -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; -} - -export interface GlobalRendering { - app: PIXI.Application; - player_text_map: Map; - planet_sprite_map: Map; - part_sprite_map: Map; -} - -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, -}; - -export function player(): Part | undefined { - if (global.me !== null) { - return global.parts_map.get(global.me!.part_id); - } else { - return undefined; - } -} - -const version_string = `StarKingdoms Client ${APP_VERSION} (${COMMIT_HASH})`; -document.getElementById("footer-left")!.innerHTML = version_string; -document.getElementById("footer-right")!.innerHTML = - `Made with by the StarKingdoms team`; - -// Dropdown stuff -const custom_select = document.querySelector(".fm-select")!; -const custom_select_btn = ( - document.querySelector(".fm-select-button")! -); - -custom_select_btn.onclick = (e) => { - e.stopPropagation(); - e.preventDefault(); - custom_select.classList.toggle("active"); - custom_select_btn.setAttribute( - "aria-expanded", - custom_select_btn.getAttribute("aria-expanded") === "true" - ? "false" - : "true", - ); -}; - -const selected_value = document.querySelector(".fm-selected-value")!; - -// Populate the main page server selector - -let inverse_server_lookup: { [name: string]: string } = {}; - -const dropdown = document.getElementById("fm-select-dropdown")!; - -dropdown.innerHTML = ""; - -for (let server_id in config.servers) { - let server: ConfigServer = config.servers[server_id]; - if ( - server.isDevelopment && - window.localStorage.getItem("stk-mode") !== "debug" - ) { - continue; - } - let html_text = ` -
  • - - -
  • - `; - inverse_server_lookup[server.name] = server_id; - dropdown.innerHTML += html_text; - if (server.isPrimary) { - selected_value.textContent = server.name; - } -} - -const options_list = document.querySelectorAll(".fm-select-dropdown li"); -options_list.forEach((option) => { - function handler(e: Event) { - if ( - e.type === "click" && - (e).clientX !== 0 && - (e).clientY !== 0 - ) { - // @ts-ignore - selected_value.textContent = this.children[1].textContent; - custom_select.classList.remove("active"); - } - if (e.type === "keyup") { - console.log((e).target!); - // @ts-ignore - selected_value.textContent = this.textContent; - custom_select.classList.remove("active"); - } - if ( - !config.servers[inverse_server_lookup[selected_value.textContent!]] - .isProduction - ) { - document.getElementById("server-danger")!.classList.remove("hidden"); - } else { - document.getElementById("server-danger")!.classList.add("hidden"); - } - } - // @ts-ignore - option.onkeyup = handler; - // @ts-ignore - option.onclick = handler; -}); - -function setStatus(stat: string) { - document.getElementById("launch-btn")!.textContent = stat; -} - -document.getElementById("join-fm")!.onsubmit = async (e) => { - e.preventDefault(); - - setStatus("Connecting..."); - (custom_select_btn).disabled = true; - (document.getElementById("username")!).disabled = true; - - try { - let server_name = selected_value.textContent!; - let server_id = inverse_server_lookup[server_name]; - let server: ConfigServer = config.servers[server_id]; - - let username = (document.getElementById("username")!) - .value; - - logger( - `connecting to ${server.clientHubUrl} as ${username} with auth = none`, - ); - - global.client = await hub_connect(server.clientHubUrl, username); - } catch (e) { - setStatus("Connection failed!"); - console.error(e); - (custom_select_btn).disabled = false; - (document.getElementById("username")!).disabled = false; - } -}; diff --git a/starkingdoms-client/src/packet_ui.ts b/starkingdoms-client/src/packet_ui.ts index 90ce66521b95d79bf5b4fcfd038c60dac709ea37..31e540f55ea4bea9c90334bc4c3e440ca9c3c79a 100644 --- a/starkingdoms-client/src/packet_ui.ts +++ b/starkingdoms-client/src/packet_ui.ts @@ -1,5 +1,4 @@ -// @ts-ignore -import { Direction, Packet, type_direction } from "./protocol.ts"; +import { Packet, type_direction } from "./protocol.ts"; import createDebug from "debug"; const logger = createDebug("jsonview"); diff --git a/starkingdoms-client/src/rendering.ts b/starkingdoms-client/src/rendering.ts index a3d9e7d438f245ca3698000996a666bcfdb771ba..45d16dc5740a8f0d4d07d37da2e6c17d4ad810d0 100644 --- a/starkingdoms-client/src/rendering.ts +++ b/starkingdoms-client/src/rendering.ts @@ -1,18 +1,11 @@ import * as PIXI from "pixi.js"; -import { global, player } from "./main.ts"; +import { global, player } from "./routes/ingame/main.ts"; import { part_texture_url, planet_texture_url } from "./textures.ts"; const PART_WIDTH = 50; const PART_HEIGHT = 50; export function startRender() { - // hide the launch popup - document.getElementById("server_selector")!.classList.add("hidden"); - // show the HUD - document.getElementById("hud")!.classList.remove("hidden"); - // and chat - document.getElementById("chat")!.classList.remove("hidden"); - let app = new PIXI.Application({ width: window.innerWidth, height: window.innerHeight, diff --git a/starkingdoms-client/src/routes/ingame/main.ts b/starkingdoms-client/src/routes/ingame/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..8772f601b4a1a16bf119505fd86fcdd7e651dc65 --- /dev/null +++ b/starkingdoms-client/src/routes/ingame/main.ts @@ -0,0 +1,114 @@ +import createDebug from "debug"; +import { ClientHub, hub_connect } from "../../hub.ts"; +import "../../css/style.scss"; +import "../../css/themes/catppuccin-mocha.scss"; +import { Part, Planet } from "../../protocol.ts"; +import * as PIXI from "pixi.js"; +import { addMessage } from "../../chat.ts"; +import { loadConfig } from "../../config.ts"; + +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; +} + +export interface GlobalRendering { + app: PIXI.Application; + player_text_map: Map; + planet_sprite_map: Map; + part_sprite_map: Map; +} + +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, +}; + +async function init() { + (window as any).__initialized = true; + // @ts-ignore + init = undefined; + + const config = await loadConfig(); + + const logger = createDebug("main"); + logger( + `Hello, world! StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) at your service!`, + ); + logger("Current view: /play"); + + document.getElementById("footer-left")!.innerHTML = + `StarKingdoms Client ${APP_VERSION} (${COMMIT_HASH})`; + + addMessage("server-message", "Connecting to the game server..."); + + let params = new URLSearchParams(window.location.search); + + if (!params.has("srv")) { + addMessage( + "server-error", + "Server ID missing. Redirecting to main menu in 5 seconds.", + ); + setTimeout(() => { + window.location.href = "/"; + }, 5000); + return; + } + if (!params.has("username")) { + addMessage( + "server-error", + "Username missing. Redirecting to main menu in 5 seconds.", + ); + setTimeout(() => { + window.location.href = "/"; + }, 5000); + return; + } + + let server_id = params.get("srv")!; + let username = params.get("username")!; + + let server = config.servers[server_id]; + + await hub_connect(server.clientHubUrl, username); +} + +if ((window as any).__initialized === undefined) { + init(); +} + +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/src/routes/menu/main.ts b/starkingdoms-client/src/routes/menu/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..18551838cba9c586f3f287a4208d30f62c938fc9 --- /dev/null +++ b/starkingdoms-client/src/routes/menu/main.ts @@ -0,0 +1,64 @@ +import { ConfigServer, loadConfig } from "../../config.ts"; +import createDebug from "debug"; +import "../../css/themes/catppuccin-mocha.scss"; +import "../../css/style.scss"; + +// HMR wrapper, to prevent doing reinit twice +let initialized: boolean | undefined; + +async function init() { + let config = await loadConfig(); + + const logger = createDebug("main"); + logger( + `Hello, world! StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) at your service!`, + ); + logger("Current view: "); + + initialized = true; + + const is_development = window.localStorage.getItem("stk-mode") === "debug"; + + document.getElementById("footer-left")!.innerHTML = + `StarKingdoms Client ${APP_VERSION} (${COMMIT_HASH})`; + + // fill in the select box + const select_box = document.getElementById("select")!; + const username_box = document.getElementById("username")!; + const nonprod_warning = document.getElementById("server-danger")!; + + const form = document.getElementById("join-fm")!; + form.onsubmit = (e) => { + e.preventDefault(); + window.location.href = `/play/?srv=${select_box.value}&username=${username_box.value}`; + }; + + select_box.innerHTML = ""; + + select_box.onchange = () => { + if ( + config.servers[select_box.value] !== undefined && + !config.servers[select_box.value].isProduction + ) { + nonprod_warning.classList.remove("hidden"); + } else { + nonprod_warning.classList.add("hidden"); + } + }; + + for (let server_id in config.servers) { + let server: ConfigServer = config.servers[server_id]; + + if (server.isDevelopment && !is_development) continue; + + let new_option = document.createElement("option"); + new_option.value = server_id; + new_option.innerText = server.name; + + select_box.appendChild(new_option); + } +} + +if (initialized === undefined) { + init(); +} diff --git a/starkingdoms-client/src/textures.ts b/starkingdoms-client/src/textures.ts index 9aea2b97bc22ec264a7bcd71356e83e375811343..bce78c0e1c1c76e3629d881884a39aad2a6b92b8 100644 --- a/starkingdoms-client/src/textures.ts +++ b/starkingdoms-client/src/textures.ts @@ -1,7 +1,7 @@ import { PartType, PlanetType } from "./protocol.ts"; import tex_earth from "./assets/earth.svg"; import tex_hearty from "./assets/hearty.svg"; -import tex_cargo_on from "./assets/cargo_on.svg"; +import tex_cargo_off from "./assets/cargo_off.svg"; import tex_missing from "./assets/missing.svg"; export function planet_texture_url(type: PlanetType): string { @@ -15,7 +15,7 @@ export function part_texture_url(type: PartType): string { if (type == PartType.Hearty) { return tex_hearty; } else if (type == PartType.Cargo) { - return tex_cargo_on; + return tex_cargo_off; } return tex_missing; } diff --git a/starkingdoms-client/vite.config.ts b/starkingdoms-client/vite.config.ts index e3285377647c111e905873d1cb61bb304578736c..aacb37c9b8c1d955c52f76ff3366c566b8e27da5 100644 --- a/starkingdoms-client/vite.config.ts +++ b/starkingdoms-client/vite.config.ts @@ -1,5 +1,8 @@ import { defineConfig } from "vite"; +import { resolve } from "path"; import * as child from "child_process"; +//@ts-ignore +import autoprefixer from "autoprefixer"; const commitHash = child .execSync("git describe --no-match --always --abbrev=8 --dirty") @@ -15,5 +18,17 @@ export default defineConfig({ build: { target: ["chrome89", "edge89", "firefox89", "safari15"], cssCodeSplit: false, + rollupOptions: { + input: { + main: resolve(__dirname, "index.html"), + play: resolve(__dirname, "play/index.html"), + }, + }, + }, + appType: "mpa", + css: { + postcss: { + plugins: [autoprefixer({})], + }, }, }); diff --git a/starkingdoms-client/yarn.lock b/starkingdoms-client/yarn.lock index bc208bfb9dcee7d01aebb9b5ec7eace0eeb7c158..fc012d7af589611296419861806ee631c87a7082 100644 --- a/starkingdoms-client/yarn.lock +++ b/starkingdoms-client/yarn.lock @@ -426,6 +426,48 @@ resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516" integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A== +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" + +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" + +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== + +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" + call-bind@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" @@ -435,6 +477,26 @@ call-bind@^1.0.0: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +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": + 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" + debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -456,6 +518,11 @@ earcut@^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== + esbuild@^0.19.3: version "0.19.7" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.7.tgz#b9a7235097b81278dcf090e2532ed13c95a2ee84" @@ -484,11 +551,28 @@ esbuild@^0.19.3: "@esbuild/win32-ia32" "0.19.7" "@esbuild/win32-x64" "0.19.7" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +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== + fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -509,6 +593,13 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +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" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -540,6 +631,35 @@ hasown@^2.0.0: 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== + +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== + ismobilejs@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ismobilejs/-/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" @@ -555,6 +675,21 @@ nanoid@^3.3.6: 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" @@ -565,6 +700,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picomatch@^2.0.4, picomatch@^2.2.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" @@ -601,6 +741,11 @@ pixi.js@^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" @@ -627,6 +772,13 @@ qs@^6.11.2: dependencies: side-channel "^1.0.4" +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" + rollup@^4.2.0: version "4.5.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.5.2.tgz#2cf0ef0a57cb4038c50a66356684fd30071d0595" @@ -646,6 +798,15 @@ rollup@^4.2.0: "@rollup/rollup-win32-x64-msvc" "4.5.2" fsevents "~2.3.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" @@ -665,11 +826,18 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", 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== +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" + typescript@^5.2.2: version "5.3.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" @@ -680,6 +848,14 @@ undici-types@~5.26.4: 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"