~starkingdoms/starkingdoms

476a4517849fe56f7bffc369bbe6c114587d1906 — core 2 years ago 5be633f
client main page ui
A starkingdoms-client/.gitignore => starkingdoms-client/.gitignore +24 -0
@@ 0,0 1,24 @@
# 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?

A starkingdoms-client/index.html => starkingdoms-client/index.html +43 -0
@@ 0,0 1,43 @@
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="/style.css" />
    <link rel="stylesheet" href="/themes/catppuccin-mocha/colors.css" />
    <title>StarKingdoms</title>
  </head>
  <body class="bg-grid">
    <div class="popup" id="server_selector">

      <h1>StarKingdoms</h1>
      <h2>Join Game</h2>

      <form>
        <label>Choose server</label>

        <div class="fm-select">
          <button class="fm-select-button" role="combobox" aria-labelledby="server selector" aria-haspopup="listbox" aria-expanded="false" aria-controls="fm-select-dropdown">
            <span class="fm-selected-value">StarKingdoms - 0 players</span>
            <span class="fm-arrow"></span>
          </button>
          <ul class="fm-select-dropdown" role="listbox" id="fm-select-dropdown">
            <!-- Filled by TS -->
          </ul>
        </div>

        <label for="username" class="username-label">Username</label>
        <input class="username-box" id="username" required autocomplete="off"/>
        <button class="launch-btn">Launch!</button>
      </form>
    </div>

    <div id="gamewindow" class="game">
      <!-- Canvas gets added here by the game script -->
    </div>

    <span class="footer" id="footer"></span>

    <script type="module" src="src/main.ts"></script>
  </body>
</html>

A starkingdoms-client/package.json => starkingdoms-client/package.json +15 -0
@@ 0,0 1,15 @@
{
  "name": "starkingdoms-client",
  "private": true,
  "version": "0.1.1",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "typescript": "^5.2.2",
    "vite": "^5.0.0"
  }
}

A starkingdoms-client/public/footer.css => starkingdoms-client/public/footer.css +13 -0
@@ 0,0 1,13 @@
.footer {
    font-size: 0.75rem;
    line-height: 1rem;
    position: absolute;
    bottom: 1vh;
    left: 1vw;
}
.footer-icon {
    vertical-align: middle;
    display: inline-block;
    width: 1rem;
    height: 1rem;
}
\ No newline at end of file

A starkingdoms-client/public/form.css => starkingdoms-client/public/form.css +138 -0
@@ 0,0 1,138 @@
.launch-btn {
    appearance: none;
    width: 100%;
    padding: 1vh 1vw;
    margin-top: 1vw;
    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: 1vh;
}
.fm-select {
    margin-bottom: 1vh;
}

.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);*/
}
\ No newline at end of file

A starkingdoms-client/public/globals.css => starkingdoms-client/public/globals.css +25 -0
@@ 0,0 1,25 @@
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;
}

h1 {
    font-size: 1.25rem;
    line-height: 1.75rem;
}
h2 {
    font-size: 1.125rem;
    line-height: 1.75rem;
}
\ No newline at end of file

A starkingdoms-client/public/grid.css => starkingdoms-client/public/grid.css +5 -0
@@ 0,0 1,5 @@
.bg-grid {
    background-image: linear-gradient(to right, #80808012 1px, transparent 1px),
    linear-gradient(to bottom, #80808012 1px, transparent 1px);
    background-size: 24px 24px;
}
\ No newline at end of file

A starkingdoms-client/public/popup.css => starkingdoms-client/public/popup.css +22 -0
@@ 0,0 1,22 @@
.popup {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;

    padding: 2vh 1vw;

    background-color: var(--bg-secondary-1);
    width: 19%;
    height: min-content;
    border-radius: 5px;
}
.popup > h1 {
    margin: 0;
}
.popup > h2 {
    margin: 0 0 1vh;
    color: var(--sub-headline);
}
\ No newline at end of file

A starkingdoms-client/public/style.css => starkingdoms-client/public/style.css +5 -0
@@ 0,0 1,5 @@
@import "globals.css";
@import "grid.css";
@import "popup.css";
@import "footer.css";
@import "form.css";
\ No newline at end of file

A starkingdoms-client/public/themes/catppuccin-common/definitions.css => starkingdoms-client/public/themes/catppuccin-common/definitions.css +34 -0
@@ 0,0 1,34 @@
/* 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 {
    /* Background colors */
    --bg: rgb(var(--base));
    --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-ultratransparent: rgba(var(--blue), 0.15);
    --success: rgb(var(--green));
    --warning: rgb(var(--yellow));
    --error: rgb(var(--red));
    --tag: rgb(var(--blue));
    --pill: rgb(var(--blue));
    --sel-bg: rgba(var(--surface2), 0.4);
    --cursor: rgb(var(--rosewater));
}
\ No newline at end of file

A starkingdoms-client/public/themes/catppuccin-mocha/colors.css => starkingdoms-client/public/themes/catppuccin-mocha/colors.css +32 -0
@@ 0,0 1,32 @@
/* 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;
}


A starkingdoms-client/src/config.json => starkingdoms-client/src/config.json +8 -0
@@ 0,0 1,8 @@
{
  "servers": {
    "stk-prod": {"name": "StarKingdoms", "url": "wss://starkingdoms.io/", "api": "https://api.starkingdoms.io"},
    "stk-beta": {"name": "StarKingdoms Beta", "url": "wss://beta.starkingdoms.io/", "api": "https://api.beta.starkingdoms.io"},
    "stk-unstable": {"name": "StarKingdoms Unstable", "url": "wss://unstable.starkingdoms.io/", "api": "https://api.unstable.starkingdoms.io"},
    "dev": {"name": "Local", "url": "ws://localhost:3000/", "api": "http://localhost:8080"}
  }
}
\ No newline at end of file

A starkingdoms-client/src/env.d.ts => starkingdoms-client/src/env.d.ts +2 -0
@@ 0,0 1,2 @@
declare const APP_VERSION: string;
declare const COMMIT_HASH: string;
\ No newline at end of file

A starkingdoms-client/src/main.ts => starkingdoms-client/src/main.ts +65 -0
@@ 0,0 1,65 @@
import CONFIG from "./config.json";

const version_string = `StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) made with <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="footer-icon"><path d="M9.653 16.915l-.005-.003-.019-.01a20.759 20.759 0 01-1.162-.682 22.045 22.045 0 01-2.582-1.9C4.045 12.733 2 10.352 2 7.5a4.5 4.5 0 018-2.828A4.5 4.5 0 0118 7.5c0 2.852-2.044 5.233-3.885 6.82a22.049 22.049 0 01-3.744 2.582l-.019.01-.005.003h-.002a.739.739 0 01-.69.001l-.002-.001z" /></svg> by the StarKingdoms team`;
document.getElementById("footer")!.innerHTML = version_string;

// Dropdown stuff
const custom_select = document.querySelector(".fm-select")!;
const custom_select_btn = document.querySelector(".fm-select-button")!;
custom_select_btn.addEventListener("click", (e) => {
    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
interface ConfigServer {
    name: string;
    url: string;
    api: string;
}

let inverse_server_lookup: {[name: string]: string} = {};

const dropdown = document.getElementById("fm-select-dropdown")!;

for (let server_id in CONFIG.servers) {
    // @ts-ignore not sure why this complains
    let server: ConfigServer = CONFIG.servers[server_id];
    let is_first = Object.keys(inverse_server_lookup).length == 0;
    let html_text = `
    <li>
        <input type="radio" id="${server_id}" name="server" autocomplete="off" ${is_first ? "checked" : ""} />
        <label for="${server_id}">${server.name}</label>
    </li>
    `;
    inverse_server_lookup[server.name] = server_id;
    dropdown.innerHTML += html_text;
    if (is_first) {
        selected_value.textContent = server.name;
    }
}

console.log(inverse_server_lookup);

const options_list = document.querySelectorAll(".fm-select-dropdown li");
options_list.forEach((option) => {
    function handler(e: Event) {
        if (e.type === "click" && (<PointerEvent>e).clientX !== 0 && (<PointerEvent>e).clientY !== 0) {
            // @ts-ignore
            selected_value.textContent = this.children[1].textContent;
            custom_select.classList.remove("active");
        }
        if (e.type === "keyup") {
            console.log((<KeyboardEvent>e).target!);
            // @ts-ignore
            selected_value.textContent = this.textContent;
            custom_select.classList.remove("active");
        }
    }
    option.addEventListener("keyup", handler);
    option.addEventListener("click", handler);
})


A starkingdoms-client/tsconfig.json => starkingdoms-client/tsconfig.json +23 -0
@@ 0,0 1,23 @@
{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "skipLibCheck": true,

    /* Bundler mode */
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,

    /* Linting */
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true
  },
  "include": ["src"]
}

A starkingdoms-client/vite.config.ts => starkingdoms-client/vite.config.ts +12 -0
@@ 0,0 1,12 @@
import {defineConfig} from "vite";
import * as child from "child_process";

const commitHash = child.execSync('git describe --no-match --always --abbrev=8 --dirty').toString().trim();

export default defineConfig({
    plugins: [],
    define: {
        APP_VERSION: JSON.stringify(process.env.npm_package_version),
        COMMIT_HASH: JSON.stringify(commitHash)
    }
})
\ No newline at end of file

A starkingdoms-client/yarn.lock => starkingdoms-client/yarn.lock +265 -0
@@ 0,0 1,265 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1


"@esbuild/android-arm64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz#646156aea43e8e6723de6e94a4ac07c5aed41be1"
  integrity sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==

"@esbuild/android-arm@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.7.tgz#0827b49aed813c33ea18ee257c1728cdc4a01030"
  integrity sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==

"@esbuild/android-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.7.tgz#fa294ed5214d88219d519e0ab1bbb0253a89b864"
  integrity sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==

"@esbuild/darwin-arm64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz#e24d2ed545749ff251eabe8bce11fefa688892d3"
  integrity sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==

"@esbuild/darwin-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz#02d1f8a572874c90d8f55dde8a859e5145bd06f6"
  integrity sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==

"@esbuild/freebsd-arm64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz#bc6a69b9a7915da278f0a5ebaec069c813982c22"
  integrity sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==

"@esbuild/freebsd-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz#ec3708488625d70e565968ceea1355e7c8613865"
  integrity sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==

"@esbuild/linux-arm64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz#8e04b66c306858f92d4f90f8222775270755e88a"
  integrity sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==

"@esbuild/linux-arm@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz#12d5b65e089029ee1fe4c591b60969c9b1a85355"
  integrity sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==

"@esbuild/linux-ia32@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz#01eabc2a3ad9039e115db650268e4f48f910dbe2"
  integrity sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==

"@esbuild/linux-loong64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz#70681113632970e6a5766607bbdb98aa18cf4d5f"
  integrity sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==

"@esbuild/linux-mips64el@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz#f63c022a71a3d70c482d1943a27cb8997021e230"
  integrity sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==

"@esbuild/linux-ppc64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz#614eafd08b0c50212f287b948b3c08d6e60f221f"
  integrity sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==

"@esbuild/linux-riscv64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz#31d3b63f92f65968268a8e61ba59872538e80e88"
  integrity sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==

"@esbuild/linux-s390x@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz#be94974e0caa0783ae05f9477fd7170b9ac29cb0"
  integrity sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==

"@esbuild/linux-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz#84e8018a913dd4ecee954623e395984aef3d0007"
  integrity sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==

"@esbuild/netbsd-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz#98898ba8800374c9df9bb182ca4f69fcecaf4411"
  integrity sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==

"@esbuild/openbsd-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz#46dc4eda2adb51f16361b1ad10e9b3f4938c4573"
  integrity sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==

"@esbuild/sunos-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz#1650d40dd88412ecc11490119cd23cbaf661a591"
  integrity sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==

"@esbuild/win32-arm64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz#e61de6c4eb204d83fd912f3ae6812cc8c7d32d25"
  integrity sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==

"@esbuild/win32-ia32@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz#3d9c159d42c67e37a433e44ef8217c661cb6f6d0"
  integrity sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==

"@esbuild/win32-x64@0.19.7":
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz#02c4446f802706098d8e6ee70cf2b7aba96ded0b"
  integrity sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==

"@rollup/rollup-android-arm-eabi@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.2.tgz#fa3e9ba323449f098b8d144ecaa4f044d2ff2ee3"
  integrity sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==

"@rollup/rollup-android-arm64@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.2.tgz#961089fe117ceca642b6432fadd093048da93ae8"
  integrity sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==

"@rollup/rollup-darwin-arm64@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.2.tgz#a8c13123b830aa743f604b732d72b260dd9de0f6"
  integrity sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==

"@rollup/rollup-darwin-x64@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.2.tgz#ab3a46c846bed784e8f52f253c59dcd70175ef24"
  integrity sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==

"@rollup/rollup-linux-arm-gnueabihf@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.2.tgz#aa98197f06d9d795a317152ec8d95e65a369053b"
  integrity sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==

"@rollup/rollup-linux-arm64-gnu@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.2.tgz#a0dc66fa46553b8bb1c96df41ae8308770aebecf"
  integrity sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==

"@rollup/rollup-linux-arm64-musl@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.2.tgz#32117bb51bdd761b8f759c9fed9eab493154cdfd"
  integrity sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==

"@rollup/rollup-linux-x64-gnu@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.2.tgz#566cda292f95d6ef995344887217a82e9fd20ad6"
  integrity sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==

"@rollup/rollup-linux-x64-musl@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.2.tgz#d5dcc18af0388209e11586d3c0c9626ba7577b04"
  integrity sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==

"@rollup/rollup-win32-arm64-msvc@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.2.tgz#b880eb1d349f166939ffbe27cbf1efd2e1923819"
  integrity sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==

"@rollup/rollup-win32-ia32-msvc@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.2.tgz#4b799c851864a10491a4755b5b8eadceae3e9889"
  integrity sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==

"@rollup/rollup-win32-x64-msvc@4.5.2":
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.2.tgz#7e59216d929a6b444304000be40c32d2d127fe4f"
  integrity sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==

esbuild@^0.19.3:
  version "0.19.7"
  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.7.tgz#b9a7235097b81278dcf090e2532ed13c95a2ee84"
  integrity sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==
  optionalDependencies:
    "@esbuild/android-arm" "0.19.7"
    "@esbuild/android-arm64" "0.19.7"
    "@esbuild/android-x64" "0.19.7"
    "@esbuild/darwin-arm64" "0.19.7"
    "@esbuild/darwin-x64" "0.19.7"
    "@esbuild/freebsd-arm64" "0.19.7"
    "@esbuild/freebsd-x64" "0.19.7"
    "@esbuild/linux-arm" "0.19.7"
    "@esbuild/linux-arm64" "0.19.7"
    "@esbuild/linux-ia32" "0.19.7"
    "@esbuild/linux-loong64" "0.19.7"
    "@esbuild/linux-mips64el" "0.19.7"
    "@esbuild/linux-ppc64" "0.19.7"
    "@esbuild/linux-riscv64" "0.19.7"
    "@esbuild/linux-s390x" "0.19.7"
    "@esbuild/linux-x64" "0.19.7"
    "@esbuild/netbsd-x64" "0.19.7"
    "@esbuild/openbsd-x64" "0.19.7"
    "@esbuild/sunos-x64" "0.19.7"
    "@esbuild/win32-arm64" "0.19.7"
    "@esbuild/win32-ia32" "0.19.7"
    "@esbuild/win32-x64" "0.19.7"

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==

nanoid@^3.3.6:
  version "3.3.7"
  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
  integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==

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==

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"

rollup@^4.2.0:
  version "4.5.2"
  resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.5.2.tgz#2cf0ef0a57cb4038c50a66356684fd30071d0595"
  integrity sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==
  optionalDependencies:
    "@rollup/rollup-android-arm-eabi" "4.5.2"
    "@rollup/rollup-android-arm64" "4.5.2"
    "@rollup/rollup-darwin-arm64" "4.5.2"
    "@rollup/rollup-darwin-x64" "4.5.2"
    "@rollup/rollup-linux-arm-gnueabihf" "4.5.2"
    "@rollup/rollup-linux-arm64-gnu" "4.5.2"
    "@rollup/rollup-linux-arm64-musl" "4.5.2"
    "@rollup/rollup-linux-x64-gnu" "4.5.2"
    "@rollup/rollup-linux-x64-musl" "4.5.2"
    "@rollup/rollup-win32-arm64-msvc" "4.5.2"
    "@rollup/rollup-win32-ia32-msvc" "4.5.2"
    "@rollup/rollup-win32-x64-msvc" "4.5.2"
    fsevents "~2.3.2"

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==

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==

vite@^5.0.0:
  version "5.0.2"
  resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.2.tgz#3c94627dace83b9bf04b64eaf618038e30fb95c0"
  integrity sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==
  dependencies:
    esbuild "^0.19.3"
    postcss "^8.4.31"
    rollup "^4.2.0"
  optionalDependencies:
    fsevents "~2.3.3"