Trading card city builder game?

relocate app code

+13461 -143
-95
.github/workflows/rust.yml
··· 1 - name: Rust CI 2 - on: push 3 - 4 - jobs: 5 - lint: 6 - runs-on: ubuntu-latest 7 - steps: 8 - - name: Checkout the source code 9 - uses: actions/checkout@v4 10 - - name: Dependencies 11 - uses: awalsh128/cache-apt-pkgs-action@latest 12 - with: 13 - packages: libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev 14 - - uses: actions/cache@v4 15 - with: 16 - path: | 17 - ~/.cargo/bin/ 18 - ~/.cargo/registry/index/ 19 - ~/.cargo/registry/cache/ 20 - ~/.cargo/git/db/ 21 - target/ 22 - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 23 - - name: Install Rust 24 - uses: dtolnay/rust-toolchain@stable 25 - - name: Run cargo clippy 26 - run: cargo clippy -- -D warnings 27 - working-directory: ./src-tauri 28 - 29 - fmt: 30 - runs-on: ubuntu-latest 31 - steps: 32 - - name: Checkout the source code 33 - uses: actions/checkout@v4 34 - - uses: actions/cache@v4 35 - with: 36 - path: | 37 - ~/.cargo/bin/ 38 - ~/.cargo/registry/index/ 39 - ~/.cargo/registry/cache/ 40 - ~/.cargo/git/db/ 41 - target/ 42 - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 43 - - name: Install Rust 44 - uses: dtolnay/rust-toolchain@stable 45 - - name: Run cargo fmt 46 - run: cargo fmt --check 47 - working-directory: ./src-tauri 48 - 49 - check: 50 - runs-on: ubuntu-latest 51 - steps: 52 - - name: Checkout the source code 53 - uses: actions/checkout@v4 54 - - name: Dependencies 55 - uses: awalsh128/cache-apt-pkgs-action@latest 56 - with: 57 - packages: libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev 58 - - uses: actions/cache@v4 59 - with: 60 - path: | 61 - ~/.cargo/bin/ 62 - ~/.cargo/registry/index/ 63 - ~/.cargo/registry/cache/ 64 - ~/.cargo/git/db/ 65 - target/ 66 - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 67 - - name: Install Rust 68 - uses: dtolnay/rust-toolchain@stable 69 - - name: Run cargo check 70 - run: cargo check 71 - working-directory: ./src-tauri 72 - 73 - test: 74 - runs-on: ubuntu-latest 75 - steps: 76 - - name: Checkout the source code 77 - uses: actions/checkout@v4 78 - - name: Dependencies 79 - uses: awalsh128/cache-apt-pkgs-action@latest 80 - with: 81 - packages: libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev 82 - - uses: actions/cache@v4 83 - with: 84 - path: | 85 - ~/.cargo/bin/ 86 - ~/.cargo/registry/index/ 87 - ~/.cargo/registry/cache/ 88 - ~/.cargo/git/db/ 89 - target/ 90 - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} 91 - - name: Install Rust 92 - uses: dtolnay/rust-toolchain@stable 93 - - name: Run cargo test 94 - run: cargo test 95 - working-directory: ./src-tauri
+8 -36
.github/workflows/typescript.yml
··· 26 26 steps: 27 27 - name: Checkout code 28 28 uses: actions/checkout@v4 29 - - name: Set up Gleam 30 - uses: erlef/setup-beam@v1 31 - with: 32 - gleam-version: "1.14.0" 33 - otp-version: "27" 34 - rebar3-version: "3.25.1" 35 29 - name: Install Node.js 36 30 uses: actions/setup-node@v4 37 31 with: 38 32 cache: npm 39 33 node-version-file: .node-version 40 - - name: Build API 41 - run: gleam build --target javascript 42 - working-directory: ./api 43 34 - name: Install node_modules 44 35 run: npm ci 36 + working-directory: ./app 45 37 - name: Run lint 46 38 run: npx eslint . --max-warnings 0 39 + working-directory: ./app 47 40 48 41 check: 49 42 runs-on: ubuntu-latest 50 43 steps: 51 44 - name: Checkout code 52 45 uses: actions/checkout@v4 53 - - name: Set up Gleam 54 - uses: erlef/setup-beam@v1 55 - with: 56 - gleam-version: "1.14.0" 57 - otp-version: "27" 58 - rebar3-version: "3.25.1" 59 46 - name: Install Node.js 60 47 uses: actions/setup-node@v4 61 48 with: ··· 63 50 node-version-file: .node-version 64 51 - name: Install node_modules 65 52 run: npm ci 66 - - name: Build API 67 - run: gleam build --target javascript 68 - working-directory: ./api 53 + working-directory: ./app 69 54 - name: Run check 70 55 run: | 71 56 set -e 72 57 npx svelte-kit sync 73 58 npx svelte-check --tsconfig ./tsconfig.json 59 + working-directory: ./app 74 60 75 61 build: 76 62 runs-on: ubuntu-latest 77 63 steps: 78 64 - name: Checkout code 79 65 uses: actions/checkout@v4 80 - - name: Set up Gleam 81 - uses: erlef/setup-beam@v1 82 - with: 83 - gleam-version: "1.14.0" 84 - otp-version: "27" 85 - rebar3-version: "3.25.1" 86 66 - name: Install Node.js 87 67 uses: actions/setup-node@v4 88 68 with: ··· 90 70 node-version-file: .node-version 91 71 - name: Install node_modules 92 72 run: npm ci 93 - - name: Build API 94 - run: gleam build --target javascript 95 - working-directory: ./api 73 + working-directory: ./app 96 74 - name: Run build 97 75 run: npx vite build 76 + working-directory: ./app 98 77 99 78 test: 100 79 runs-on: ubuntu-latest 101 80 steps: 102 81 - name: Checkout code 103 82 uses: actions/checkout@v4 104 - - name: Set up Gleam 105 - uses: erlef/setup-beam@v1 106 - with: 107 - gleam-version: "1.14.0" 108 - otp-version: "27" 109 - rebar3-version: "3.25.1" 110 83 - name: Install Node.js 111 84 uses: actions/setup-node@v4 112 85 with: 113 86 cache: npm 114 87 node-version-file: .node-version 88 + working-directory: ./app 115 89 - name: Install node_modules 116 90 run: npm ci 117 - - name: Build API 118 - run: gleam build --target javascript 119 - working-directory: ./api 120 91 - name: Run test 121 92 run: npm test 93 + working-directory: ./app
.node-version app/.node-version
.npmrc app/.npmrc
.prettierignore app/.prettierignore
+12 -12
Justfile
··· 21 21 [group: "run"] 22 22 dev: up squirrel 23 23 npx concurrently --names "sveltekit,migrate,server" \ 24 - "npx vite dev --host" \ 24 + "cd app && npx vite dev --host" \ 25 25 "npx graphile-migrate watch" \ 26 26 "cd server && gleam run" 27 27 ··· 41 41 42 42 [group: "dev"] 43 43 get: 44 - npm install 44 + cd app && npm install 45 45 cd server && gleam deps download 46 46 cd api && gleam deps download 47 47 ··· 62 62 [group: "release"] 63 63 build: 64 64 cd server && gleam build 65 - npx svelte-kit sync 66 - npx vite build 65 + cd app && npx svelte-kit sync 66 + cd app && npx vite build 67 67 68 68 [group: "dev"] 69 69 clean: 70 - rm -rf .svelte-kit build .eslintcache 70 + rm -rf app/.svelte-kit app/build app/.eslintcache 71 71 72 72 [group: "dev"] 73 73 check: 74 74 cd api && gleam check 75 75 cd server && gleam check 76 - npx svelte-kit sync 77 - npx svelte-check --tsconfig ./tsconfig.json 76 + cd app && npx svelte-kit sync 77 + cd app && npx svelte-check --tsconfig ./tsconfig.json 78 78 79 79 [group: "dev"] 80 80 watch: 81 - npx svelte-kit sync 82 - npx svelte-check --tsconfig ./tsconfig.json --watch 81 + cd app && npx svelte-kit sync 82 + cd app && npx svelte-check --tsconfig ./tsconfig.json --watch 83 83 84 84 [group: "dev"] 85 85 lint mode="check": 86 - npx eslint . {{ if mode == "fix" { "--fix" } else { "--cache" } }} 86 + cd app && npx eslint . {{ if mode == "fix" { "--fix" } else { "--cache" } }} 87 87 88 88 [group: "dev"] 89 89 fmt: 90 90 cd api && gleam format 91 91 cd server && gleam format 92 - npx prettier --write . --cache 92 + cd app && npx prettier --write . --cache 93 93 94 94 [group: "dev"] 95 95 test: 96 96 cd api && gleam test 97 97 cd server && gleam test 98 - npm test 98 + cd app && npm test 99 99 100 100 [group: "database"] 101 101 migrate:
+304
app/.svelte-kit/ambient.d.ts
··· 1 + 2 + // this file is generated — do not edit it 3 + 4 + 5 + /// <reference types="@sveltejs/kit" /> 6 + 7 + /** 8 + * Environment variables [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env`. Like [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), this module cannot be imported into client-side code. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). 9 + * 10 + * _Unlike_ [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), the values exported from this module are statically injected into your bundle at build time, enabling optimisations like dead code elimination. 11 + * 12 + * ```ts 13 + * import { API_KEY } from '$env/static/private'; 14 + * ``` 15 + * 16 + * Note that all environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed: 17 + * 18 + * ``` 19 + * MY_FEATURE_FLAG="" 20 + * ``` 21 + * 22 + * You can override `.env` values from the command line like so: 23 + * 24 + * ```sh 25 + * MY_FEATURE_FLAG="enabled" npm run dev 26 + * ``` 27 + */ 28 + declare module '$env/static/private' { 29 + export const DATABASE_URL: string; 30 + export const SHADOW_DATABASE_URL: string; 31 + export const ROOT_DATABASE_URL: string; 32 + export const npm_package_engines_npm: string; 33 + export const fish_color_param: string; 34 + export const LDFLAGS: string; 35 + export const MANPATH: string; 36 + export const __MISE_DIFF: string; 37 + export const TERM_PROGRAM: string; 38 + export const NODE: string; 39 + export const fish_color_normal: string; 40 + export const INIT_CWD: string; 41 + export const GEM_HOME: string; 42 + export const SHELL: string; 43 + export const TERM: string; 44 + export const CPPFLAGS: string; 45 + export const HOMEBREW_REPOSITORY: string; 46 + export const PIPENV_VENV_IN_PROJECT: string; 47 + export const TMPDIR: string; 48 + export const npm_config_global_prefix: string; 49 + export const GOBIN: string; 50 + export const LLVM_SYS_191_PREFIX: string; 51 + export const TERM_PROGRAM_VERSION: string; 52 + export const CONCURRENTLY_PAD_PREFIX: string; 53 + export const JUST_CHOOSER: string; 54 + export const fish_color_escape: string; 55 + export const COLOR: string; 56 + export const npm_config_noproxy: string; 57 + export const npm_config_local_prefix: string; 58 + export const USER: string; 59 + export const fish_color_operator: string; 60 + export const LD_LIBRARY_PATH: string; 61 + export const COMMAND_MODE: string; 62 + export const skin: string; 63 + export const npm_config_globalconfig: string; 64 + export const fish_color_autosuggestion: string; 65 + export const SSH_AUTH_SOCK: string; 66 + export const __CF_USER_TEXT_ENCODING: string; 67 + export const fish_color_search_match: string; 68 + export const npm_execpath: string; 69 + export const SKIM_DEFAULT_COMMAND: string; 70 + export const TMUX: string; 71 + export const LLVM_SYS_211_PREFIX: string; 72 + export const WEZTERM_EXECUTABLE_DIR: string; 73 + export const fish_color_match: string; 74 + export const PATH: string; 75 + export const fish_color_selection: string; 76 + export const fish_color_tab: string; 77 + export const npm_package_json: string; 78 + export const _: string; 79 + export const npm_config_userconfig: string; 80 + export const npm_config_init_module: string; 81 + export const __CFBundleIdentifier: string; 82 + export const fish_color_user: string; 83 + export const npm_command: string; 84 + export const CONCURRENTLY_KILL_OTHERS: string; 85 + export const PWD: string; 86 + export const npm_lifecycle_event: string; 87 + export const EDITOR: string; 88 + export const npm_package_name: string; 89 + export const LANG: string; 90 + export const WEZTERM_PANE: string; 91 + export const fish_color_history_current: string; 92 + export const CLOUDSDK_PYTHON: string; 93 + export const npm_config_npm_version: string; 94 + export const TMUX_PANE: string; 95 + export const XPC_FLAGS: string; 96 + export const fish_color_cancel: string; 97 + export const fish_color_quote: string; 98 + export const CONCURRENTLY_PREFIX_COLORS: string; 99 + export const FORCE_COLOR: string; 100 + export const npm_package_engines_node: string; 101 + export const fish_color_error: string; 102 + export const npm_config_node_gyp: string; 103 + export const RBENV_SHELL: string; 104 + export const npm_package_version: string; 105 + export const WEZTERM_UNIX_SOCKET: string; 106 + export const XPC_SERVICE_NAME: string; 107 + export const GPG_TTY: string; 108 + export const fish_color_comment: string; 109 + export const fish_color_cwd_root: string; 110 + export const HOME: string; 111 + export const SHLVL: string; 112 + export const GOROOT: string; 113 + export const __MISE_ORIG_PATH: string; 114 + export const HOMEBREW_PREFIX: string; 115 + export const fish_color_command: string; 116 + export const fish_color_end: string; 117 + export const scripts: string; 118 + export const MISE_SHELL: string; 119 + export const WEZTERM_CONFIG_DIR: string; 120 + export const fish_color_cwd: string; 121 + export const npm_config_cache: string; 122 + export const LOGNAME: string; 123 + export const npm_lifecycle_script: string; 124 + export const FZF_DEFAULT_COMMAND: string; 125 + export const BUN_INSTALL: string; 126 + export const fish_color_status: string; 127 + export const fish_color_vcs: string; 128 + export const npm_config_user_agent: string; 129 + export const HOMEBREW_CELLAR: string; 130 + export const INFOPATH: string; 131 + export const __MISE_SESSION: string; 132 + export const WEZTERM_EXECUTABLE: string; 133 + export const fish_color_redirection: string; 134 + export const fish_color_valid_path: string; 135 + export const WEZTERM_CONFIG_FILE: string; 136 + export const npm_node_execpath: string; 137 + export const npm_config_prefix: string; 138 + export const COLORTERM: string; 139 + export const fish_color_host: string; 140 + export const NODE_ENV: string; 141 + } 142 + 143 + /** 144 + * Similar to [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private), except that it only includes environment variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. 145 + * 146 + * Values are replaced statically at build time. 147 + * 148 + * ```ts 149 + * import { PUBLIC_BASE_URL } from '$env/static/public'; 150 + * ``` 151 + */ 152 + declare module '$env/static/public' { 153 + export const PUBLIC_SERVER_URL: string; 154 + export const PUBLIC_SERVER_WS_URL: string; 155 + } 156 + 157 + /** 158 + * This module provides access to runtime environment variables, as defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured). 159 + * 160 + * This module cannot be imported into client-side code. 161 + * 162 + * ```ts 163 + * import { env } from '$env/dynamic/private'; 164 + * console.log(env.DEPLOYMENT_SPECIFIC_VARIABLE); 165 + * ``` 166 + * 167 + * > [!NOTE] In `dev`, `$env/dynamic` always includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter. 168 + */ 169 + declare module '$env/dynamic/private' { 170 + export const env: { 171 + DATABASE_URL: string; 172 + SHADOW_DATABASE_URL: string; 173 + ROOT_DATABASE_URL: string; 174 + npm_package_engines_npm: string; 175 + fish_color_param: string; 176 + LDFLAGS: string; 177 + MANPATH: string; 178 + __MISE_DIFF: string; 179 + TERM_PROGRAM: string; 180 + NODE: string; 181 + fish_color_normal: string; 182 + INIT_CWD: string; 183 + GEM_HOME: string; 184 + SHELL: string; 185 + TERM: string; 186 + CPPFLAGS: string; 187 + HOMEBREW_REPOSITORY: string; 188 + PIPENV_VENV_IN_PROJECT: string; 189 + TMPDIR: string; 190 + npm_config_global_prefix: string; 191 + GOBIN: string; 192 + LLVM_SYS_191_PREFIX: string; 193 + TERM_PROGRAM_VERSION: string; 194 + CONCURRENTLY_PAD_PREFIX: string; 195 + JUST_CHOOSER: string; 196 + fish_color_escape: string; 197 + COLOR: string; 198 + npm_config_noproxy: string; 199 + npm_config_local_prefix: string; 200 + USER: string; 201 + fish_color_operator: string; 202 + LD_LIBRARY_PATH: string; 203 + COMMAND_MODE: string; 204 + skin: string; 205 + npm_config_globalconfig: string; 206 + fish_color_autosuggestion: string; 207 + SSH_AUTH_SOCK: string; 208 + __CF_USER_TEXT_ENCODING: string; 209 + fish_color_search_match: string; 210 + npm_execpath: string; 211 + SKIM_DEFAULT_COMMAND: string; 212 + TMUX: string; 213 + LLVM_SYS_211_PREFIX: string; 214 + WEZTERM_EXECUTABLE_DIR: string; 215 + fish_color_match: string; 216 + PATH: string; 217 + fish_color_selection: string; 218 + fish_color_tab: string; 219 + npm_package_json: string; 220 + _: string; 221 + npm_config_userconfig: string; 222 + npm_config_init_module: string; 223 + __CFBundleIdentifier: string; 224 + fish_color_user: string; 225 + npm_command: string; 226 + CONCURRENTLY_KILL_OTHERS: string; 227 + PWD: string; 228 + npm_lifecycle_event: string; 229 + EDITOR: string; 230 + npm_package_name: string; 231 + LANG: string; 232 + WEZTERM_PANE: string; 233 + fish_color_history_current: string; 234 + CLOUDSDK_PYTHON: string; 235 + npm_config_npm_version: string; 236 + TMUX_PANE: string; 237 + XPC_FLAGS: string; 238 + fish_color_cancel: string; 239 + fish_color_quote: string; 240 + CONCURRENTLY_PREFIX_COLORS: string; 241 + FORCE_COLOR: string; 242 + npm_package_engines_node: string; 243 + fish_color_error: string; 244 + npm_config_node_gyp: string; 245 + RBENV_SHELL: string; 246 + npm_package_version: string; 247 + WEZTERM_UNIX_SOCKET: string; 248 + XPC_SERVICE_NAME: string; 249 + GPG_TTY: string; 250 + fish_color_comment: string; 251 + fish_color_cwd_root: string; 252 + HOME: string; 253 + SHLVL: string; 254 + GOROOT: string; 255 + __MISE_ORIG_PATH: string; 256 + HOMEBREW_PREFIX: string; 257 + fish_color_command: string; 258 + fish_color_end: string; 259 + scripts: string; 260 + MISE_SHELL: string; 261 + WEZTERM_CONFIG_DIR: string; 262 + fish_color_cwd: string; 263 + npm_config_cache: string; 264 + LOGNAME: string; 265 + npm_lifecycle_script: string; 266 + FZF_DEFAULT_COMMAND: string; 267 + BUN_INSTALL: string; 268 + fish_color_status: string; 269 + fish_color_vcs: string; 270 + npm_config_user_agent: string; 271 + HOMEBREW_CELLAR: string; 272 + INFOPATH: string; 273 + __MISE_SESSION: string; 274 + WEZTERM_EXECUTABLE: string; 275 + fish_color_redirection: string; 276 + fish_color_valid_path: string; 277 + WEZTERM_CONFIG_FILE: string; 278 + npm_node_execpath: string; 279 + npm_config_prefix: string; 280 + COLORTERM: string; 281 + fish_color_host: string; 282 + NODE_ENV: string; 283 + [key: `PUBLIC_${string}`]: undefined; 284 + [key: `${string}`]: string | undefined; 285 + } 286 + } 287 + 288 + /** 289 + * Similar to [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), but only includes variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code. 290 + * 291 + * Note that public dynamic environment variables must all be sent from the server to the client, causing larger network requests — when possible, use `$env/static/public` instead. 292 + * 293 + * ```ts 294 + * import { env } from '$env/dynamic/public'; 295 + * console.log(env.PUBLIC_DEPLOYMENT_SPECIFIC_VARIABLE); 296 + * ``` 297 + */ 298 + declare module '$env/dynamic/public' { 299 + export const env: { 300 + PUBLIC_SERVER_URL: string; 301 + PUBLIC_SERVER_WS_URL: string; 302 + [key: `PUBLIC_${string}`]: string | undefined; 303 + } 304 + }
+38
app/.svelte-kit/generated/client-optimized/app.js
··· 1 + export { matchers } from './matchers.js'; 2 + 3 + export const nodes = [ 4 + () => import('./nodes/0'), 5 + () => import('./nodes/1'), 6 + () => import('./nodes/2'), 7 + () => import('./nodes/3'), 8 + () => import('./nodes/4'), 9 + () => import('./nodes/5'), 10 + () => import('./nodes/6'), 11 + () => import('./nodes/7') 12 + ]; 13 + 14 + export const server_loads = []; 15 + 16 + export const dictionary = { 17 + "/": [3], 18 + "/cards": [6], 19 + "/(socket)/field/[fieldId=FieldId]": [4,[2]], 20 + "/(socket)/overworld": [5,[2]], 21 + "/play": [7] 22 + }; 23 + 24 + export const hooks = { 25 + handleError: (({ error }) => { console.error(error) }), 26 + 27 + reroute: (() => {}), 28 + transport: {} 29 + }; 30 + 31 + export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); 32 + export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode])); 33 + 34 + export const hash = false; 35 + 36 + export const decode = (type, value) => decoders[type](value); 37 + 38 + export { default as root } from '../root.js';
+3
app/.svelte-kit/generated/client-optimized/matchers.js
··· 1 + import { match as FieldId } from "../../../src/params/FieldId.ts"; 2 + 3 + export const matchers = { FieldId };
+3
app/.svelte-kit/generated/client-optimized/nodes/0.js
··· 1 + import * as universal from "../../../../src/routes/+layout.ts"; 2 + export { universal }; 3 + export { default as component } from "../../../../src/routes/+layout.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/1.js
··· 1 + export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/2.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/+layout.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/3.js
··· 1 + export { default as component } from "../../../../src/routes/+page.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/4.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/field/[fieldId=FieldId]/+page.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/5.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/overworld/+page.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/6.js
··· 1 + export { default as component } from "../../../../src/routes/cards/+page.svelte";
+1
app/.svelte-kit/generated/client-optimized/nodes/7.js
··· 1 + export { default as component } from "../../../../src/routes/play/+page.svelte";
+38
app/.svelte-kit/generated/client/app.js
··· 1 + export { matchers } from './matchers.js'; 2 + 3 + export const nodes = [ 4 + () => import('./nodes/0'), 5 + () => import('./nodes/1'), 6 + () => import('./nodes/2'), 7 + () => import('./nodes/3'), 8 + () => import('./nodes/4'), 9 + () => import('./nodes/5'), 10 + () => import('./nodes/6'), 11 + () => import('./nodes/7') 12 + ]; 13 + 14 + export const server_loads = []; 15 + 16 + export const dictionary = { 17 + "/": [3], 18 + "/cards": [6], 19 + "/(socket)/field/[fieldId=FieldId]": [4,[2]], 20 + "/(socket)/overworld": [5,[2]], 21 + "/play": [7] 22 + }; 23 + 24 + export const hooks = { 25 + handleError: (({ error }) => { console.error(error) }), 26 + 27 + reroute: (() => {}), 28 + transport: {} 29 + }; 30 + 31 + export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode])); 32 + export const encoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.encode])); 33 + 34 + export const hash = false; 35 + 36 + export const decode = (type, value) => decoders[type](value); 37 + 38 + export { default as root } from '../root.js';
+3
app/.svelte-kit/generated/client/matchers.js
··· 1 + import { match as FieldId } from "../../../src/params/FieldId.ts"; 2 + 3 + export const matchers = { FieldId };
+3
app/.svelte-kit/generated/client/nodes/0.js
··· 1 + import * as universal from "../../../../src/routes/+layout.ts"; 2 + export { universal }; 3 + export { default as component } from "../../../../src/routes/+layout.svelte";
+1
app/.svelte-kit/generated/client/nodes/1.js
··· 1 + export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";
+1
app/.svelte-kit/generated/client/nodes/2.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/+layout.svelte";
+1
app/.svelte-kit/generated/client/nodes/3.js
··· 1 + export { default as component } from "../../../../src/routes/+page.svelte";
+1
app/.svelte-kit/generated/client/nodes/4.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/field/[fieldId=FieldId]/+page.svelte";
+1
app/.svelte-kit/generated/client/nodes/5.js
··· 1 + export { default as component } from "../../../../src/routes/(socket)/overworld/+page.svelte";
+1
app/.svelte-kit/generated/client/nodes/6.js
··· 1 + export { default as component } from "../../../../src/routes/cards/+page.svelte";
+1
app/.svelte-kit/generated/client/nodes/7.js
··· 1 + export { default as component } from "../../../../src/routes/play/+page.svelte";
+3
app/.svelte-kit/generated/root.js
··· 1 + import { asClassComponent } from 'svelte/legacy'; 2 + import Root from './root.svelte'; 3 + export default asClassComponent(Root);
+80
app/.svelte-kit/generated/root.svelte
··· 1 + <!-- This file is generated by @sveltejs/kit — do not edit it! --> 2 + <svelte:options runes={true} /> 3 + <script> 4 + import { setContext, onMount, tick } from 'svelte'; 5 + import { browser } from '$app/environment'; 6 + 7 + // stores 8 + let { stores, page, constructors, components = [], form, data_0 = null, data_1 = null, data_2 = null } = $props(); 9 + 10 + if (!browser) { 11 + // svelte-ignore state_referenced_locally 12 + setContext('__svelte__', stores); 13 + } 14 + 15 + if (browser) { 16 + $effect.pre(() => stores.page.set(page)); 17 + } else { 18 + // svelte-ignore state_referenced_locally 19 + stores.page.set(page); 20 + } 21 + $effect(() => { 22 + stores;page;constructors;components;form;data_0;data_1;data_2; 23 + stores.page.notify(); 24 + }); 25 + 26 + let mounted = $state(false); 27 + let navigated = $state(false); 28 + let title = $state(null); 29 + 30 + onMount(() => { 31 + const unsubscribe = stores.page.subscribe(() => { 32 + if (mounted) { 33 + navigated = true; 34 + tick().then(() => { 35 + title = document.title || 'untitled page'; 36 + }); 37 + } 38 + }); 39 + 40 + mounted = true; 41 + return unsubscribe; 42 + }); 43 + 44 + const Pyramid_2=$derived(constructors[2]) 45 + </script> 46 + 47 + {#if constructors[1]} 48 + {@const Pyramid_0 = constructors[0]} 49 + <!-- svelte-ignore binding_property_non_reactive --> 50 + <Pyramid_0 bind:this={components[0]} data={data_0} {form} params={page.params}> 51 + {#if constructors[2]} 52 + {@const Pyramid_1 = constructors[1]} 53 + <!-- svelte-ignore binding_property_non_reactive --> 54 + <Pyramid_1 bind:this={components[1]} data={data_1} {form} params={page.params}> 55 + <!-- svelte-ignore binding_property_non_reactive --> 56 + <Pyramid_2 bind:this={components[2]} data={data_2} {form} params={page.params} /> 57 + </Pyramid_1> 58 + 59 + {:else} 60 + {@const Pyramid_1 = constructors[1]} 61 + <!-- svelte-ignore binding_property_non_reactive --> 62 + <Pyramid_1 bind:this={components[1]} data={data_1} {form} params={page.params} /> 63 + 64 + {/if} 65 + </Pyramid_0> 66 + 67 + {:else} 68 + {@const Pyramid_0 = constructors[0]} 69 + <!-- svelte-ignore binding_property_non_reactive --> 70 + <Pyramid_0 bind:this={components[0]} data={data_0} {form} params={page.params} /> 71 + 72 + {/if} 73 + 74 + {#if mounted} 75 + <div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"> 76 + {#if navigated} 77 + {title} 78 + {/if} 79 + </div> 80 + {/if}
+53
app/.svelte-kit/generated/server/internal.js
··· 1 + 2 + import root from '../root.js'; 3 + import { set_building, set_prerendering } from '__sveltekit/environment'; 4 + import { set_assets } from '$app/paths/internal/server'; 5 + import { set_manifest, set_read_implementation } from '__sveltekit/server'; 6 + import { set_private_env, set_public_env } from '../../../node_modules/@sveltejs/kit/src/runtime/shared-server.js'; 7 + 8 + export const options = { 9 + app_template_contains_nonce: false, 10 + async: false, 11 + csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false},"reportOnly":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}}, 12 + csrf_check_origin: true, 13 + csrf_trusted_origins: [], 14 + embedded: false, 15 + env_public_prefix: 'PUBLIC_', 16 + env_private_prefix: '', 17 + hash_routing: false, 18 + hooks: null, // added lazily, via `get_hooks` 19 + preload_strategy: "modulepreload", 20 + root, 21 + service_worker: false, 22 + service_worker_options: undefined, 23 + templates: { 24 + app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n <meta\n name=\"viewport\"\n content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"\n />\n " + head + "\n <style>\n @property --grid-x {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 0;\n }\n\n @property --grid-y {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 0;\n }\n\n @property --drag-x {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --drag-y {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-x {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-y {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-rotation {\n syntax: \"<angle>\";\n inherits: false;\n initial-value: 0deg;\n }\n\n :root {\n font-size: 16px;\n overscroll-behavior: none;\n\n --color-money: rgb(214 168 15);\n --color-resource: rgb(199 73 52);\n --color-terrain: rgb(38 163 38);\n --color-card: rgb(164 85 217);\n --color-species: rgb(16 121 227);\n --color-pack: rgb(179 43 74);\n --color-input: rgb(66 90 245);\n --color-output: rgb(244 0 213);\n }\n\n body {\n min-height: 100vh;\n font-size: 1rem;\n font-weight: 400;\n }\n\n * {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n box-sizing: border-box;\n }\n\n a:link,\n a:visited,\n a:active,\n a {\n text-decoration: none;\n color: black;\n }\n\n h1 {\n font-size: 2rem;\n font-weight: bold;\n }\n\n button {\n padding: 0.5rem 1rem;\n border: 1px solid rgb(0 0 0 / 0.25);\n border-radius: 0.25rem;\n background: rgb(0 0 0 / 0);\n cursor: pointer;\n font-size: 1rem;\n\n &:hover,\n &:focus-visible {\n background-color: rgb(0 0 0 / 0.05);\n }\n }\n </style>\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">" + body + "</div>\n </body>\n</html>\n", 25 + error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n" 26 + }, 27 + version_hash: "zgf3sv" 28 + }; 29 + 30 + export async function get_hooks() { 31 + let handle; 32 + let handleFetch; 33 + let handleError; 34 + let handleValidationError; 35 + let init; 36 + 37 + 38 + let reroute; 39 + let transport; 40 + 41 + 42 + return { 43 + handle, 44 + handleFetch, 45 + handleError, 46 + handleValidationError, 47 + init, 48 + reroute, 49 + transport 50 + }; 51 + } 52 + 53 + export { set_assets, set_building, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation };
+50
app/.svelte-kit/non-ambient.d.ts
··· 1 + 2 + // this file is generated — do not edit it 3 + 4 + 5 + declare module "svelte/elements" { 6 + export interface HTMLAttributes<T> { 7 + 'data-sveltekit-keepfocus'?: true | '' | 'off' | undefined | null; 8 + 'data-sveltekit-noscroll'?: true | '' | 'off' | undefined | null; 9 + 'data-sveltekit-preload-code'?: 10 + | true 11 + | '' 12 + | 'eager' 13 + | 'viewport' 14 + | 'hover' 15 + | 'tap' 16 + | 'off' 17 + | undefined 18 + | null; 19 + 'data-sveltekit-preload-data'?: true | '' | 'hover' | 'tap' | 'off' | undefined | null; 20 + 'data-sveltekit-reload'?: true | '' | 'off' | undefined | null; 21 + 'data-sveltekit-replacestate'?: true | '' | 'off' | undefined | null; 22 + } 23 + } 24 + 25 + export {}; 26 + 27 + 28 + declare module "$app/types" { 29 + export interface AppTypes { 30 + RouteId(): "/(socket)" | "/" | "/cards" | "/(socket)/field" | "/(socket)/field/[fieldId=FieldId]" | "/(socket)/field/[fieldId=FieldId]/components" | "/(socket)/overworld" | "/(socket)/overworld/components" | "/play"; 31 + RouteParams(): { 32 + "/(socket)/field/[fieldId=FieldId]": { fieldId: string }; 33 + "/(socket)/field/[fieldId=FieldId]/components": { fieldId: string } 34 + }; 35 + LayoutParams(): { 36 + "/(socket)": { fieldId?: string }; 37 + "/": { fieldId?: string }; 38 + "/cards": Record<string, never>; 39 + "/(socket)/field": { fieldId?: string }; 40 + "/(socket)/field/[fieldId=FieldId]": { fieldId: string }; 41 + "/(socket)/field/[fieldId=FieldId]/components": { fieldId: string }; 42 + "/(socket)/overworld": Record<string, never>; 43 + "/(socket)/overworld/components": Record<string, never>; 44 + "/play": Record<string, never> 45 + }; 46 + Pathname(): "/" | "/cards" | "/cards/" | "/field" | "/field/" | `/field/${string}` & {} | `/field/${string}/` & {} | `/field/${string}/components` & {} | `/field/${string}/components/` & {} | "/overworld" | "/overworld/" | "/overworld/components" | "/overworld/components/" | "/play" | "/play/"; 47 + ResolvedPathname(): `${"" | `/${string}`}${ReturnType<AppTypes['Pathname']>}`; 48 + Asset(): "/favicon.png" | string & {}; 49 + } 50 + }
+365
app/.svelte-kit/output/client/.vite/manifest.json
··· 1 + { 2 + ".svelte-kit/generated/client-optimized/app.js": { 3 + "file": "_app/immutable/entry/app.v3Vgvfg_.js", 4 + "name": "entry/app", 5 + "src": ".svelte-kit/generated/client-optimized/app.js", 6 + "isEntry": true, 7 + "imports": [ 8 + "_Cy0nnqwK.js", 9 + "_Zp7FgOxX.js", 10 + "_DTjTDYf3.js", 11 + "_CmPt_qt9.js", 12 + "_BxqNGrrm.js", 13 + "_C3Bw9t1P.js", 14 + "_DIcbJqE8.js", 15 + "_IrKOPqpB.js" 16 + ], 17 + "dynamicImports": [ 18 + ".svelte-kit/generated/client-optimized/nodes/0.js", 19 + ".svelte-kit/generated/client-optimized/nodes/1.js", 20 + ".svelte-kit/generated/client-optimized/nodes/2.js", 21 + ".svelte-kit/generated/client-optimized/nodes/3.js", 22 + ".svelte-kit/generated/client-optimized/nodes/4.js", 23 + ".svelte-kit/generated/client-optimized/nodes/5.js", 24 + ".svelte-kit/generated/client-optimized/nodes/6.js", 25 + ".svelte-kit/generated/client-optimized/nodes/7.js" 26 + ] 27 + }, 28 + ".svelte-kit/generated/client-optimized/nodes/0.js": { 29 + "file": "_app/immutable/nodes/0.Bpyn17vy.js", 30 + "name": "nodes/0", 31 + "src": ".svelte-kit/generated/client-optimized/nodes/0.js", 32 + "isEntry": true, 33 + "isDynamicEntry": true, 34 + "imports": [ 35 + "_DTjTDYf3.js", 36 + "_Cy0nnqwK.js", 37 + "_VCyrUZ76.js" 38 + ] 39 + }, 40 + ".svelte-kit/generated/client-optimized/nodes/1.js": { 41 + "file": "_app/immutable/nodes/1.zAvY42iv.js", 42 + "name": "nodes/1", 43 + "src": ".svelte-kit/generated/client-optimized/nodes/1.js", 44 + "isEntry": true, 45 + "isDynamicEntry": true, 46 + "imports": [ 47 + "_DTjTDYf3.js", 48 + "_Dwwks_Q7.js", 49 + "_Cy0nnqwK.js", 50 + "_Zp7FgOxX.js", 51 + "_BfVwtNtA.js", 52 + "_BXN2zbQS.js" 53 + ] 54 + }, 55 + ".svelte-kit/generated/client-optimized/nodes/2.js": { 56 + "file": "_app/immutable/nodes/2.B3v9Uros.js", 57 + "name": "nodes/2", 58 + "src": ".svelte-kit/generated/client-optimized/nodes/2.js", 59 + "isEntry": true, 60 + "isDynamicEntry": true, 61 + "imports": [ 62 + "_DTjTDYf3.js", 63 + "_Cy0nnqwK.js", 64 + "_VCyrUZ76.js", 65 + "_Disko3h9.js" 66 + ] 67 + }, 68 + ".svelte-kit/generated/client-optimized/nodes/3.js": { 69 + "file": "_app/immutable/nodes/3.rm3kMfwl.js", 70 + "name": "nodes/3", 71 + "src": ".svelte-kit/generated/client-optimized/nodes/3.js", 72 + "isEntry": true, 73 + "isDynamicEntry": true, 74 + "imports": [ 75 + "_DTjTDYf3.js", 76 + "_Dwwks_Q7.js" 77 + ], 78 + "css": [ 79 + "_app/immutable/assets/3.DHpgJXmb.css" 80 + ] 81 + }, 82 + ".svelte-kit/generated/client-optimized/nodes/4.js": { 83 + "file": "_app/immutable/nodes/4.DThprzVs.js", 84 + "name": "nodes/4", 85 + "src": ".svelte-kit/generated/client-optimized/nodes/4.js", 86 + "isEntry": true, 87 + "isDynamicEntry": true, 88 + "imports": [ 89 + "_DTjTDYf3.js", 90 + "_Cy0nnqwK.js", 91 + "_IrKOPqpB.js", 92 + "_BXN2zbQS.js", 93 + "_CFNKoBvp.js", 94 + "_Disko3h9.js", 95 + "_Du5sam5i.js" 96 + ] 97 + }, 98 + ".svelte-kit/generated/client-optimized/nodes/5.js": { 99 + "file": "_app/immutable/nodes/5.QeLDNF63.js", 100 + "name": "nodes/5", 101 + "src": ".svelte-kit/generated/client-optimized/nodes/5.js", 102 + "isEntry": true, 103 + "isDynamicEntry": true, 104 + "imports": [ 105 + "_DTjTDYf3.js", 106 + "_Cy0nnqwK.js", 107 + "_Zp7FgOxX.js", 108 + "_BxqNGrrm.js", 109 + "_DTiiyNL4.js", 110 + "_BXN2zbQS.js", 111 + "_B5ZTdtgC.js", 112 + "_CFNKoBvp.js", 113 + "_Disko3h9.js", 114 + "_Du5sam5i.js" 115 + ], 116 + "css": [ 117 + "_app/immutable/assets/5.BH-JXrvf.css" 118 + ] 119 + }, 120 + ".svelte-kit/generated/client-optimized/nodes/6.js": { 121 + "file": "_app/immutable/nodes/6.BjAi8SzL.js", 122 + "name": "nodes/6", 123 + "src": ".svelte-kit/generated/client-optimized/nodes/6.js", 124 + "isEntry": true, 125 + "isDynamicEntry": true, 126 + "imports": [ 127 + "_DTjTDYf3.js", 128 + "_Dwwks_Q7.js", 129 + "_Cy0nnqwK.js", 130 + "_BfVwtNtA.js", 131 + "_CvUAJ54q.js" 132 + ], 133 + "css": [ 134 + "_app/immutable/assets/6.DYvKU7Oc.css" 135 + ] 136 + }, 137 + ".svelte-kit/generated/client-optimized/nodes/7.js": { 138 + "file": "_app/immutable/nodes/7.DyXTg_vC.js", 139 + "name": "nodes/7", 140 + "src": ".svelte-kit/generated/client-optimized/nodes/7.js", 141 + "isEntry": true, 142 + "isDynamicEntry": true, 143 + "imports": [ 144 + "_DTjTDYf3.js", 145 + "_Dwwks_Q7.js", 146 + "_Cy0nnqwK.js", 147 + "_VCyrUZ76.js", 148 + "_wnUvJIYz.js", 149 + "_CvUAJ54q.js", 150 + "_BxqNGrrm.js", 151 + "_DTiiyNL4.js", 152 + "_Ni3ygk_w.js", 153 + "_Zp7FgOxX.js", 154 + "_IrKOPqpB.js", 155 + "_B5ZTdtgC.js", 156 + "_CFNKoBvp.js", 157 + "_DIcbJqE8.js" 158 + ], 159 + "css": [ 160 + "_app/immutable/assets/7.DSn3KEp4.css" 161 + ] 162 + }, 163 + "_B5ZTdtgC.js": { 164 + "file": "_app/immutable/chunks/B5ZTdtgC.js", 165 + "name": "GridLines", 166 + "imports": [ 167 + "_DTjTDYf3.js", 168 + "_Cy0nnqwK.js", 169 + "_wnUvJIYz.js", 170 + "_VCyrUZ76.js", 171 + "_BxqNGrrm.js", 172 + "_DTiiyNL4.js", 173 + "_Ni3ygk_w.js", 174 + "_IrKOPqpB.js" 175 + ], 176 + "css": [ 177 + "_app/immutable/assets/GridLines.Cmy_IU9Y.css" 178 + ] 179 + }, 180 + "_BXN2zbQS.js": { 181 + "file": "_app/immutable/chunks/BXN2zbQS.js", 182 + "name": "entry", 183 + "imports": [ 184 + "_Cy0nnqwK.js", 185 + "_F8Rf94kU.js", 186 + "_CmPt_qt9.js" 187 + ] 188 + }, 189 + "_BfVwtNtA.js": { 190 + "file": "_app/immutable/chunks/BfVwtNtA.js", 191 + "name": "lifecycle", 192 + "imports": [ 193 + "_Cy0nnqwK.js" 194 + ] 195 + }, 196 + "_BxqNGrrm.js": { 197 + "file": "_app/immutable/chunks/BxqNGrrm.js", 198 + "name": "if", 199 + "imports": [ 200 + "_Cy0nnqwK.js", 201 + "_C3Bw9t1P.js" 202 + ] 203 + }, 204 + "_C3Bw9t1P.js": { 205 + "file": "_app/immutable/chunks/C3Bw9t1P.js", 206 + "name": "branches", 207 + "imports": [ 208 + "_Cy0nnqwK.js" 209 + ] 210 + }, 211 + "_CFNKoBvp.js": { 212 + "file": "_app/immutable/chunks/CFNKoBvp.js", 213 + "name": "DragWindow", 214 + "imports": [ 215 + "_DTjTDYf3.js", 216 + "_Cy0nnqwK.js", 217 + "_wnUvJIYz.js", 218 + "_VCyrUZ76.js", 219 + "_Ni3ygk_w.js", 220 + "_IrKOPqpB.js" 221 + ], 222 + "css": [ 223 + "_app/immutable/assets/DragWindow.Ct7pKWbu.css" 224 + ] 225 + }, 226 + "_CardGrid.DkTs1kla.css": { 227 + "file": "_app/immutable/assets/CardGrid.DkTs1kla.css", 228 + "src": "_CardGrid.DkTs1kla.css" 229 + }, 230 + "_CmPt_qt9.js": { 231 + "file": "_app/immutable/chunks/CmPt_qt9.js", 232 + "name": "index-client", 233 + "imports": [ 234 + "_Cy0nnqwK.js" 235 + ] 236 + }, 237 + "_CvUAJ54q.js": { 238 + "file": "_app/immutable/chunks/CvUAJ54q.js", 239 + "name": "CardGrid", 240 + "imports": [ 241 + "_DTjTDYf3.js", 242 + "_Cy0nnqwK.js", 243 + "_VCyrUZ76.js", 244 + "_BxqNGrrm.js", 245 + "_Zp7FgOxX.js", 246 + "_DTiiyNL4.js", 247 + "_wnUvJIYz.js", 248 + "_IrKOPqpB.js", 249 + "_Ni3ygk_w.js" 250 + ], 251 + "css": [ 252 + "_app/immutable/assets/CardGrid.DkTs1kla.css" 253 + ] 254 + }, 255 + "_Cy0nnqwK.js": { 256 + "file": "_app/immutable/chunks/Cy0nnqwK.js", 257 + "name": "runtime" 258 + }, 259 + "_DIcbJqE8.js": { 260 + "file": "_app/immutable/chunks/DIcbJqE8.js", 261 + "name": "this", 262 + "imports": [ 263 + "_Cy0nnqwK.js" 264 + ] 265 + }, 266 + "_DTiiyNL4.js": { 267 + "file": "_app/immutable/chunks/DTiiyNL4.js", 268 + "name": "attributes", 269 + "imports": [ 270 + "_Cy0nnqwK.js", 271 + "_Ni3ygk_w.js" 272 + ] 273 + }, 274 + "_DTjTDYf3.js": { 275 + "file": "_app/immutable/chunks/DTjTDYf3.js", 276 + "name": "disclose-version", 277 + "imports": [ 278 + "_Cy0nnqwK.js" 279 + ] 280 + }, 281 + "_Disko3h9.js": { 282 + "file": "_app/immutable/chunks/Disko3h9.js", 283 + "name": "provideSocket.svelte", 284 + "imports": [ 285 + "_Cy0nnqwK.js" 286 + ] 287 + }, 288 + "_DragWindow.Ct7pKWbu.css": { 289 + "file": "_app/immutable/assets/DragWindow.Ct7pKWbu.css", 290 + "src": "_DragWindow.Ct7pKWbu.css" 291 + }, 292 + "_Du5sam5i.js": { 293 + "file": "_app/immutable/chunks/Du5sam5i.js", 294 + "name": "map", 295 + "imports": [ 296 + "_Cy0nnqwK.js" 297 + ] 298 + }, 299 + "_Dwwks_Q7.js": { 300 + "file": "_app/immutable/chunks/Dwwks_Q7.js", 301 + "name": "legacy", 302 + "imports": [ 303 + "_Cy0nnqwK.js" 304 + ] 305 + }, 306 + "_F8Rf94kU.js": { 307 + "file": "_app/immutable/chunks/F8Rf94kU.js", 308 + "name": "index", 309 + "imports": [ 310 + "_Cy0nnqwK.js" 311 + ] 312 + }, 313 + "_GridLines.Cmy_IU9Y.css": { 314 + "file": "_app/immutable/assets/GridLines.Cmy_IU9Y.css", 315 + "src": "_GridLines.Cmy_IU9Y.css" 316 + }, 317 + "_IrKOPqpB.js": { 318 + "file": "_app/immutable/chunks/IrKOPqpB.js", 319 + "name": "props", 320 + "imports": [ 321 + "_Cy0nnqwK.js", 322 + "_F8Rf94kU.js" 323 + ] 324 + }, 325 + "_Ni3ygk_w.js": { 326 + "file": "_app/immutable/chunks/Ni3ygk_w.js", 327 + "name": "style", 328 + "imports": [ 329 + "_Cy0nnqwK.js" 330 + ] 331 + }, 332 + "_VCyrUZ76.js": { 333 + "file": "_app/immutable/chunks/VCyrUZ76.js", 334 + "name": "snippet", 335 + "imports": [ 336 + "_Cy0nnqwK.js", 337 + "_C3Bw9t1P.js" 338 + ] 339 + }, 340 + "_Zp7FgOxX.js": { 341 + "file": "_app/immutable/chunks/Zp7FgOxX.js", 342 + "name": "render", 343 + "imports": [ 344 + "_Cy0nnqwK.js", 345 + "_wnUvJIYz.js", 346 + "_DTjTDYf3.js" 347 + ] 348 + }, 349 + "_wnUvJIYz.js": { 350 + "file": "_app/immutable/chunks/wnUvJIYz.js", 351 + "name": "events", 352 + "imports": [ 353 + "_Cy0nnqwK.js" 354 + ] 355 + }, 356 + "node_modules/@sveltejs/kit/src/runtime/client/entry.js": { 357 + "file": "_app/immutable/entry/start.B5rkkVvb.js", 358 + "name": "entry/start", 359 + "src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js", 360 + "isEntry": true, 361 + "imports": [ 362 + "_BXN2zbQS.js" 363 + ] 364 + } 365 + }
+1
app/.svelte-kit/output/client/_app/immutable/assets/3.DHpgJXmb.css
··· 1 + main.svelte-1uha8ag{width:100%;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem}h1.svelte-1uha8ag{font-size:2rem}
+1
app/.svelte-kit/output/client/_app/immutable/assets/5.BH-JXrvf.css
··· 1 + main.svelte-urwvt6{position:absolute;inset:0;width:100vw;height:100vh}.void.svelte-urwvt6{background:#000;--grid-lines-color: white}.field-label.svelte-urwvt6{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-weight:600;border:1px solid rgb(0 0 0 / .12)}
+1
app/.svelte-kit/output/client/_app/immutable/assets/6.DYvKU7Oc.css
··· 1 + .layout.svelte-qmtet4{display:grid;grid-template-columns:auto 1fr;min-height:100vh}.controls.svelte-qmtet4,.fields.svelte-qmtet4{display:flex;flex-direction:column;gap:1rem}.controls.svelte-qmtet4{border-right:1px solid rgb(0 0 0 / .12)}.fields.svelte-qmtet4{padding-inline:1rem}.back-button.svelte-qmtet4{display:block;padding:.5rem 1rem}.back-button.svelte-qmtet4:hover{background:#0000001a}.gridarea.svelte-qmtet4{padding:1rem}input.svelte-qmtet4{padding:.25rem;min-width:32ch}
+1
app/.svelte-kit/output/client/_app/immutable/assets/7.DSn3KEp4.css
··· 1 + .card.svelte-isv3d4{width:100%;height:100%;display:flex;background-color:#fff;border:1px solid rgb(0 0 0 / .25);text-align:center;align-items:center;justify-content:center;font-weight:700;font-size:2rem}.flow.svelte-da3do8{stroke-width:2;stroke-linecap:round;opacity:var(--efficacy)}.selectable.svelte-da3do8{cursor:pointer;pointer-events:visiblePainted}.gridspace.svelte-go3dgf{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);display:flex;flex-direction:column;justify-content:space-between;transform:translate(calc(var(--grid-x) * var(--tile-width) - var(--offset-x)),calc(var(--grid-y) * var(--tile-height) - var(--offset-y)))}.pips.svelte-go3dgf{display:flex;flex-direction:column}.piprow.svelte-go3dgf{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-inline:.25rem}.pip.svelte-go3dgf{display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;pointer-events:all;cursor:pointer}.pip.svelte-go3dgf:after{content:"";width:.5rem;height:.5rem;border-radius:100%}.pip.svelte-go3dgf.output:after{--pulse-color: var(--color-output);background-color:var(--color-output);animation:svelte-go3dgf-pulse 1s ease-out infinite}.pip.svelte-go3dgf.input:after{--pulse-color: var(--color-input);background-color:var(--color-input);animation:svelte-go3dgf-pulse 1s infinite ease-out reverse}@keyframes svelte-go3dgf-pulse{0%{box-shadow:0 0 oklch(from var(--pulse-color) l c h / .8)}to{box-shadow:0 0 0 .25rem oklch(from var(--pulse-color) l c h / 0)}}.full.svelte-13qno0{position:absolute;inset:0;pointer-events:none}.terrain.svelte-11xczzg{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);transform:translate(calc(var(--grid-x) * var(--tile-width) - var(--offset-x)),calc(var(--grid-y) * var(--tile-height) - var(--offset-y)));pointer-events:none}.terrain.svelte-11xczzg[data-type=grass]{background-color:#3f9b0b}.terrain.svelte-11xczzg[data-type=soil]{background-color:#573608}dialog.svelte-1ylobv7{pointer-events:auto;position:fixed;left:unset;top:4rem;right:2rem;box-shadow:0 0 2rem #00000040;outline:none;border:none;width:18rem}@property --row-gap{syntax: "<length>"; inherits: false; initial-value: 1rem;}.row.svelte-15gpl1s{width:100%;display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--row-gap, 1rem)}@property --pulse-distance{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --pulse-opacity{syntax: "<number>"; inherits: false; initial-value: 1;}@property --pop-distance{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --pop-opacity{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-eun80g{pointer-events:auto;opacity:1;transform:translate(-50%,-50%) scale(1)}dialog.svelte-eun80g{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.75);border:none;box-shadow:0 0 2rem oklch(from var(--shimmer-color) l c h / .5),0 0 1px var(--pulse-distance) oklch(from var(--shimmer-color) calc(l + .05) calc(c + .05) h / var(--pulse-opacity)),0 0 1px var(--pop-distance) oklch(from var(--shimmer-color) l c h / var(--pop-opacity));opacity:0;animation:1s ease-in-out 0s alternate-reverse infinite svelte-eun80g-shimmer-pulse,2s ease-out 1.2s infinite svelte-eun80g-shimmer-pop;transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-eun80g::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-eun80g::backdrop{background-color:#00000040;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-eun80g{opacity:0;transform:translate(-50%,-50%) scale(.75)}dialog[open].svelte-eun80g::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}@keyframes svelte-eun80g-shimmer-pulse{0%{--pulse-distance: 2rem;--pulse-opacity: .25}to{--pulse-distance: 4rem;--pulse-opacity: .35}}@keyframes svelte-eun80g-shimmer-pop{0%{--pop-distance: 0rem;--pop-opacity: 1}10%{--pop-opacity: 1}50%{--pop-distance: 3rem;--pop-opacity: 0}to{--pop-opacity: 0}}article.svelte-t8l7ck{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem}header.svelte-t8l7ck{text-align:center}.card.svelte-t8l7ck{width:18rem}@property --modal-scale{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-ta60gp{pointer-events:auto;opacity:1;--modal-scale: 1}dialog.svelte-ta60gp{position:absolute;border:none;box-shadow:0 0 2rem #00000040;opacity:0;transform:scale(var(--modal-scale));--modal-scale: .75;transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-ta60gp.fill{inset:4rem;width:auto;height:auto}dialog.svelte-ta60gp.fit{left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--modal-scale))}dialog.svelte-ta60gp::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-ta60gp::backdrop{background-color:#00000040;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-ta60gp{opacity:0;--modal-scale: .75}dialog[open].svelte-ta60gp::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}.content.svelte-rkzgio{padding:2rem;--card-grid-gap: 2rem}header.svelte-rkzgio{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-rkzgio{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}table.svelte-mterps{border-collapse:collapse;border:1px solid rgb(0 0 0 / .12);font-weight:700}th.svelte-mterps:first-child{text-align:left}thead.svelte-mterps{border-bottom:1px solid rgb(0 0 0 / .12)}tfoot.svelte-mterps{border-top:3px double rgb(0 0 0 / .12);font-size:1.25rem}td.svelte-mterps{text-align:right;font-variant-numeric:tabular-nums}th.svelte-mterps,td.svelte-mterps{padding:.5rem .75rem}.svelte-mterps:where(th:where(.svelte-mterps),td:where(.svelte-mterps)):not(:first-child){border-left:1px solid rgb(0 0 0 / .12)}tr.svelte-mterps:nth-child(2n){background-color:#0000000d}.produced.svelte-mterps{color:oklch(from rgb(23 183 34) .65 c h)}.consumed.svelte-mterps{color:oklch(from rgb(213 61 28) .65 c h)}.content.svelte-1dvzbw0{padding:2rem;--card-grid-gap: 2rem}header.svelte-1dvzbw0{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-1dvzbw0{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}.card-back.svelte-legrwj{width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020}.category.svelte-legrwj{text-transform:capitalize}@property --shimmer-offset{syntax: "<percentage>"; inherits: false; initial-value: 0%;}@property --shimmer-color{syntax: "<color>"; inherits: false; initial-value: rgb(0 0 0);}.shimmer.svelte-y2bo7g{background-image:linear-gradient(to right,var(--shimmer-color) calc(0% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(50% - var(--shimmer-offset)),var(--shimmer-color) calc(100% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(150% - var(--shimmer-offset)),var(--shimmer-color) calc(200% - var(--shimmer-offset)));background-repeat:repeat-x;animation:svelte-y2bo7g-shimmer 8s ease-in-out alternate infinite}@keyframes svelte-y2bo7g-shimmer{0%{--shimmer-offset: 0%}to{--shimmer-offset: 100%}}.pack.svelte-1h5lzcn{position:relative;width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020;display:flex;flex-direction:column;justify-content:space-between;gap:1rem;transition:transform .2s,box-shadow .2s,opacity .1s;cursor:pointer}.pack.svelte-1h5lzcn:hover,.pack.svelte-1h5lzcn:focus-visible{transform:scale(1.05);box-shadow:0 0 2rem #5bc8e380;outline:1px solid rgb(91 200 227)}.price-tag.svelte-1h5lzcn{position:absolute;top:1rem;right:1rem;display:flex;transform-origin:center}.replacement.svelte-1h5lzcn{top:2rem;right:1rem;transform:translate(0) rotate(-10deg)}.price-label.svelte-1h5lzcn{font-size:1.2rem;font-weight:600}s.svelte-1h5lzcn{text-decoration-color:#e61942;text-decoration-thickness:.2rem}.banner.svelte-1h5lzcn,.info.svelte-1h5lzcn{padding:.5rem;border:1px solid rgb(0 0 0 / .12);background-color:#0000000d}@property --tooltip-scale{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-1h5lzcn{display:flex;opacity:1;--tooltip-scale: 1}dialog.svelte-1h5lzcn{position:absolute;pointer-events:none;left:50%;top:50%;border:none;box-shadow:0 0 1rem #00000080;opacity:0;transform:translate(-50%,-50%) scale(var(--tooltip-scale));--tooltip-scale: .75;padding:1rem;transition:opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}@starting-style{dialog[open].svelte-1h5lzcn{opacity:0;--tooltip-scale: .97}}.tooltip.svelte-1h5lzcn{flex-direction:column;gap:1rem;width:max-content;max-width:100%}header.svelte-1h5lzcn{text-align:center;font-size:2rem}.card.svelte-1h5lzcn{width:18rem}.content.svelte-1w43591{padding:2rem;--card-grid-gap: 2rem}header.svelte-1w43591{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-1w43591{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}.area.svelte-og50z2{pointer-events:none;position:relative;width:100%;height:100%;display:grid;grid-template:"status status" auto ". ." 1fr ". menu" auto / 1fr auto}.menu.svelte-og50z2{grid-area:menu;padding:2rem;display:flex;flex-direction:column;gap:1rem}.status.svelte-og50z2{pointer-events:auto;grid-area:status;padding:.4rem;display:flex;flex-direction:row;gap:1rem;justify-content:space-between;background-color:#fffc;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem);border-bottom:1px solid rgb(0 0 0 / .12);font-size:.8rem}.title-area.svelte-og50z2{display:flex;flex-direction:row;gap:1rem}.resource-area.svelte-og50z2{display:flex;flex-direction:row;gap:.5rem}.title.svelte-og50z2{font-weight:600}button.svelte-og50z2,a.button.svelte-og50z2{display:flex;justify-content:center;align-items:center;border-radius:100%;width:4rem;height:4rem;background-color:#000000b3;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);color:#fff;pointer-events:auto;cursor:pointer;border:1px solid rgb(0 0 0 / .12);box-shadow:0 0 .25rem #00000040;font-size:1rem}dialog[open].svelte-1chcjmg{display:flex;opacity:1;transform:translate(-50%,-50%) scale(1)}dialog.svelte-1chcjmg{padding:1.5rem;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%) scale(.75);max-width:60ch;flex-direction:column;gap:1rem;border:none;border-radius:.5rem;box-shadow:0 0 4rem #00000040;opacity:0;transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-1chcjmg::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-1chcjmg::backdrop{background-color:#00000040;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-1chcjmg{opacity:0;transform:translate(-50%,-50%) scale(.75)}dialog[open].svelte-1chcjmg::backdrop{background-color:#0000;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}article.svelte-1chcjmg{display:flex;flex-direction:column;gap:.5rem}.controls.svelte-1chcjmg{display:flex;gap:1rem;justify-content:flex-end}.info.svelte-1195hbs{font-style:italic;font-weight:600;color:#0006;font-size:.9rem}main.svelte-hy9bcf,div.svelte-hy9bcf{position:absolute;inset:0;width:100vw;height:100vh}.hud.svelte-hy9bcf{pointer-events:none}html{overscroll-behavior:none}
+1
app/.svelte-kit/output/client/_app/immutable/assets/CardGrid.DkTs1kla.css
··· 1 + @property --shimmer-offset{syntax: "<percentage>"; inherits: false; initial-value: 0%;}@property --shimmer-color{syntax: "<color>"; inherits: false; initial-value: rgb(0 0 0);}.shimmer.svelte-j4afnf{font-weight:600;color:transparent;background-image:linear-gradient(to right,var(--shimmer-color) calc(0% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(50% - var(--shimmer-offset)),var(--shimmer-color) calc(100% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(150% - var(--shimmer-offset)),var(--shimmer-color) calc(200% - var(--shimmer-offset)));background-repeat:repeat-x;-webkit-background-clip:text;background-clip:text;animation:svelte-j4afnf-shimmer 8s ease-in-out alternate infinite}@keyframes svelte-j4afnf-shimmer{0%{--shimmer-offset: 0%}to{--shimmer-offset: 100%}}.card.svelte-1udyrqm{width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020;padding:.5rem;display:flex;flex-direction:column;gap:.5rem;transition:transform .2s,box-shadow .2s,opacity .1s}.card.svelte-1udyrqm.selectable{cursor:pointer}.card.svelte-1udyrqm.selectable:hover,.card.svelte-1udyrqm.selectable:focus-visible{transform:scale(1.05);box-shadow:0 0 2rem #5bc8e380;outline:1px solid rgb(91 200 227)}.card.svelte-1udyrqm.disabled{opacity:50%}.card.svelte-1udyrqm.disabled:hover{opacity:100%}.title.svelte-1udyrqm{padding:.25rem;border:1px solid rgb(0 0 0 / .12);white-space:nowrap}.image.svelte-1udyrqm{aspect-ratio:1 / 1;width:100%;background-color:#0000001a}.info.svelte-1udyrqm{border:1px solid rgb(0 0 0 / .12);flex-grow:1;padding:.25rem}@property --grid-gap{syntax: "<length>"; inherits: false; initial-value: 1rem;}.grid.svelte-1hhz0mg{width:100%;display:grid;grid-auto-flow:row;grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));grid-auto-rows:auto;align-content:start;gap:var(--grid-gap, 1rem)}
+1
app/.svelte-kit/output/client/_app/immutable/assets/DragWindow.Ct7pKWbu.css
··· 1 + @property --offset-x{syntax: "<length>"; inherits: true; initial-value: 0;}@property --offset-y{syntax: "<length>"; inherits: true; initial-value: 0;}@property --tile-width{syntax: "<length>"; inherits: true; initial-value: 128px;}@property --tile-height{syntax: "<length>"; inherits: true; initial-value: 128px;}.window.svelte-1j4berq{width:100%;height:100%;position:relative;overflow:hidden;-webkit-user-select:none;user-select:none;isolation:isolate}
+1
app/.svelte-kit/output/client/_app/immutable/assets/GridLines.Cmy_IU9Y.css
··· 1 + .griditem.svelte-1docm9i{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);transform:translate(calc(var(--loose-x) + var(--grid-x) * var(--tile-width) - var(--offset-x) + var(--drag-x, 0px)),calc(var(--loose-y) + var(--grid-y) * var(--tile-height) - var(--offset-y) + var(--drag-y, 0px))) rotate(var(--loose-rotation))}.tile.svelte-1docm9i{background-color:#fff;transition:--grid-x .1s,--grid-y .1s,--loose-rotation .15s,--loose-x .1s,--loose-y .1s}.tile.svelte-1docm9i:not(.dragging){transition:--grid-x .1s,--grid-y .1s,--drag-x .1s,--drag-y .1s,--loose-rotation .15s,--loose-x .1s,--loose-y .1s}.tile.clickable.svelte-1docm9i{cursor:pointer}.tile.draggable.svelte-1docm9i{cursor:grab}.tile.draggable.svelte-1docm9i:hover{box-shadow:0 0 1rem #00000040;border:1px solid rgb(91 200 227);z-index:1}.tile.draggable.svelte-1docm9i.dragging{cursor:grabbing}.shadow.svelte-1docm9i{background-color:#00000026}.loose.svelte-1docm9i{box-shadow:0 0 2rem #00000040}@property --grid-lines-color{syntax: "<color>"; inherits: true; initial-value: black;}.gridlines.svelte-2yd5bj{pointer-events:none;position:absolute;top:calc(0px - var(--tile-height));left:calc(0px - var(--tile-width));width:calc(100% + var(--tile-width));height:calc(100% + var(--tile-height));image-rendering:crisp-edges;background-position:mod(0px - var(--offset-x),var(--tile-width)) mod(0px - var(--offset-y),var(--tile-height));background-repeat:repeat;background-size:var(--tile-width) var(--tile-height);background-image:linear-gradient(rgb(from var(--grid-lines-color) r g b / 12%),rgb(from var(--grid-lines-color) r g b / 12%) 1px,transparent 1px,transparent),linear-gradient(to right,rgb(from var(--grid-lines-color) r g b / 12%),rgb(from var(--grid-lines-color) r g b / 12%) 1px,transparent 1px,transparent)}
+9
app/.svelte-kit/output/client/_app/immutable/chunks/B5ZTdtgC.js
··· 1 + import{f as W,a as E}from"./DTjTDYf3.js";import{M as I,aY as N,G as q,aZ as P,v as R,_ as w,p as Z,ah as Y,f as B,g as r,ag as U,X as J,Y as K,Z as Q,ad as L,s as A,a as V,c}from"./Cy0nnqwK.js";import{d as $,e as X}from"./wnUvJIYz.js";import{s as tt}from"./VCyrUZ76.js";import{i as et}from"./BxqNGrrm.js";import{s as rt,a as at}from"./DTiiyNL4.js";import{s as O}from"./Ni3ygk_w.js";import{p as it}from"./IrKOPqpB.js";const ot=()=>performance.now(),h={tick:e=>requestAnimationFrame(e),now:()=>ot(),tasks:new Set};function z(){const e=h.now();h.tasks.forEach(t=>{t.c(e)||(h.tasks.delete(t),t.f())}),h.tasks.size!==0&&h.tick(z)}function nt(e){let t;return h.tasks.size===0&&h.tick(z),{promise:new Promise(a=>{h.tasks.add(t={c:e,f:a})}),abort(){h.tasks.delete(t)}}}function j(e,t){q(()=>{e.dispatchEvent(new CustomEvent(t))})}function st(e){if(e==="float")return"cssFloat";if(e==="offset")return"cssOffset";if(e.startsWith("--"))return e;const t=e.split("-");return t.length===1?t[0]:t[0]+t.slice(1).map(a=>a[0].toUpperCase()+a.slice(1)).join("")}function ct(e){const t={},a=e.split(";");for(const i of a){const[s,o]=i.split(":");if(!s||o===void 0)break;const u=st(s.trim());t[u]=o.trim()}return t}const ut=e=>e;function ft(e,t,a,i){var s=(e&N)!==0,o="out",u,v=t.inert;t.style.overflow;var p,l;function y(){return q(()=>u??=a()(t,i?.()??{},{direction:o}))}var b={is_global:s,in(){t.inert=v;{l?.abort(),l?.reset?.();return}},out(f){t.inert=!0,j(t,"outrostart"),l=F(t,y(),p,0,()=>{j(t,"outroend"),f?.()})},stop:()=>{l?.abort()}},_=I;(_.nodes.t??=[]).push(b)}function F(e,t,a,i,s){if(P(t)){var o,u=!1;return R(()=>{if(!u){var k=t({direction:"out"});o=F(e,k,a,i,s)}}),{abort:()=>{u=!0,o?.abort()},deactivate:()=>o.deactivate(),reset:()=>o.reset(),t:()=>o.t()}}if(!t?.duration)return s(),{abort:w,deactivate:w,reset:w,t:()=>i};const{delay:v=0,css:p,tick:l,easing:y=ut}=t;var b=[],_=()=>1-i,f=e.animate(b,{duration:v,fill:"forwards"});return f.onfinish=()=>{f.cancel();var k=1-i,x=i-k,m=t.duration*Math.abs(x),M=[];if(m>0){var C=!1;if(p)for(var D=Math.ceil(m/16.666666666666668),d=0;d<=D;d+=1){var T=k+x*y(d/D),G=ct(p(T,1-T));M.push(G),C||=G.overflow==="hidden"}C&&(e.style.overflow="hidden"),_=()=>{var n=f.currentTime;return k+x*y(n/m)},l&&nt(()=>{if(f.playState!=="running")return!1;var n=_();return l(n,1-n),!0})}f=e.animate(M,{duration:m,fill:"forwards"}),f.onfinish=()=>{_=()=>i,l?.(i,1-i),s()}},{abort:()=>{f&&(f.cancel(),f.effect=null,f.onfinish=w)},deactivate:()=>{s=w},reset:()=>{l?.(1,0)},t:()=>_()}}const dt=e=>e;function lt(e,{delay:t=0,duration:a=400,easing:i=dt}={}){const s=+getComputedStyle(e).opacity;return{delay:t,duration:a,easing:i,css:o=>`opacity: ${o*s}`}}var vt=W('<div class="griditem shadow svelte-1docm9i"></div>'),mt=W('<!> <div role="presentation"><!></div>',1);function Mt(e,t){Z(t,!0);const a=it(t,"loose",3,!1);let i=A(!1),s=A(null),o=A(0),u=A(0),v=A(!1);const p=Math.sign(Math.random()-.5)*(Math.round(Math.random()*10)+5);function l(n){c(v,!0),t.onMove&&c(i,!0)}function y(n){n.button===0&&r(i)&&(c(i,!1),t.onMove?.(r(o),r(u)),c(o,0),c(u,0))}function b(n){r(i)&&(c(v,!1),c(o,r(o)+n.movementX),c(u,r(u)+n.movementY))}function _(n){r(s)===null&&n.changedTouches.length===1&&(c(v,!1),t.onMove&&c(s,n.changedTouches[0],!0)),n.stopPropagation()}function f(n){r(s)&&!Array.from(n.touches).some(g=>g.identifier===r(s).identifier)&&(c(s,null),t.onMove?.(r(o),r(u)),c(o,0),c(u,0))}function k(n){if(r(s)===null)return;c(v,!1);const g=r(s),S=Array.from(n.touches).find(H=>H.identifier===g.identifier);S&&(c(o,r(o)+(S.clientX-g.clientX)),c(u,r(u)+(S.clientY-g.clientY)),c(s,S,!0))}function x(){r(v)&&t.onClick&&t.onClick()}const m=U(()=>r(i)||r(s));var M=mt();X("mouseup",Y,y),X("mousemove",Y,b),X("touchmove",Y,k,void 0,!0),X("touchend",Y,f),X("touchcancel",Y,f);var C=B(M);{var D=n=>{var g=vt();L(()=>O(g,`--grid-x: ${t.x??""}; --grid-y: ${t.y??""};`)),ft(2,g,()=>lt,()=>({duration:50})),E(n,g)};et(C,n=>{r(m)&&!a()&&n(D)})}var d=J(C,2);let T;d.__click=x,d.__mousedown=l,d.__touchstart=_;var G=K(d);tt(G,()=>t.children??w),Q(d),L(()=>{T=rt(d,1,"griditem tile svelte-1docm9i",null,T,{loose:a(),dragging:r(m),clickable:!!t.onClick,draggable:!!t.onMove}),at(d,"aria-grabbed",!!r(m)),O(d,` 2 + --loose-x: ${(a()?t.x:0)??""}px; 3 + --loose-y: ${(a()?t.y:0)??""}px; 4 + --grid-x: ${(a()?0:t.x)??""}; 5 + --grid-y: ${(a()?0:t.y)??""}; 6 + --drag-x: ${r(o)??""}px; 7 + --drag-y: ${r(u)??""}px; 8 + --loose-rotation: ${a()&&!r(m)?p:0}deg; 9 + `)}),E(e,M),V()}$(["click","mousedown","touchstart"]);var gt=W('<div class="gridlines svelte-2yd5bj"></div>');function Ct(e,t){var a=gt();let i;L(()=>i=O(a,"",i,{"--tile-width":t.tileWidth!==void 0?`${t.tileWidth}px`:void 0,"--tile-height":t.tileHeight!==void 0?`${t.tileHeight}px`:void 0})),E(e,a)}export{Mt as D,Ct as G};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/BXN2zbQS.js
··· 1 + import{s as A,g as T,c as I,aX as Z,b0 as De,b1 as gt}from"./Cy0nnqwK.js";import{w as ke}from"./F8Rf94kU.js";import{o as qe}from"./CmPt_qt9.js";class Ee{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Se{constructor(t,n){this.status=t,this.location=n}}class Re extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function _t(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function mt(e){return e.split("%25").map(decodeURI).join("%25")}function wt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function he({href:e}){return e.split("#")[0]}function vt(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;new TextDecoder;function yt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n}const bt=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||"GET")!=="GET"&&F.delete(xe(e)),bt(e,t));const F=new Map;function kt(e,t){const n=xe(e,t),a=document.querySelector(n);if(a?.textContent){a.remove();let{body:r,...s}=JSON.parse(a.textContent);const o=a.getAttribute("data-ttl");return o&&F.set(n,{body:r,init:s,ttl:1e3*Number(o)}),a.getAttribute("data-b64")!==null&&(r=yt(r)),Promise.resolve(new Response(r,s))}return window.fetch(e,t)}function Et(e,t,n){if(F.size>0){const a=xe(e,n),r=F.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n?.cache))return new Response(r.body,r.init);F.delete(a)}}return window.fetch(t,n)}function xe(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${vt(...r)}"]`}return a}const St=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Rt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Lt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(s)return t.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const o=a.split(/\[(.+?)\](?!\])/);return"/"+o.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return pe(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return pe(String.fromCharCode(...c.slice(2).split("-").map(m=>parseInt(m,16))));const f=St.exec(c),[,h,w,u,g]=f;return t.push({name:u,matcher:g,optional:!!h,rest:!!w,chained:w?l===1&&o[0]==="":!1}),w?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return pe(c)}).join("")}).join("")}/?$`),params:t}}function xt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Lt(e){return e.slice(1).split("/").filter(xt)}function Ut(e,t,n){const a={},r=e.slice(1),s=r.filter(i=>i!==void 0);let o=0;for(let i=0;i<t.length;i+=1){const c=t[i];let l=r[i-o];if(c.chained&&c.rest&&o&&(l=r.slice(i-o,i+1).filter(f=>f).join("/"),o=0),l===void 0){c.rest&&(a[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){a[c.name]=l;const f=t[i+1],h=r[i+1];f&&!f.rest&&f.optional&&h&&c.chained&&(o=0),!f&&!h&&Object.keys(a).length===s.length&&(o=0);continue}if(c.optional&&c.chained){o++;continue}return}if(!o)return a}function pe(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function At({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([i,[c,l,f]])=>{const{pattern:h,params:w}=Rt(i),u={id:i,exec:g=>{const m=h.exec(g);if(m)return Ut(m,w,a)},errors:[1,...f||[]].map(g=>e[g]),layouts:[0,...l||[]].map(o),leaf:s(c)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function s(i){const c=i<0;return c&&(i=~i),[c,e[i]]}function o(i){return i===void 0?i:[r.has(i),e[i]]}}function Ye(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Ve(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}const L=globalThis.__sveltekit_xcp44a?.base??"",Tt=globalThis.__sveltekit_xcp44a?.assets??L??"",It="1767206368199",ze="sveltekit:snapshot",He="sveltekit:scroll",Je="sveltekit:states",Ot="sveltekit:pageurl",B="sveltekit:history",W="sveltekit:navigation",j={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},ce=location.origin;function Le(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function le(){return{x:pageXOffset,y:pageYOffset}}function V(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Be={...j,"":j.hover};function Xe(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Qe(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=Xe(e)}}function me(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const i=location.hash.split("#")[1]||"/";a.hash=`#${i}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,s=!a||!!r||ue(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=a?.origin===ce&&e.hasAttribute("download");return{url:a,external:s,target:r,download:o}}function ee(e){let t=null,n=null,a=null,r=null,s=null,o=null,i=e;for(;i&&i!==document.documentElement;)a===null&&(a=V(i,"preload-code")),r===null&&(r=V(i,"preload-data")),t===null&&(t=V(i,"keepfocus")),n===null&&(n=V(i,"noscroll")),s===null&&(s=V(i,"reload")),o===null&&(o=V(i,"replacestate")),i=Xe(i);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Be[a??"off"],preload_data:Be[r??"off"],keepfocus:c(t),noscroll:c(n),reload:c(s),replace_state:c(o)}}function Ke(e){const t=ke(e);let n=!0;function a(){n=!0,t.update(o=>o)}function r(o){n=!1,t.set(o)}function s(o){let i;return t.subscribe(c=>{(i===void 0||n&&c!==i)&&o(i=c)})}return{notify:a,set:r,subscribe:s}}const Ze={v:()=>{}};function Pt(){const{set:e,subscribe:t}=ke(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${Tt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const o=(await r.json()).version!==It;return o&&(e(!0),Ze.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:a}}function ue(e,t,n){return e.origin!==ce||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function sn(e){}const et=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...et];const $t=new Set([...et]);[...$t];function Ct(e){return e.filter(t=>t!=null)}function Ue(e){return e instanceof Ee||e instanceof Re?e.status:500}function jt(e){return e instanceof Re?e.text:"Internal Error"}let k,Y,ge;const Nt=qe.toString().includes("$$")||/function \w+\(\) \{\}/.test(qe.toString());Nt?(k={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},Y={current:null},ge={current:!1}):(k=new class{#e=A({});get data(){return T(this.#e)}set data(t){I(this.#e,t)}#t=A(null);get form(){return T(this.#t)}set form(t){I(this.#t,t)}#n=A(null);get error(){return T(this.#n)}set error(t){I(this.#n,t)}#a=A({});get params(){return T(this.#a)}set params(t){I(this.#a,t)}#r=A({id:null});get route(){return T(this.#r)}set route(t){I(this.#r,t)}#o=A({});get state(){return T(this.#o)}set state(t){I(this.#o,t)}#s=A(-1);get status(){return T(this.#s)}set status(t){I(this.#s,t)}#i=A(new URL("https://example.com"));get url(){return T(this.#i)}set url(t){I(this.#i,t)}},Y=new class{#e=A(null);get current(){return T(this.#e)}set current(t){I(this.#e,t)}},ge=new class{#e=A(!1);get current(){return T(this.#e)}set current(t){I(this.#e,t)}},Ze.v=()=>ge.current=!0);function tt(e){Object.assign(k,e)}const Dt=new Set(["icon","shortcut icon","apple-touch-icon"]),D=Ye(He)??{},z=Ye(ze)??{},C={url:Ke({}),page:Ke({}),navigating:ke(null),updated:Pt()};function Ae(e){D[e]=le()}function qt(e,t){let n=e+1;for(;D[n];)delete D[n],n+=1;for(n=t+1;z[n];)delete z[n],n+=1}function H(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function nt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(L||"/");e&&await e.update()}}function Me(){}let Te,we,te,O,ve,v;const ne=[],ae=[];let R=null;function ye(){R?.fork?.then(e=>e?.discard()),R=null}const Q=new Map,at=new Set,Vt=new Set,G=new Set;let _={branch:[],error:null,url:null},rt=!1,re=!1,Fe=!0,J=!1,M=!1,ot=!1,Ie=!1,Oe,y,x,N;const oe=new Set,Ge=new Map;async function fn(e,t,n){globalThis.__sveltekit_xcp44a?.data&&globalThis.__sveltekit_xcp44a.data,document.URL!==location.href&&(location.href=location.href),v=e,await e.hooks.init?.(),Te=At(e),O=document.documentElement,ve=t,we=e.nodes[0],te=e.nodes[1],we(),te(),y=history.state?.[B],x=history.state?.[W],y||(y=x=Date.now(),history.replaceState({...history.state,[B]:y,[W]:x},""));const a=D[y];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Zt(ve,n)):(await K({type:"enter",url:Le(v.hash?nn(new URL(location.href)):location.href),replace_state:!0}),r()),Qt()}function Bt(){ne.length=0,Ie=!1}function st(e){ae.some(t=>t?.snapshot)&&(z[e]=ae.map(t=>t?.snapshot?.capture()))}function it(e){z[e]?.forEach((t,n)=>{ae[n]?.snapshot?.restore(t)})}function We(){Ae(y),Ve(He,D),st(x),Ve(ze,z)}async function ct(e,t,n,a){let r;t.invalidateAll&&ye(),await K({type:"goto",url:Le(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{t.invalidateAll&&(Ie=!0,r=[...Ge.keys()]),t.invalidate&&t.invalidate.forEach(Xt)}}),t.invalidateAll&&Z().then(Z).then(()=>{Ge.forEach(({resource:s},o)=>{r?.includes(o)&&s.refresh?.()})})}async function Kt(e){if(e.id!==R?.id){ye();const t={};if(oe.add(t),R={id:e.id,token:t,promise:ut({...e,preload:t}).then(n=>(oe.delete(t),n.type==="loaded"&&n.state.error&&ye(),n)),fork:null},De){const n=R;n.fork=n.promise.then(a=>{if(n===R&&a.type==="loaded")try{return De(()=>{Oe.$set(a.props),tt(a.props.page)})}catch{}return null})}}return R.promise}async function _e(e){const t=(await fe(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].map(n=>n?.[1]()))}async function lt(e,t,n){_=e.state;const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(k,e.props.page),Oe=new v.root({target:t,props:{...e.props,stores:C,components:ae},hydrate:n,sync:!1}),await Promise.resolve(),it(x),n){const r={from:null,to:{params:_.params,route:{id:_.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};G.forEach(s=>s(r))}re=!0}function se({url:e,params:t,branch:n,status:a,error:r,route:s,form:o}){let i="never";if(L&&(e.pathname===L||e.pathname===L+"/"))i="always";else for(const u of n)u?.slash!==void 0&&(i=u.slash);e.pathname=_t(e.pathname,i),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:r,route:s},props:{constructors:Ct(n).map(u=>u.node.component),page:Ne(k)}};o!==void 0&&(c.props.form=o);let l={},f=!k,h=0;for(let u=0;u<Math.max(n.length,_.branch.length);u+=1){const g=n[u],m=_.branch[u];g?.data!==m?.data&&(f=!0),g&&(l={...l,...g.data},f&&(c.props[`data_${h}`]=l),h+=1)}return(!_.url||e.href!==_.url.href||_.error!==r||o!==void 0&&o!==k.form||f)&&(c.props.page={error:r,params:t,route:{id:s?.id??null},state:{},status:a,url:new URL(e),form:o??null,data:f?l:k.data}),c}async function Pe({loader:e,parent:t,url:n,params:a,route:r,server_data_node:s}){let o=null;const i={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},c=await e();return{node:c,loader:e,server:s,universal:c.universal?.load?{type:"data",data:o,uses:i}:null,data:o??s?.data??null,slash:c.universal?.trailingSlash??s?.slash}}function Mt(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const s=re?Et(a,r.href,t):kt(a,t);return{resolved:r,promise:s}}function Ft(e,t,n,a,r,s){if(Ie)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const o of r.search_params)if(a.has(o))return!0;for(const o of r.params)if(s[o]!==_.params[o])return!0;for(const o of r.dependencies)if(ne.some(i=>i(new URL(o))))return!0;return!1}function $e(e,t){return e?.type==="data"?e:e?.type==="skip"?t??null:null}function Gt(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),s=t.searchParams.getAll(a);r.every(o=>s.includes(o))&&s.every(o=>r.includes(o))&&n.delete(a)}return n}function Wt({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:Ne(k),constructors:[]}}}async function ut({id:e,invalidating:t,url:n,params:a,route:r,preload:s}){if(R?.id===e)return oe.delete(R.token),R.promise;const{errors:o,layouts:i,leaf:c}=r,l=[...i,c];o.forEach(p=>p?.().catch(()=>{})),l.forEach(p=>p?.[1]().catch(()=>{}));const f=_.url?e!==ie(_.url):!1,h=_.route?r.id!==_.route.id:!1,w=Gt(_.url,n);let u=!1;const g=l.map(async(p,d)=>{if(!p)return;const E=_.branch[d];return p[1]===E?.loader&&!Ft(u,h,f,w,E.universal?.uses,a)?E:(u=!0,Pe({loader:p[1],url:n,params:a,route:r,parent:async()=>{const P={};for(let U=0;U<d;U+=1)Object.assign(P,(await g[U])?.data);return P},server_data_node:$e(p[0]?{type:"skip"}:null,p[0]?E?.server:void 0)}))});for(const p of g)p.catch(()=>{});const m=[];for(let p=0;p<l.length;p+=1)if(l[p])try{m.push(await g[p])}catch(d){if(d instanceof Se)return{type:"redirect",location:d.location};if(oe.has(s))return Wt({error:await X(d,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let E=Ue(d),S;if(d instanceof Ee)S=d.body;else{if(await C.updated.check())return await nt(),await H(n);S=await X(d,{params:a,url:n,route:{id:r.id}})}const P=await Yt(p,m,o);return P?se({url:n,params:a,branch:m.slice(0,P.idx).concat(P.node),status:E,error:S,route:r}):await dt(n,{id:r.id},S,E)}else m.push(void 0);return se({url:n,params:a,branch:m,status:200,error:null,route:r,form:t?void 0:null})}async function Yt(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Ce({status:e,error:t,url:n,route:a}){const r={};let s=null;try{const o=await Pe({loader:we,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:$e(s)}),i={node:await te(),loader:te,universal:null,server:null,data:null};return se({url:n,params:r,branch:[o,i],status:e,error:t,route:null})}catch(o){if(o instanceof Se)return ct(new URL(o.location,location.href),{},0);throw o}}async function zt(e){const t=e.href;if(Q.has(t))return Q.get(t);let n;try{const a=(async()=>{let r=await v.hooks.reroute({url:new URL(e),fetch:async(s,o)=>Mt(s,o,e).promise})??e;if(typeof r=="string"){const s=new URL(e);v.hash?s.hash=r:s.pathname=r,r=s}return r})();Q.set(t,a),n=await a}catch{Q.delete(t);return}return n}async function fe(e,t){if(e&&!ue(e,L,v.hash)){const n=await zt(e);if(!n)return;const a=Ht(n);for(const r of Te){const s=r.exec(a);if(s)return{id:ie(e),invalidating:t,route:r,params:wt(s),url:e}}}}function Ht(e){return mt(v.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(L.length))||"/"}function ie(e){return(v.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function ft({url:e,type:t,intent:n,delta:a,event:r}){let s=!1;const o=je(_,n,e,t);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const i={...o.navigation,cancel:()=>{s=!0,o.reject(new Error("navigation cancelled"))}};return J||at.forEach(c=>c(i)),s?null:o}async function K({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:s,state:o={},redirect_count:i=0,nav_token:c={},accept:l=Me,block:f=Me,event:h}){const w=N;N=c;const u=await fe(t,!1),g=e==="enter"?je(_,u,t,e):ft({url:t,type:e,delta:n?.delta,intent:u,event:h});if(!g){f(),N===c&&(N=w);return}const m=y,p=x;l(),J=!0,re&&g.navigation.type!=="enter"&&C.navigating.set(Y.current=g.navigation);let d=u&&await ut(u);if(!d){if(ue(t,L,v.hash))return await H(t,s);d=await dt(t,{id:null},await X(new Re(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,s)}if(t=u?.url||t,N!==c)return g.reject(new Error("navigation aborted")),!1;if(d.type==="redirect"){if(i<20){await K({type:e,url:new URL(d.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:s,state:o,redirect_count:i+1,nav_token:c}),g.fulfil(void 0);return}d=await Ce({status:500,error:await X(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else d.props.page.status>=400&&await C.updated.check()&&(await nt(),await H(t,s));if(Bt(),Ae(m),st(p),d.props.page.url.pathname!==t.pathname&&(t.pathname=d.props.page.url.pathname),o=n?n.state:o,!n){const b=s?0:1,q={[B]:y+=b,[W]:x+=b,[Je]:o};(s?history.replaceState:history.pushState).call(history,q,"",t),s||qt(y,x)}const E=u&&R?.id===u.id?R.fork:null;R=null,d.props.page.state=o;let S;if(re){const b=(await Promise.all(Array.from(Vt,$=>$(g.navigation)))).filter($=>typeof $=="function");if(b.length>0){let $=function(){b.forEach(de=>{G.delete(de)})};b.push($),b.forEach(de=>{G.add(de)})}_=d.state,d.props.page&&(d.props.page.url=t);const q=E&&await E;q?S=q.commit():(Oe.$set(d.props),tt(d.props.page),S=gt?.()),ot=!0}else await lt(d,ve,!1);const{activeElement:P}=document;await S,await Z(),await Z();let U=n?n.scroll:r?le():null;if(Fe){const b=t.hash&&document.getElementById(ht(t));if(U)scrollTo(U.x,U.y);else if(b){b.scrollIntoView();const{top:q,left:$}=b.getBoundingClientRect();U={x:pageXOffset+$,y:pageYOffset+q}}else scrollTo(0,0)}const pt=document.activeElement!==P&&document.activeElement!==document.body;!a&&!pt&&tn(t,U),Fe=!0,d.props.page&&Object.assign(k,d.props.page),J=!1,e==="popstate"&&it(x),g.fulfil(void 0),G.forEach(b=>b(g.navigation)),C.navigating.set(Y.current=null)}async function dt(e,t,n,a,r){return e.origin===ce&&e.pathname===location.pathname&&!rt?await Ce({status:a,error:n,url:e,route:t}):await H(e,r)}function Jt(){let e,t,n;O.addEventListener("mousemove",i=>{const c=i.target;clearTimeout(e),e=setTimeout(()=>{s(c,j.hover)},20)});function a(i){i.defaultPrevented||s(i.composedPath()[0],j.tap)}O.addEventListener("mousedown",a),O.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(i=>{for(const c of i)c.isIntersecting&&(_e(new URL(c.target.href)),r.unobserve(c.target))},{threshold:0});async function s(i,c){const l=Qe(i,O),f=l===t&&c>=n;if(!l||f)return;const{url:h,external:w,download:u}=me(l,L,v.hash);if(w||u)return;const g=ee(l),m=h&&ie(_.url)===ie(h);if(!(g.reload||m))if(c<=g.preload_data){t=l,n=j.tap;const p=await fe(h,!1);if(!p)return;Kt(p)}else c<=g.preload_code&&(t=l,n=c,_e(h))}function o(){r.disconnect();for(const i of O.querySelectorAll("a")){const{url:c,external:l,download:f}=me(i,L,v.hash);if(l||f)continue;const h=ee(i);h.reload||(h.preload_code===j.viewport&&r.observe(i),h.preload_code===j.eager&&_e(c))}}G.add(o),o()}function X(e,t){if(e instanceof Ee)return e.body;const n=Ue(e),a=jt(e);return v.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function dn(e,t={}){return e=new URL(Le(e)),e.origin!==ce?Promise.reject(new Error("goto: invalid URL")):ct(e,t,0)}function Xt(e){if(typeof e=="function")ne.push(e);else{const{href:t}=new URL(e,location.href);ne.push(n=>n.href===t)}}function Qt(){history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let n=!1;if(We(),!J){const a=je(_,void 0,null,"leave"),r={...a.navigation,cancel:()=>{n=!0,a.reject(new Error("navigation cancelled"))}};at.forEach(s=>s(r))}n?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&We()}),navigator.connection?.saveData||Jt(),O.addEventListener("click",async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const n=Qe(t.composedPath()[0],O);if(!n)return;const{url:a,external:r,target:s,download:o}=me(n,L,v.hash);if(!a)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const i=ee(n);if(!(n instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||o)return;const[l,f]=(v.hash?a.hash.replace(/^#/,""):a.href).split("#"),h=l===he(location);if(r||i.reload&&(!h||!f)){ft({url:a,type:"link",event:t})?J=!0:t.preventDefault();return}if(f!==void 0&&h){const[,w]=_.url.href.split("#");if(w===f){if(t.preventDefault(),f===""||f==="top"&&n.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const u=n.ownerDocument.getElementById(decodeURIComponent(f));u&&(u.scrollIntoView(),u.focus())}return}if(M=!0,Ae(y),e(a),!i.replace_state)return;M=!1}t.preventDefault(),await new Promise(w=>{requestAnimationFrame(()=>{setTimeout(w,0)}),setTimeout(w,100)}),await K({type:"link",url:a,keepfocus:i.keepfocus,noscroll:i.noscroll,replace_state:i.replace_state??a.href===location.href,event:t})}),O.addEventListener("submit",t=>{if(t.defaultPrevented)return;const n=HTMLFormElement.prototype.cloneNode.call(t.target),a=t.submitter;if((a?.formTarget||n.target)==="_blank"||(a?.formMethod||n.method)!=="get")return;const o=new URL(a?.hasAttribute("formaction")&&a?.formAction||n.action);if(ue(o,L,!1))return;const i=t.target,c=ee(i);if(c.reload)return;t.preventDefault(),t.stopPropagation();const l=new FormData(i,a);o.search=new URLSearchParams(l).toString(),K({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:t})}),addEventListener("popstate",async t=>{if(!be){if(t.state?.[B]){const n=t.state[B];if(N={},n===y)return;const a=D[n],r=t.state[Je]??{},s=new URL(t.state[Ot]??location.href),o=t.state[W],i=_.url?he(location)===he(_.url):!1;if(o===x&&(ot||i)){r!==k.state&&(k.state=r),e(s),D[y]=le(),a&&scrollTo(a.x,a.y),y=n;return}const l=n-y;await K({type:"popstate",url:s,popped:{state:r,scroll:a,delta:l},accept:()=>{y=n,x=o},block:()=>{history.go(-l)},nav_token:N,event:t})}else if(!M){const n=new URL(location.href);e(n),v.hash&&location.reload()}}}),addEventListener("hashchange",()=>{M&&(M=!1,history.replaceState({...history.state,[B]:++y,[W]:x},"",location.href))});for(const t of document.querySelectorAll("link"))Dt.has(t.rel)&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&C.navigating.set(Y.current=null)});function e(t){_.url=k.url=t,C.page.set(Ne(k)),C.page.notify()}}async function Zt(e,{status:t=200,error:n,node_ids:a,params:r,route:s,server_route:o,data:i,form:c}){rt=!0;const l=new URL(location.href);let f;({params:r={},route:s={id:null}}=await fe(l,!1)||{}),f=Te.find(({id:u})=>u===s.id);let h,w=!0;try{const u=a.map(async(m,p)=>{const d=i[p];return d?.uses&&(d.uses=en(d.uses)),Pe({loader:v.nodes[m],url:l,params:r,route:s,parent:async()=>{const E={};for(let S=0;S<p;S+=1)Object.assign(E,(await u[S]).data);return E},server_data_node:$e(d)})}),g=await Promise.all(u);if(f){const m=f.layouts;for(let p=0;p<m.length;p++)m[p]||g.splice(p,0,void 0)}h=se({url:l,params:r,branch:g,status:t,error:n,form:c,route:f??null})}catch(u){if(u instanceof Se){await H(new URL(u.location,location.href));return}h=await Ce({status:Ue(u),error:await X(u,{url:l,params:r,route:s}),url:l,route:s}),e.textContent="",w=!1}h.props.page&&(h.props.page.state={}),await lt(h,e,w)}function en(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}let be=!1;function tn(e,t=null){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=ht(e);if(a&&document.getElementById(a)){const{x:s,y:o}=t??le();setTimeout(()=>{const i=history.state;be=!0,location.replace(`#${a}`),v.hash&&location.replace(e.hash),history.replaceState(i,"",e.hash),scrollTo(s,o),be=!1})}else{const s=document.body,o=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),o!==null?s.setAttribute("tabindex",o):s.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const s=[];for(let o=0;o<r.rangeCount;o+=1)s.push(r.getRangeAt(o));setTimeout(()=>{if(r.rangeCount===s.length){for(let o=0;o<r.rangeCount;o+=1){const i=s[o],c=r.getRangeAt(o);if(i.commonAncestorContainer!==c.commonAncestorContainer||i.startContainer!==c.startContainer||i.endContainer!==c.endContainer||i.startOffset!==c.startOffset||i.endOffset!==c.endOffset)return}r.removeAllRanges()}})}}}function je(e,t,n,a){let r,s;const o=new Promise((c,l)=>{r=c,s=l});return o.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n},willUnload:!t,type:a,complete:o},fulfil:r,reject:s}}function Ne(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function nn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function ht(e){let t;if(v.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{fn as a,dn as g,sn as l,k as p,C as s};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/BfVwtNtA.js
··· 1 + import{e as d,k as g,d as i,j as m,r as l,m as b,g as p,n as k,o as v}from"./Cy0nnqwK.js";function x(n=!1){const s=d,e=s.l.u;if(!e)return;let f=()=>k(s.s);if(n){let o=0,t={};const _=v(()=>{let c=!1;const a=s.s;for(const r in a)a[r]!==t[r]&&(t[r]=a[r],c=!0);return c&&o++,o});f=()=>p(_)}e.b.length&&g(()=>{u(s,f),l(e.b)}),i(()=>{const o=m(()=>e.m.map(b));return()=>{for(const t of o)typeof t=="function"&&t()}}),e.a.length&&i(()=>{u(s,f),l(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}export{x as i};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/BxqNGrrm.js
··· 1 + import{x as _,y as o,z as c,E as d,A as y,H as E,B as T,C as b,D as f}from"./Cy0nnqwK.js";import{B as p}from"./C3Bw9t1P.js";function m(t,i,u=!1){_&&o();var e=new p(t),h=u?d:0;function n(a,r){if(_){const l=y(t)===E;if(a===l){var s=T();b(s),e.anchor=s,f(!1),e.ensure(a,r),f(!0);return}}e.ensure(a,r)}c(()=>{var a=!1;i((r,s=!0)=>{a=!0,n(s,r)}),a||n(!1,null)},h)}export{m as i};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/C3Bw9t1P.js
··· 1 + import{N as n,O as p,P as o,Q as u,R as d,T as l,x as m,U as _,V as v,W as b}from"./Cy0nnqwK.js";class w{anchor;#t=new Map;#s=new Map;#e=new Map;#i=new Set;#a=!0;constructor(e,s=!0){this.anchor=e,this.#a=s}#f=()=>{var e=n;if(this.#t.has(e)){var s=this.#t.get(e),t=this.#s.get(s);if(t)p(t),this.#i.delete(s);else{var a=this.#e.get(s);a&&(this.#s.set(s,a.effect),this.#e.delete(s),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),t=a.effect)}for(const[i,f]of this.#t){if(this.#t.delete(i),i===e)break;const h=this.#e.get(f);h&&(o(h.effect),this.#e.delete(f))}for(const[i,f]of this.#s){if(i===s||this.#i.has(i))continue;const h=()=>{if(Array.from(this.#t.values()).includes(i)){var c=document.createDocumentFragment();v(f,c),c.append(d()),this.#e.set(i,{effect:f,fragment:c})}else o(f);this.#i.delete(i),this.#s.delete(i)};this.#a||!t?(this.#i.add(i),u(f,h,!1)):h()}}};#h=e=>{this.#t.delete(e);const s=Array.from(this.#t.values());for(const[t,a]of this.#e)s.includes(t)||(o(a.effect),this.#e.delete(t))};ensure(e,s){var t=n,a=b();if(s&&!this.#s.has(e)&&!this.#e.has(e))if(a){var i=document.createDocumentFragment(),f=d();i.append(f),this.#e.set(e,{effect:l(()=>s(f)),fragment:i})}else this.#s.set(e,l(()=>s(this.anchor)));if(this.#t.set(t,e),a){for(const[h,r]of this.#s)h===e?t.skipped_effects.delete(r):t.skipped_effects.add(r);for(const[h,r]of this.#e)h===e?t.skipped_effects.delete(r.effect):t.skipped_effects.add(r.effect);t.oncommit(this.#f),t.ondiscard(this.#h)}else m&&(this.anchor=_),this.#f()}}export{w as B};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/CFNKoBvp.js
··· 1 + import{f as A,a as M}from"./DTjTDYf3.js";import{q as O,j as T,p as R,ad as S,a as Z,c as l,g as a,s as w,ah as d,Y as y,_ as B,Z as C}from"./Cy0nnqwK.js";import{d as E,e as m}from"./wnUvJIYz.js";import{s as F}from"./VCyrUZ76.js";import{s as G}from"./Ni3ygk_w.js";import{p as u}from"./IrKOPqpB.js";class b{#e=new WeakMap;#t;#o;static entries=new WeakMap;constructor(e){this.#o=e}observe(e,o){var s=this.#e.get(e)||new Set;return s.add(o),this.#e.set(e,s),this.#i().observe(e,this.#o),()=>{var n=this.#e.get(e);n.delete(o),n.size===0&&(this.#e.delete(e),this.#t.unobserve(e))}}#i(){return this.#t??(this.#t=new ResizeObserver(e=>{for(var o of e){b.entries.set(o.target,o);for(var s of this.#e.get(o.target)||[])s(o)}}))}}var I=new b({box:"border-box"});function _(f,e,o){var s=I.observe(f,()=>o(f[e]));O(()=>(T(()=>o(f[e])),s))}var J=A('<div class="window svelte-1j4berq" role="presentation"><!></div>');function V(f,e){R(e,!0);let o=u(e,"tileWidth",3,128),s=u(e,"tileHeight",3,128),n=u(e,"offsetX",15,0),c=u(e,"offsetY",15,0),x=u(e,"clientWidth",15,0),W=u(e,"clientHeight",15,0),g=w(!1);function Y(t){t.preventDefault()}function D(t){t.buttons===2&&l(g,!0)}function H(t){t.button===2&&l(g,!1)}function X(t){a(g)&&(n(n()-t.movementX),c(c()-t.movementY))}let r=w(null);function z(t){a(r)===null&&t.changedTouches.length===1&&l(r,t.changedTouches[0],!0)}function p(t){a(r)&&!Array.from(t.touches).some(h=>h.identifier===a(r).identifier)&&l(r,null)}function k(t){if(a(r)===null)return;const h=a(r),v=Array.from(t.touches).find(q=>q.identifier===h.identifier);v&&(n(n()-(v.clientX-h.clientX)),c(c()-(v.clientY-h.clientY)),l(r,v,!0))}var i=J();m("mousemove",d,X),m("mouseup",d,H),m("touchmove",d,k,void 0,!0),m("touchend",d,p),m("touchcancel",d,p),i.__mousedown=D,i.__touchstart=z,i.__contextmenu=Y;var j=y(i);F(j,()=>e.children??B),C(i),S(()=>G(i,`--offset-x: ${n()??""}px; --offset-y: ${c()??""}px; --tile-width: ${o()??""}px; --tile-height: ${s()??""}px;`)),_(i,"clientWidth",x),_(i,"clientHeight",W),M(f,i),Z()}E(["mousedown","touchstart","contextmenu"]);export{V as D,_ as b};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/CmPt_qt9.js
··· 1 + import{l as o,d as l,e as t,h as a,j as c}from"./Cy0nnqwK.js";function f(e){t===null&&o(),a&&t.l!==null?u(t).m.push(e):l(()=>{const n=c(e);if(typeof n=="function")return n})}function u(e){var n=e.l;return n.u??={a:[],b:[],m:[]}}export{f as o};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/CvUAJ54q.js
··· 1 + import{f as i,a as o,t as O,c as W}from"./DTjTDYf3.js";import{Y as p,_ as $,Z as v,ad as _,p as H,aF as Q,g as n,ag as z,a as M,X as y,f}from"./Cy0nnqwK.js";import{s as U}from"./VCyrUZ76.js";import{i as T}from"./BxqNGrrm.js";import{s as q}from"./Zp7FgOxX.js";import{s as oe,a as ne,e as F,i as j}from"./DTiiyNL4.js";import{d as se}from"./wnUvJIYz.js";import{p as ee}from"./IrKOPqpB.js";import{s as ie}from"./Ni3ygk_w.js";const ze={"trading-centre":{type:"trading-centre",name:"Trading Centre",category:"trade"},"trading-post":{type:"trading-post",name:"Trading Post",category:"trade"},"cat-neighbourhood":{type:"cat-neighbourhood",name:"Cat Neighbourhood",category:"residential",population:[{quantity:6,species:"cat"}]},"rabbit-neighbourhood":{type:"rabbit-neighbourhood",name:"Rabbit Neighbourhood",category:"residential",population:[{quantity:6,species:"rabbit"}]},"water-well":{type:"water-well",name:"Water Well",category:"source",employees:1,source:[{type:"any"}],outputs:[{resource:"water",quantity:10}]},"wheat-farm":{type:"wheat-farm",name:"Wheat Farm",category:"source",employees:4,source:[{type:"terrain",terrain:"soil"}],outputs:[{resource:"wheat",quantity:4}]},"lettuce-farm":{type:"lettuce-farm",name:"Lettuce Farm",category:"source",employees:4,source:[{type:"terrain",terrain:"soil"}],outputs:[{resource:"lettuce",quantity:4}]},"tomato-farm":{type:"tomato-farm",name:"Tomato Farm",category:"source",employees:4,source:[{type:"terrain",terrain:"soil"}],outputs:[{resource:"tomato",quantity:4}]},"flour-mill":{type:"flour-mill",name:"Flour Mill",category:"production",employees:2,inputs:[{resource:"wheat",quantity:1}],outputs:[{resource:"flour",quantity:5}]},bakery:{type:"bakery",name:"Bakery",category:"production",employees:2,inputs:[{resource:"water",quantity:1},{resource:"flour",quantity:4}],outputs:[{resource:"bread",quantity:5}]},"salad-shop":{type:"salad-shop",name:"Salad Shop",category:"production",employees:2,inputs:[{resource:"tomato",quantity:1},{resource:"lettuce",quantity:2}],outputs:[{resource:"salad",quantity:3}]}};function ue(a){return e=>e&&a(e)}function ce(a){return e=>{e.key==="enter"&&a(e)}}function De(a){return e=>{e.buttons===1&&a(e)}}function Ee(...a){return e=>()=>e(...a)}function He(a){return e=>{e.preventDefault(),e.stopPropagation(),e.currentTarget.dispatchEvent(a(e))}}const le={water:{type:"water",name:"Water",value:0},wheat:{type:"wheat",name:"Wheat",value:1},lettuce:{type:"lettuce",name:"Lettuce",value:1},tomato:{type:"tomato",name:"Tomato",value:1},flour:{type:"flour",name:"Flour",value:2},bread:{type:"bread",name:"Bread",value:3},salad:{type:"salad",name:"Salad",value:3}};var de=i('<span class="shimmer svelte-j4afnf"><!></span>');function V(a,e){var r=de(),t=p(r);U(t,()=>e.children??$),v(r),_(()=>ie(r,e.style)),o(a,r)}function K(a,e){H(e,!0);const r=z(()=>le[e.id]);V(a,{style:"--shimmer-color: var(--color-resource)",children:(t,u)=>{Q();var s=O();_(()=>q(s,n(r).name)),o(t,s)}}),M()}const me={cat:{type:"cat",name:"Cat",namePlural:"Cats",needs:[{type:"resource",resource:"bread",quantity:1}]},rabbit:{type:"rabbit",name:"Rabbit",namePlural:"Rabbits",needs:[{type:"resource",resource:"salad",quantity:1}]}};function ve(a,e){H(e,!0);const r=ee(e,"plural",3,!1),t=z(()=>me[e.id]);V(a,{style:"--shimmer-color: var(--color-species)",children:(u,s)=>{Q();var c=O();_(()=>q(c,r()?n(t).namePlural:n(t).name)),o(u,c)}}),M()}const ye={soil:{type:"soil",name:"Soil"},grass:{type:"grass",name:"Grass"}};function pe(a,e){H(e,!0);const r=z(()=>ye[e.id]);V(a,{style:"--shimmer-color: var(--color-terrain)",children:(t,u)=>{Q();var s=O();_(()=>q(s,n(r).name)),o(t,s)}}),M()}var fe=i("<p> <!></p>"),_e=i("<p> <!></p>"),ge=i("<p> <!></p>"),he=i("<!> <!>",1),be=i("<p>Produces anywhere</p>"),qe=i("<p>Produces on <!></p>"),we=i("<!> <!>",1),xe=i("<p> <!></p>"),Pe=i("<!> <!>",1),Se=i('<div role="button"><div class="title svelte-1udyrqm"> </div> <div class="image svelte-1udyrqm"></div> <div class="info svelte-1udyrqm"><!></div></div>');function ke(a,e){H(e,!0);const r=ee(e,"disabled",3,!1);var t=Se();let u;t.__click=function(...l){(r()?void 0:e.onSelect)?.apply(this,l)};var s=z(()=>r()?void 0:ue(ce)(e.onSelect));t.__keydown=function(...l){n(s)?.apply(this,l)};var c=p(t),X=p(c);v(c);var D=y(c,4),g=p(D);{var E=l=>{var G=W(),A=f(G);F(A,17,()=>e.card.population,j,(I,B)=>{var d=fe(),h=p(d),k=y(h);{let L=z(()=>n(B).quantity!==1);ve(k,{get id(){return n(B).species},get plural(){return n(L)}})}v(d),_(()=>q(h,`Houses ${n(B).quantity??""} `)),o(I,d)}),o(l,G)},Z=l=>{var G=W(),A=f(G);{var I=d=>{var h=he(),k=f(h);F(k,17,()=>e.card.inputs,j,(w,b)=>{var m=_e(),x=p(m),P=y(x);K(P,{get id(){return n(b).resource}}),v(m),_(()=>q(x,`Consumes ${n(b).quantity??""} `)),o(w,m)});var L=y(k,2);F(L,17,()=>e.card.outputs,j,(w,b)=>{var m=ge(),x=p(m),P=y(x);K(P,{get id(){return n(b).resource}}),v(m),_(()=>q(x,`Produces ${n(b).quantity??""} `)),o(w,m)}),o(d,h)},B=d=>{var h=W(),k=f(h);{var L=w=>{var b=Pe(),m=f(b);F(m,17,()=>e.card.source,j,(P,C)=>{var R=we(),N=f(R);{var J=S=>{var Y=be();o(S,Y)};T(N,S=>{n(C).type==="any"&&S(J)})}var ae=y(N,2);{var te=S=>{var Y=qe(),re=y(p(Y));pe(re,{get id(){return n(C).terrain}}),v(Y),o(S,Y)};T(ae,S=>{n(C).type==="terrain"&&S(te)})}o(P,R)});var x=y(m,2);F(x,17,()=>e.card.outputs,j,(P,C)=>{var R=xe(),N=p(R),J=y(N);K(J,{get id(){return n(C).resource}}),v(R),_(()=>q(N,`Yields ${n(C).quantity??""} `)),o(P,R)}),o(w,b)};T(k,w=>{e.card.category==="source"&&w(L)},!0)}o(d,h)};T(A,d=>{e.card.category==="production"?d(I):d(B,!1)},!0)}o(l,G)};T(g,l=>{e.card.category==="residential"?l(E):l(Z,!1)})}v(D),v(t),_(()=>{u=oe(t,1,"card svelte-1udyrqm",null,u,{selectable:!r()&&e.onSelect,disabled:r()}),ne(t,"tabindex",!r()&&e.onSelect?0:void 0),q(X,`${e.card.name??""} | ${e.card.category??""}`)}),o(a,t),M()}se(["click","keydown"]);var Ce=i('<div class="grid svelte-1hhz0mg"></div>');function Re(a,e){var r=Ce();F(r,20,()=>e.items,t=>t,(t,u)=>{var s=W(),c=f(s);U(c,()=>e.item,()=>u),o(t,s)}),v(r),o(a,r)}function Me(a,e){Re(a,{get items(){return e.cards},item:(t,u=$)=>{var s=W(),c=f(s);{var X=g=>{var E=W(),Z=f(E);U(Z,()=>e.card,u),o(g,E)},D=g=>{ke(g,{get card(){return u()}})};T(c,g=>{e.card?g(X):g(D,!1)})}o(t,s)}})}export{Me as C,Re as G,K as R,V as S,pe as T,He as a,ke as b,ze as c,Ee as d,ce as e,ve as f,De as l,le as r,me as s};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/Cy0nnqwK.js
··· 1 + var Mt=Array.isArray,Lt=Array.prototype.indexOf,Rn=Array.from,kn=Object.defineProperty,oe=Object.getOwnPropertyDescriptor,jt=Object.getOwnPropertyDescriptors,qt=Object.prototype,Yt=Array.prototype,nt=Object.getPrototypeOf,We=Object.isExtensible;function On(e){return typeof e=="function"}const Nn=()=>{};function Dn(e){return e()}function Ht(e){for(var t=0;t<e.length;t++)e[t]()}function rt(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}function In(e,t){if(Array.isArray(e))return e;if(!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const y=2,qe=4,xe=8,Ut=1<<24,j=16,q=32,K=64,Ye=128,N=512,g=1024,A=2048,P=4096,C=8192,H=16384,He=32768,pe=65536,De=1<<17,st=1<<18,fe=1<<19,ft=1<<20,Cn=1<<25,Q=32768,Ie=1<<21,Ue=1<<22,U=1<<23,ue=Symbol("$state"),Pn=Symbol("legacy props"),Fn=Symbol(""),ne=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Be=3,it=8;function Bt(e){throw new Error("https://svelte.dev/e/experimental_async_required")}function Vt(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Gt(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Kt(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function zt(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function $t(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Xt(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Zt(){throw new Error("https://svelte.dev/e/fork_discarded")}function Wt(){throw new Error("https://svelte.dev/e/fork_timing")}function Ln(){throw new Error("https://svelte.dev/e/hydration_failed")}function jn(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Jt(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Qt(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function en(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function qn(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Yn=1,Hn=2,Un=4,Bn=8,Vn=16,Gn=1,Kn=2,zn=4,$n=8,Xn=16,Zn=4,Wn=1,Jn=2,tn="[",nn="[!",rn="]",Ve={},m=Symbol(),Qn="http://www.w3.org/1999/xhtml";function Ge(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function er(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let ee=!1;function tr(e){ee=e}let S;function re(e){if(e===null)throw Ge(),Ve;return S=e}function nr(){return re(z(S))}function rr(e){if(ee){if(z(S)!==null)throw Ge(),Ve;S=e}}function sr(e=1){if(ee){for(var t=e,n=S;t--;)n=z(n);S=n}}function fr(e=!0){for(var t=0,n=S;;){if(n.nodeType===it){var r=n.data;if(r===rn){if(t===0)return n;t-=1}else(r===tn||r===nn)&&(t+=1)}var s=z(n);e&&n.remove(),n=s}}function ir(e){if(!e||e.nodeType!==it)throw Ge(),Ve;return e.data}function at(e){return e===this.v}function sn(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function lt(e){return!sn(e,this.v)}let Se=!1;function ar(){Se=!0}let w=null;function we(e){w=e}function lr(e){return ot().get(e)}function or(e,t){return ot().set(e,t),t}function ur(e,t=!1,n){w={p:w,i:!1,c:null,e:null,s:e,x:null,l:Se&&!t?{s:null,u:null,$:[]}:null}}function cr(e){var t=w,n=t.e;if(n!==null){t.e=null;for(var r of n)Tt(r)}return e!==void 0&&(t.x=e),t.i=!0,w=t.p,e??{}}function de(){return!Se||w!==null&&w.l===null}function ot(e){return w===null&&Vt(),w.c??=new Map(fn(w)||void 0)}function fn(e){let t=e.p;for(;t!==null;){const n=t.c;if(n!==null)return n;t=t.p}return null}let X=[];function ut(){var e=X;X=[],Ht(e)}function an(e){if(X.length===0&&!ce){var t=X;queueMicrotask(()=>{t===X&&ut()})}X.push(e)}function ln(){for(;X.length>0;)ut()}function on(e){var t=h;if(t===null)return _.f|=U,e;if((t.f&He)===0){if((t.f&Ye)===0)throw e;t.b.error(e)}else ye(e,t)}function ye(e,t){for(;t!==null;){if((t.f&Ye)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e}const Z=new Set;let p=null,T=null,k=[],Re=null,Ce=!1,ce=!1;class L{committed=!1;current=new Map;previous=new Map;#r=new Set;#s=new Set;#e=0;#t=0;#a=null;#f=new Set;#i=new Set;skipped_effects=new Set;is_fork=!1;is_deferred(){return this.is_fork||this.#t>0}process(t){k=[],this.apply();var n={parent:null,effect:null,effects:[],render_effects:[]};for(const r of t)this.#l(r,n);this.is_fork||this.#u(),this.is_deferred()?(this.#n(n.effects),this.#n(n.render_effects)):(p=null,Je(n.render_effects),Je(n.effects),this.#a?.resolve()),T=null}#l(t,n){t.f^=g;for(var r=t.first;r!==null;){var s=r.f,f=(s&(q|K))!==0,o=f&&(s&g)!==0,l=o||(s&C)!==0||this.skipped_effects.has(r);if((r.f&Ye)!==0&&r.b?.is_pending()&&(n={parent:n,effect:r,effects:[],render_effects:[]}),!l&&r.fn!==null){f?r.f^=g:(s&qe)!==0?n.effects.push(r):he(r)&&((r.f&j)!==0&&this.#f.add(r),ve(r));var i=r.first;if(i!==null){r=i;continue}}var a=r.parent;for(r=r.next;r===null&&a!==null;)a===n.effect&&(this.#n(n.effects),this.#n(n.render_effects),n=n.parent),r=a.next,a=a.parent}}#n(t){for(const n of t)(n.f&A)!==0?this.#f.add(n):(n.f&P)!==0&&this.#i.add(n),this.#o(n.deps),E(n,g)}#o(t){if(t!==null)for(const n of t)(n.f&y)===0||(n.f&Q)===0||(n.f^=Q,this.#o(n.deps))}capture(t,n){this.previous.has(t)||this.previous.set(t,n),(t.f&U)===0&&(this.current.set(t,t.v),T?.set(t,t.v))}activate(){p=this,this.apply()}deactivate(){p===this&&(p=null,T=null)}flush(){if(this.activate(),k.length>0){if(Fe(),p!==null&&p!==this)return}else this.#e===0&&this.process([]);this.deactivate()}discard(){for(const t of this.#s)t(this);this.#s.clear()}#u(){if(this.#t===0){for(const t of this.#r)t();this.#r.clear()}this.#e===0&&this.#c()}#c(){if(Z.size>1){this.previous.clear();var t=T,n=!0,r={parent:null,effect:null,effects:[],render_effects:[]};for(const f of Z){if(f===this){n=!1;continue}const o=[];for(const[i,a]of this.current){if(f.current.has(i))if(n&&a!==f.current.get(i))f.current.set(i,a);else continue;o.push(i)}if(o.length===0)continue;const l=[...f.current.keys()].filter(i=>!this.current.has(i));if(l.length>0){var s=k;k=[];const i=new Set,a=new Map;for(const u of o)ct(u,l,i,a);if(k.length>0){p=f,f.apply();for(const u of k)f.#l(u,r);f.deactivate()}k=s}}p=null,T=t}this.committed=!0,Z.delete(this)}increment(t){this.#e+=1,t&&(this.#t+=1)}decrement(t){this.#e-=1,t&&(this.#t-=1),this.revive()}revive(){for(const t of this.#f)this.#i.delete(t),E(t,A),te(t);for(const t of this.#i)E(t,P),te(t);this.flush()}oncommit(t){this.#r.add(t)}ondiscard(t){this.#s.add(t)}settled(){return(this.#a??=rt()).promise}static ensure(){if(p===null){const t=p=new L;Z.add(p),ce||L.enqueue(()=>{p===t&&t.flush()})}return p}static enqueue(t){an(t)}apply(){}}function Pe(e){var t=ce;ce=!0;try{var n;for(e&&(p!==null&&Fe(),n=e());;){if(ln(),k.length===0&&(p?.flush(),k.length===0))return Re=null,n;Fe()}}finally{ce=t}}function Fe(){var e=W;Ce=!0;var t=null;try{var n=0;for(Te(!0);k.length>0;){var r=L.ensure();if(n++>1e3){var s,f;un()}r.process(k),B.clear()}}finally{Ce=!1,Te(e),Re=null}}function un(){try{Xt()}catch(e){ye(e,Re)}}let F=null;function Je(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(H|C))===0&&he(r)&&(F=new Set,ve(r),r.deps===null&&r.first===null&&r.nodes===null&&(r.teardown===null&&r.ac===null?St(r):r.fn=null),F?.size>0)){B.clear();for(const s of F){if((s.f&(H|C))!==0)continue;const f=[s];let o=s.parent;for(;o!==null;)F.has(o)&&(F.delete(o),f.push(o)),o=o.parent;for(let l=f.length-1;l>=0;l--){const i=f[l];(i.f&(H|C))===0&&ve(i)}}F.clear()}}F=null}}function ct(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const f=s.f;(f&y)!==0?ct(s,t,n,r):(f&(Ue|j))!==0&&(f&A)===0&&vt(s,t,r)&&(E(s,A),te(s))}}function _t(e,t){if(e.reactions!==null)for(const n of e.reactions){const r=n.f;(r&y)!==0?_t(n,t):(r&De)!==0&&(E(n,A),t.add(n))}}function vt(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(t.includes(s))return!0;if((s.f&y)!==0&&vt(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function te(e){for(var t=Re=e;t.parent!==null;){t=t.parent;var n=t.f;if(Ce&&t===h&&(n&j)!==0&&(n&st)===0)return;if((n&(K|q))!==0){if((n&g)===0)return;t.f^=g}}k.push(t)}function _r(e){Bt(),p!==null&&Wt();var t=L.ensure();t.is_fork=!0,T=new Map;var n=!1,r=t.settled();Pe(e),T=null;for(var[s,f]of t.previous)s.v=f;return{commit:async()=>{if(n){await r;return}Z.has(t)||Zt(),n=!0,t.is_fork=!1;for(var[o,l]of t.current)o.v=l;Pe(()=>{var i=new Set;for(var a of t.current.keys())_t(a,i);pn(i),wt()}),t.revive(),await r},discard:()=>{!n&&Z.has(t)&&(Z.delete(t),t.discard())}}}function cn(e,t,n,r){const s=de()?Ke:dn;if(n.length===0&&e.length===0){r(t.map(s));return}var f=p,o=h,l=_n();function i(){Promise.all(n.map(a=>vn(a))).then(a=>{l();try{r([...t.map(s),...a])}catch(u){(o.f&H)===0&&ye(u,o)}f?.deactivate(),Ee()}).catch(a=>{ye(a,o)})}e.length>0?Promise.all(e).then(()=>{l();try{return i()}finally{f?.deactivate(),Ee()}}):i()}function _n(){var e=h,t=_,n=w,r=p;return function(f=!0){se(e),G(t),we(n),f&&r?.activate()}}function Ee(){se(null),G(null),we(null)}function Ke(e){var t=y|A,n=_!==null&&(_.f&y)!==0?_:null;return h!==null&&(h.f|=fe),{ctx:w,deps:null,effects:null,equals:at,f:t,fn:e,reactions:null,rv:0,v:m,wv:0,parent:n??h,ac:null}}function vn(e,t){let n=h;n===null&&Gt();var r=n.b,s=void 0,f=$e(m),o=!_,l=new Map;return mn(()=>{var i=rt();s=i.promise;try{Promise.resolve(e()).then(i.resolve,i.reject).then(()=>{a===p&&a.committed&&a.deactivate(),Ee()})}catch(c){i.reject(c),Ee()}var a=p;if(o){var u=!r.is_pending();r.update_pending_count(1),a.increment(u),l.get(a)?.reject(ne),l.delete(a),l.set(a,i)}const v=(c,d=void 0)=>{if(a.activate(),d)d!==ne&&(f.f|=U,Me(f,d));else{(f.f&U)!==0&&(f.f^=U),Me(f,c);for(const[O,ke]of l){if(l.delete(O),O===a)break;ke.reject(ne)}}o&&(r.update_pending_count(-1),a.decrement(u))};i.promise.then(v,c=>v(null,c||"unknown"))}),En(()=>{for(const i of l.values())i.reject(ne)}),new Promise(i=>{function a(u){function v(){u===s?i(f):a(s)}u.then(v,v)}a(s)})}function vr(e){const t=Ke(e);return Ot(t),t}function dn(e){const t=Ke(e);return t.equals=lt,t}function dt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)V(t[n])}}function hn(e){for(var t=e.parent;t!==null;){if((t.f&y)===0)return(t.f&H)===0?t:null;t=t.parent}return null}function ze(e){var t,n=h;se(hn(e));try{e.f&=~Q,dt(e),t=Ct(e)}finally{se(n)}return t}function ht(e){var t=ze(e);if(e.equals(t)||(p?.is_fork||(e.v=t),e.wv=Dt()),!ie)if(T!==null)(be()||p?.is_fork)&&T.set(e,t);else{var n=(e.f&N)===0?P:g;E(e,n)}}let me=new Set;const B=new Map;function pn(e){me=e}let pt=!1;function $e(e,t){var n={f:0,v:e,reactions:null,equals:at,rv:0,wv:0};return n}function Y(e,t){const n=$e(e);return Ot(n),n}function dr(e,t=!1,n=!0){const r=$e(e);return t||(r.equals=lt),Se&&n&&w!==null&&w.l!==null&&(w.l.s??=[]).push(r),r}function $(e,t,n=!1){_!==null&&(!I||(_.f&De)!==0)&&de()&&(_.f&(y|j|Ue|De))!==0&&!M?.includes(e)&&en();let r=n?ae(t):t;return Me(e,r)}function Me(e,t){if(!e.equals(t)){var n=e.v;ie?B.set(e,t):B.set(e,n),e.v=t;var r=L.ensure();r.capture(e,n),(e.f&y)!==0&&((e.f&A)!==0&&ze(e),E(e,(e.f&N)!==0?g:P)),e.wv=Dt(),yt(e,A),de()&&h!==null&&(h.f&g)!==0&&(h.f&(q|K))===0&&(R===null?An([e]):R.push(e)),!r.is_fork&&me.size>0&&!pt&&wt()}return t}function wt(){pt=!1;var e=W;Te(!0);const t=Array.from(me);try{for(const n of t)(n.f&g)!==0&&E(n,P),he(n)&&ve(n)}finally{Te(e)}me.clear()}function Ne(e){$(e,e.v+1)}function yt(e,t){var n=e.reactions;if(n!==null)for(var r=de(),s=n.length,f=0;f<s;f++){var o=n[f],l=o.f;if(!(!r&&o===h)){var i=(l&A)===0;if(i&&E(o,t),(l&y)!==0){var a=o;T?.delete(a),(l&Q)===0&&(l&N&&(o.f|=Q),yt(a,P))}else i&&((l&j)!==0&&F!==null&&F.add(o),te(o))}}}function ae(e){if(typeof e!="object"||e===null||ue in e)return e;const t=nt(e);if(t!==qt&&t!==Yt)return e;var n=new Map,r=Mt(e),s=Y(0),f=J,o=l=>{if(J===f)return l();var i=_,a=J;G(null),tt(f);var u=l();return G(i),tt(a),u};return r&&n.set("length",Y(e.length)),new Proxy(e,{defineProperty(l,i,a){(!("value"in a)||a.configurable===!1||a.enumerable===!1||a.writable===!1)&&Jt();var u=n.get(i);return u===void 0?u=o(()=>{var v=Y(a.value);return n.set(i,v),v}):$(u,a.value,!0),!0},deleteProperty(l,i){var a=n.get(i);if(a===void 0){if(i in l){const u=o(()=>Y(m));n.set(i,u),Ne(s)}}else $(a,m),Ne(s);return!0},get(l,i,a){if(i===ue)return e;var u=n.get(i),v=i in l;if(u===void 0&&(!v||oe(l,i)?.writable)&&(u=o(()=>{var d=ae(v?l[i]:m),O=Y(d);return O}),n.set(i,u)),u!==void 0){var c=le(u);return c===m?void 0:c}return Reflect.get(l,i,a)},getOwnPropertyDescriptor(l,i){var a=Reflect.getOwnPropertyDescriptor(l,i);if(a&&"value"in a){var u=n.get(i);u&&(a.value=le(u))}else if(a===void 0){var v=n.get(i),c=v?.v;if(v!==void 0&&c!==m)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return a},has(l,i){if(i===ue)return!0;var a=n.get(i),u=a!==void 0&&a.v!==m||Reflect.has(l,i);if(a!==void 0||h!==null&&(!u||oe(l,i)?.writable)){a===void 0&&(a=o(()=>{var c=u?ae(l[i]):m,d=Y(c);return d}),n.set(i,a));var v=le(a);if(v===m)return!1}return u},set(l,i,a,u){var v=n.get(i),c=i in l;if(r&&i==="length")for(var d=a;d<v.v;d+=1){var O=n.get(d+"");O!==void 0?$(O,m):d in l&&(O=o(()=>Y(m)),n.set(d+"",O))}if(v===void 0)(!c||oe(l,i)?.writable)&&(v=o(()=>Y(void 0)),$(v,ae(a)),n.set(i,v));else{c=v.v!==m;var ke=o(()=>ae(a));$(v,ke)}var Xe=Reflect.getOwnPropertyDescriptor(l,i);if(Xe?.set&&Xe.set.call(u,a),!c){if(r&&typeof i=="string"){var Ze=n.get("length"),Oe=Number(i);Number.isInteger(Oe)&&Oe>=Ze.v&&$(Ze,Oe+1)}Ne(s)}return!0},ownKeys(l){le(s);var i=Reflect.ownKeys(l).filter(v=>{var c=n.get(v);return c===void 0||c.v!==m});for(var[a,u]of n)u.v!==m&&!(a in l)&&i.push(a);return i},setPrototypeOf(){Qt()}})}var Qe,wn,Et,mt;function hr(){if(Qe===void 0){Qe=window,wn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Et=oe(t,"firstChild").get,mt=oe(t,"nextSibling").get,We(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),We(n)&&(n.__t=void 0)}}function ge(e=""){return document.createTextNode(e)}function Le(e){return Et.call(e)}function z(e){return mt.call(e)}function pr(e,t){if(!ee)return Le(e);var n=Le(S);if(n===null)n=S.appendChild(ge());else if(t&&n.nodeType!==Be){var r=ge();return n?.before(r),re(r),r}return re(n),n}function wr(e,t=!1){if(!ee){var n=Le(e);return n instanceof Comment&&n.data===""?z(n):n}if(t&&S?.nodeType!==Be){var r=ge();return S?.before(r),re(r),r}return S}function yr(e,t=1,n=!1){let r=ee?S:e;for(var s;t--;)s=r,r=z(r);if(!ee)return r;if(n&&r?.nodeType!==Be){var f=ge();return r===null?s?.after(f):r.before(f),re(f),f}return re(r),r}function Er(e){e.textContent=""}function mr(){return!1}function gt(e){var t=_,n=h;G(null),se(null);try{return e()}finally{G(t),se(n)}}function bt(e){h===null&&(_===null&&$t(),zt()),ie&&Kt()}function yn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function D(e,t,n){var r=h;r!==null&&(r.f&C)!==0&&(e|=C);var s={ctx:w,deps:null,nodes:null,f:e|A|N,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{ve(s),s.f|=He}catch(l){throw V(s),l}else t!==null&&te(s);var f=s;if(n&&f.deps===null&&f.teardown===null&&f.nodes===null&&f.first===f.last&&(f.f&fe)===0&&(f=f.first,(e&j)!==0&&(e&pe)!==0&&f!==null&&(f.f|=pe)),f!==null&&(f.parent=r,r!==null&&yn(f,r),_!==null&&(_.f&y)!==0&&(e&K)===0)){var o=_;(o.effects??=[]).push(f)}return s}function be(){return _!==null&&!I}function En(e){const t=D(xe,null,!1);return E(t,g),t.teardown=e,t}function gr(e){bt();var t=h.f,n=!_&&(t&q)!==0&&(t&He)===0;if(n){var r=w;(r.e??=[]).push(e)}else return Tt(e)}function Tt(e){return D(qe|ft,e,!1)}function br(e){return bt(),D(xe|ft,e,!0)}function Tr(e){L.ensure();const t=D(K|fe,e,!0);return()=>{V(t)}}function Ar(e){L.ensure();const t=D(K|fe,e,!0);return(n={})=>new Promise(r=>{n.outro?Tn(t,()=>{V(t),r(void 0)}):(V(t),r(void 0))})}function xr(e){return D(qe,e,!1)}function mn(e){return D(Ue|fe,e,!0)}function Sr(e,t=0){return D(xe|t,e,!0)}function Rr(e,t=[],n=[],r=[]){cn(r,t,n,s=>{D(xe,()=>e(...s.map(le)),!0)})}function kr(e,t=0){var n=D(j|t,e,!0);return n}function Or(e){return D(q|fe,e,!0)}function At(e){var t=e.teardown;if(t!==null){const n=ie,r=_;et(!0),G(null);try{t.call(null)}finally{et(n),G(r)}}}function xt(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&gt(()=>{s.abort(ne)});var r=n.next;(n.f&K)!==0?n.parent=null:V(n,t),n=r}}function gn(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&q)===0&&V(t),t=n}}function V(e,t=!0){var n=!1;(t||(e.f&st)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(bn(e.nodes.start,e.nodes.end),n=!0),xt(e,t&&!n),Ae(e,0),E(e,H);var r=e.nodes&&e.nodes.t;if(r!==null)for(const f of r)f.stop();At(e);var s=e.parent;s!==null&&s.first!==null&&St(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function bn(e,t){for(;e!==null;){var n=e===t?null:z(e);e.remove(),e=n}}function St(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Tn(e,t,n=!0){var r=[];Rt(e,r,!0);var s=()=>{n&&V(e),t&&t()},f=r.length;if(f>0){var o=()=>--f||s();for(var l of r)l.out(o)}else s()}function Rt(e,t,n){if((e.f&C)===0){e.f^=C;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var s=e.first;s!==null;){var f=s.next,o=(s.f&pe)!==0||(s.f&q)!==0&&(e.f&j)!==0;Rt(s,t,o?n:!1),s=f}}}function Nr(e){kt(e,!0)}function kt(e,t){if((e.f&C)!==0){e.f^=C,(e.f&g)===0&&(E(e,A),te(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&pe)!==0||(n.f&q)!==0;kt(n,s?t:!1),n=r}var f=e.nodes&&e.nodes.t;if(f!==null)for(const o of f)(o.is_global||t)&&o.in()}}function Dr(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:z(n);t.append(n),n=s}}let W=!1;function Te(e){W=e}let ie=!1;function et(e){ie=e}let _=null,I=!1;function G(e){_=e}let h=null;function se(e){h=e}let M=null;function Ot(e){_!==null&&(M===null?M=[e]:M.push(e))}let b=null,x=0,R=null;function An(e){R=e}let Nt=1,_e=0,J=_e;function tt(e){J=e}function Dt(){return++Nt}function he(e){var t=e.f;if((t&A)!==0)return!0;if(t&y&&(e.f&=~Q),(t&P)!==0){var n=e.deps;if(n!==null)for(var r=n.length,s=0;s<r;s++){var f=n[s];if(he(f)&&ht(f),f.wv>e.wv)return!0}(t&N)!==0&&T===null&&E(e,g)}return!1}function It(e,t,n=!0){var r=e.reactions;if(r!==null&&!M?.includes(e))for(var s=0;s<r.length;s++){var f=r[s];(f.f&y)!==0?It(f,t,!1):t===f&&(n?E(f,A):(f.f&g)!==0&&E(f,P),te(f))}}function Ct(e){var t=b,n=x,r=R,s=_,f=M,o=w,l=I,i=J,a=e.f;b=null,x=0,R=null,_=(a&(q|K))===0?e:null,M=null,we(e.ctx),I=!1,J=++_e,e.ac!==null&&(gt(()=>{e.ac.abort(ne)}),e.ac=null);try{e.f|=Ie;var u=e.fn,v=u(),c=e.deps;if(b!==null){var d;if(Ae(e,x),c!==null&&x>0)for(c.length=x+b.length,d=0;d<b.length;d++)c[x+d]=b[d];else e.deps=c=b;if(be()&&(e.f&N)!==0)for(d=x;d<c.length;d++)(c[d].reactions??=[]).push(e)}else c!==null&&x<c.length&&(Ae(e,x),c.length=x);if(de()&&R!==null&&!I&&c!==null&&(e.f&(y|P|A))===0)for(d=0;d<R.length;d++)It(R[d],e);return s!==null&&s!==e&&(_e++,R!==null&&(r===null?r=R:r.push(...R))),(e.f&U)!==0&&(e.f^=U),v}catch(O){return on(O)}finally{e.f^=Ie,b=t,x=n,R=r,_=s,M=f,we(o),I=l,J=i}}function xn(e,t){let n=t.reactions;if(n!==null){var r=Lt.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}n===null&&(t.f&y)!==0&&(b===null||!b.includes(t))&&(E(t,P),(t.f&N)!==0&&(t.f^=N,t.f&=~Q),dt(t),Ae(t,0))}function Ae(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)xn(e,n[r])}function ve(e){var t=e.f;if((t&H)===0){E(e,g);var n=h,r=W;h=e,W=!0;try{(t&(j|Ut))!==0?gn(e):xt(e),At(e);var s=Ct(e);e.teardown=typeof s=="function"?s:null,e.wv=Nt;var f}finally{W=r,h=n}}}async function Ir(){await Promise.resolve(),Pe()}function Cr(){return L.ensure().settled()}function le(e){var t=e.f,n=(t&y)!==0;if(_!==null&&!I){var r=h!==null&&(h.f&H)!==0;if(!r&&!M?.includes(e)){var s=_.deps;if((_.f&Ie)!==0)e.rv<_e&&(e.rv=_e,b===null&&s!==null&&s[x]===e?x++:b===null?b=[e]:b.includes(e)||b.push(e));else{(_.deps??=[]).push(e);var f=e.reactions;f===null?e.reactions=[_]:f.includes(_)||f.push(_)}}}if(ie){if(B.has(e))return B.get(e);if(n){var o=e,l=o.v;return((o.f&g)===0&&o.reactions!==null||Ft(o))&&(l=ze(o)),B.set(o,l),l}}else n&&(!T?.has(e)||p?.is_fork&&!be())&&(o=e,he(o)&&ht(o),W&&be()&&(o.f&N)===0&&Pt(o));if(T?.has(e))return T.get(e);if((e.f&U)!==0)throw e.v;return e.v}function Pt(e){if(e.deps!==null){e.f^=N;for(const t of e.deps)(t.reactions??=[]).push(e),(t.f&y)!==0&&(t.f&N)===0&&Pt(t)}}function Ft(e){if(e.v===m)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(B.has(t)||(t.f&y)!==0&&Ft(t))return!0;return!1}function Pr(e){var t=I;try{return I=!0,e()}finally{I=t}}const Sn=-7169;function E(e,t){e.f=e.f&Sn|t}function Fr(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(ue in e)je(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n=="object"&&n&&ue in n&&je(n)}}}function je(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let r in e)try{je(e[r],t)}catch{}const n=nt(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const r=jt(n);for(let s in r){const f=r[s].get;if(f)try{f.call(e)}catch{}}}}}export{dr as $,ir as A,fr as B,re as C,tr as D,pe as E,En as F,gt as G,nn as H,kn as I,G as J,se as K,_ as L,h as M,p as N,Nr as O,V as P,Tn as Q,ge as R,ue as S,Or as T,S as U,Dr as V,mr as W,yr as X,pr as Y,rr as Z,Nn as _,cr as a,In as a$,oe as a0,jn as a1,zn as a2,ae as a3,H as a4,dn as a5,$n as a6,Kn as a7,Gn as a8,Xn as a9,jt as aA,be as aB,L as aC,we as aD,on as aE,sr as aF,ye as aG,qn as aH,fe as aI,Ye as aJ,er as aK,hr as aL,tn as aM,Ve as aN,Ln as aO,Ar as aP,Ge as aQ,wn as aR,Wn as aS,Jn as aT,He as aU,Be as aV,Pe as aW,Ir as aX,Zn as aY,On as aZ,Tr as a_,ie as aa,Pn as ab,sn as ac,Rr as ad,or as ae,lr as af,vr as ag,Qe as ah,Un as ai,Le as aj,it as ak,rn as al,Me as am,Cn as an,Rn as ao,Mt as ap,Yn as aq,Vn as ar,Hn as as,C as at,z as au,Bn as av,Er as aw,Fn as ax,Qn as ay,nt as az,$e as b,_r as b0,Cr as b1,$ as c,gr as d,w as e,wr as f,le as g,Se as h,Ne as i,Pr as j,br as k,Vt as l,Dn as m,Fr as n,Ke as o,ur as p,xr as q,Ht as r,Y as s,Sr as t,J as u,an as v,ar as w,ee as x,nr as y,kr as z};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/DIcbJqE8.js
··· 1 + import{q as b,t as h,j as k,v as q,S as t}from"./Cy0nnqwK.js";function u(r,i){return r===i||r?.[t]===i}function c(r={},i,a,S){return b(()=>{var f,s;return h(()=>{f=s,s=S?.()||[],k(()=>{r!==a(...s)&&(i(r,...s),f&&u(a(...f),r)&&i(null,...f))})}),()=>{q(()=>{s&&u(a(...s),r)&&i(null,...s)})}}),r}export{c as b};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/DTiiyNL4.js
··· 1 + import{R as b,z as $,ai as G,C as D,x as A,aj as J,y as Z,g as x,a5 as j,A as ee,H as re,B as y,D as z,U as H,ak as fe,al as ae,am as B,N as ne,an as N,T as F,W as ie,b as Y,$ as se,ao as q,ap as le,aq as oe,ar as ue,as as te,O as K,Q,at as k,v as ve,au as ce,av as de,aw as pe,P as ge,ax as _e,ay as he,az as Ee,aA as Ae}from"./Cy0nnqwK.js";import{t as Ne}from"./Ni3ygk_w.js";function Re(e,f){return f}function Te(e,f,a){for(var t=[],u=f.length,i,l=f.length,c=0;c<u;c++){let h=f[c];Q(h,()=>{if(i){if(i.pending.delete(h),i.done.add(h),i.pending.size===0){var d=e.outrogroups;U(q(i.done)),d.delete(i),d.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var n=t.length===0&&a!==null;if(n){var v=a,s=v.parentNode;pe(s),s.append(v),e.items.clear()}U(f,!n)}else i={pending:new Set(f),done:new Set},(e.outrogroups??=new Set).add(i)}function U(e,f=!0){for(var a=0;a<e.length;a++)ge(e[a],f)}var P;function He(e,f,a,t,u,i=null){var l=e,c=new Map,n=(f&G)!==0;if(n){var v=e;l=A?D(J(v)):v.appendChild(b())}A&&Z();var s=null,h=j(()=>{var o=a();return le(o)?o:o==null?[]:q(o)}),d,g=!0;function S(){r.fallback=s,Se(r,d,l,f,t),s!==null&&(d.length===0?(s.f&N)===0?K(s):(s.f^=N,R(s,null,l)):Q(s,()=>{s=null}))}var w=$(()=>{d=x(h);var o=d.length;let C=!1;if(A){var M=ee(l)===re;M!==(o===0)&&(l=y(),D(l),z(!1),C=!0)}for(var E=new Set,I=ne,L=ie(),_=0;_<o;_+=1){A&&H.nodeType===fe&&H.data===ae&&(l=H,C=!0,z(!1));var m=d[_],O=t(m,_),p=g?null:c.get(O);p?(p.v&&B(p.v,m),p.i&&B(p.i,_),L&&I.skipped_effects.delete(p.e)):(p=Ie(c,g?l:P??=b(),m,O,_,u,f,a),g||(p.e.f|=N),c.set(O,p)),E.add(O)}if(o===0&&i&&!s&&(g?s=F(()=>i(l)):(s=F(()=>i(P??=b())),s.f|=N)),A&&o>0&&D(y()),!g)if(L){for(const[W,X]of c)E.has(W)||I.skipped_effects.add(X.e);I.oncommit(S),I.ondiscard(()=>{})}else S();C&&z(!0),x(h)}),r={effect:w,items:c,outrogroups:null,fallback:s};g=!1,A&&(l=H)}function Se(e,f,a,t,u){var i=(t&de)!==0,l=f.length,c=e.items,n=e.effect.first,v,s=null,h,d=[],g=[],S,w,r,o;if(i)for(o=0;o<l;o+=1)S=f[o],w=u(S,o),r=c.get(w).e,(r.f&N)===0&&(r.nodes?.a?.measure(),(h??=new Set).add(r));for(o=0;o<l;o+=1){if(S=f[o],w=u(S,o),r=c.get(w).e,e.outrogroups!==null)for(const p of e.outrogroups)p.pending.delete(r),p.done.delete(r);if((r.f&N)!==0)if(r.f^=N,r===n)R(r,null,a);else{var C=s?s.next:n;r===e.effect.last&&(e.effect.last=r.prev),r.prev&&(r.prev.next=r.next),r.next&&(r.next.prev=r.prev),T(e,s,r),T(e,r,C),R(r,C,a),s=r,d=[],g=[],n=s.next;continue}if((r.f&k)!==0&&(K(r),i&&(r.nodes?.a?.unfix(),(h??=new Set).delete(r))),r!==n){if(v!==void 0&&v.has(r)){if(d.length<g.length){var M=g[0],E;s=M.prev;var I=d[0],L=d[d.length-1];for(E=0;E<d.length;E+=1)R(d[E],M,a);for(E=0;E<g.length;E+=1)v.delete(g[E]);T(e,I.prev,L.next),T(e,s,I),T(e,L,M),n=M,s=L,o-=1,d=[],g=[]}else v.delete(r),R(r,n,a),T(e,r.prev,r.next),T(e,r,s===null?e.effect.first:s.next),T(e,s,r),s=r;continue}for(d=[],g=[];n!==null&&n!==r;)(v??=new Set).add(n),g.push(n),n=n.next;if(n===null)continue}(r.f&N)===0&&d.push(r),s=r,n=r.next}if(e.outrogroups!==null){for(const p of e.outrogroups)p.pending.size===0&&(U(q(p.done)),e.outrogroups?.delete(p));e.outrogroups.size===0&&(e.outrogroups=null)}if(n!==null||v!==void 0){var _=[];if(v!==void 0)for(r of v)(r.f&k)===0&&_.push(r);for(;n!==null;)(n.f&k)===0&&n!==e.fallback&&_.push(n),n=n.next;var m=_.length;if(m>0){var O=(t&G)!==0&&l===0?a:null;if(i){for(o=0;o<m;o+=1)_[o].nodes?.a?.measure();for(o=0;o<m;o+=1)_[o].nodes?.a?.fix()}Te(e,_,O)}}i&&ve(()=>{if(h!==void 0)for(r of h)r.nodes?.a?.apply()})}function Ie(e,f,a,t,u,i,l,c){var n=(l&oe)!==0?(l&ue)===0?se(a,!1,!1):Y(a):null,v=(l&te)!==0?Y(u):null;return{v:n,i:v,e:F(()=>(i(f,n??a,v??u,c),()=>{e.delete(t)}))}}function R(e,f,a){if(e.nodes)for(var t=e.nodes.start,u=e.nodes.end,i=f&&(f.f&N)===0?f.nodes.start:a;t!==null;){var l=ce(t);if(i.before(t),t===u)return;t=l}}function T(e,f,a){f===null?e.effect.first=a:f.next=a,a===null?e.effect.last=f:a.prev=f}function be(e,f,a,t,u,i){var l=e.__className;if(A||l!==a||l===void 0){var c=Ne(a,t,i);(!A||c!==e.getAttribute("class"))&&(c==null?e.removeAttribute("class"):f?e.className=c:e.setAttribute("class",c)),e.__className=a}else if(i&&u!==i)for(var n in i){var v=!!i[n];(u==null||v!==!!u[n])&&e.classList.toggle(n,v)}return i}const me=Symbol("is custom element"),we=Symbol("is html");function De(e,f,a,t){var u=Ce(e);A&&(u[f]=e.getAttribute(f),f==="src"||f==="srcset"||f==="href"&&e.nodeName==="LINK")||u[f]!==(u[f]=a)&&(f==="loading"&&(e[_e]=a),a==null?e.removeAttribute(f):typeof a!="string"&&Me(e).includes(f)?e[f]=a:e.setAttribute(f,a))}function Ce(e){return e.__attributes??={[me]:e.nodeName.includes("-"),[we]:e.namespaceURI===he}}var V=new Map;function Me(e){var f=e.getAttribute("is")||e.nodeName,a=V.get(f);if(a)return a;V.set(f,a=[]);for(var t,u=e,i=Element.prototype;i!==u;){t=Ae(u);for(var l in t)t[l].set&&a.push(l);u=Ee(u)}return a}export{De as a,He as e,Re as i,be as s};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/DTjTDYf3.js
··· 1 + import{R as c,aj as d,aR as E,M as m,aS as T,aT as g,x as f,U as o,aU as N,y as w,aV as y,C}from"./Cy0nnqwK.js";function v(r){var a=document.createElement("template");return a.innerHTML=r.replaceAll("<!>","<!---->"),a.content}function n(r,a){var e=m;e.nodes===null&&(e.nodes={start:r,end:a,a:null,t:null})}function A(r,a){var e=(a&T)!==0,_=(a&g)!==0,t,i=!r.startsWith("<!>");return()=>{if(f)return n(o,null),o;t===void 0&&(t=v(i?r:"<!>"+r),e||(t=d(t)));var s=_||E?document.importNode(t,!0):t.cloneNode(!0);if(e){var l=d(s),u=s.lastChild;n(l,u)}else n(s,s);return s}}function x(r,a,e="svg"){var _=!r.startsWith("<!>"),t=`<${e}>${_?r:"<!>"+r}</${e}>`,i;return()=>{if(f)return n(o,null),o;if(!i){var s=v(t),l=d(s);for(i=document.createDocumentFragment();d(l);)i.appendChild(d(l))}var u=i.cloneNode(!0);{var p=d(u),h=u.lastChild;n(p,h)}return u}}function F(r,a){return x(r,a,"svg")}function D(r=""){if(!f){var a=c(r+"");return n(a,a),a}var e=o;return e.nodeType!==y&&(e.before(e=c()),C(e)),n(e,e),e}function L(){if(f)return n(o,null),o;var r=document.createDocumentFragment(),a=document.createComment(""),e=c();return r.append(a,e),n(a,e),r}function O(r,a){if(f){var e=m;((e.f&N)===0||e.nodes.end===null)&&(e.nodes.end=o),w();return}r!==null&&r.before(a)}const M="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(M);export{O as a,n as b,L as c,F as d,A as f,D as t};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/Disko3h9.js
··· 1 + import{d as a,a_ as u,k as v,ae as l,af as E}from"./Cy0nnqwK.js";const p="ws://localhost:8000";class g extends Event{message;constructor(e){super("message"),this.message=e}}class m extends Event{account;constructor(e){super("auth"),this.account=e}}class f extends EventTarget{#e;id;constructor(e,t){super(),this.#e=e,this.id=t}async reply(e){return new Promise((t,s)=>{e?.throwIfAborted();const n=o=>{o.message.id===this.id&&(t(o.message),this.#e.removeEventListener("message",n),e?.removeEventListener("abort",i))},i=()=>{s(e.reason),this.#e.removeEventListener("message",n)};this.#e.addEventListener("message",n),e?.addEventListener("abort",i)})}$then(e){a(()=>{const t=new AbortController;return this.reply(t.signal).then(s=>{e(s)},s=>{if(s!=="unmounted")throw s}),()=>t.abort("unmounted")})}}class h extends EventTarget{addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}$on(e,t,s){a(()=>{let n;function i(o){n?.(),n=u(()=>t.call(this,o))}return this.addEventListener(e,i,s),()=>{n?.(),this.removeEventListener(e,i,s)}})}}class L extends Event{message;constructor(e){super("next"),this.message=e}}class w extends h{#e;#t;id;constructor(e,t){super(),this.#e=e,this.id=t,this.#t=s=>{s.message.id===this.id&&this.dispatchEvent(new L(s.message))},this.#e.addEventListener("message",this.#t)}unsubscribe(){this.#e.unsubscribe(this.id),this.#e.removeEventListener("message",this.#t)}}class c extends h{static PROTOCOL=["v1.cartography.app"];#e;#t;constructor(e){super(),this.#t=e,this.#e=new WebSocket(this.#t,c.PROTOCOL),this.#n()}#n(){this.#e.addEventListener("open",n=>{console.log("Socket opened",n),this.dispatchEvent(new Event("open"))}),this.#e.addEventListener("message",n=>{const i=n.data;typeof i!="string"&&(this.#e.close(1003,"Only text messages are supported"),this.dispatchEvent(new Event("error")));try{const o=JSON.parse(i);this.dispatchEvent(new g(o))}catch{this.#e.close(4e3,"Invalid JSON received"),this.dispatchEvent(new Event("error"))}});const e=()=>{this.#e.removeEventListener("error",t),this.#e.removeEventListener("close",s),this.#e=new WebSocket(this.#t,c.PROTOCOL),this.#n()},t=n=>{console.error("Socket error",n),this.dispatchEvent(new Event("error",n)),e()},s=n=>{console.log("Socket closed",n),this.dispatchEvent(new CloseEvent("close",n)),n.wasClean||e()};this.#e.addEventListener("error",t),this.#e.addEventListener("close",s)}#s(e,t={},s=window.crypto.randomUUID()){return this.#e.send(JSON.stringify({type:e,data:t,id:s})),new f(this,s)}auth(e){this.#s("auth",e).reply().then(t=>{this.dispatchEvent(new m(t.data.account))})}getFields(){return this.#s("get_fields")}getField(e){return this.#s("get_field",{field_id:e})}unsubscribe(e){this.#s("unsubscribe",{},e)}subscribe(e){const t=window.crypto.randomUUID();return this.#s("subscribe",{channel:e},t),new w(this,t)}close(e,t){this.#e.close(e,t)}}const d=Symbol("Socket");function k(){return E(d).socket}function x(){let r;v(()=>(r=new c(`${p}/websocket`),r.addEventListener("open",()=>{r.auth({id:"foxfriends"})}),()=>r.close())),l(d,{get socket(){return r}})}export{k as g,x as p};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/Du5sam5i.js
··· 1 + import{s as h,b as l,u as f,g as i,c as u,i as a}from"./Cy0nnqwK.js";class m extends Map{#e=new Map;#s=h(0);#r=h(0);#u=f||-1;constructor(e){if(super(),e){for(var[r,s]of e)super.set(r,s);this.#r.v=super.size}}#t(e){return f===this.#u?h(e):l(e)}has(e){var r=this.#e,s=r.get(e);if(s===void 0){var t=super.get(e);if(t!==void 0)s=this.#t(0),r.set(e,s);else return i(this.#s),!1}return i(s),!0}forEach(e,r){this.#i(),super.forEach(e,r)}get(e){var r=this.#e,s=r.get(e);if(s===void 0){var t=super.get(e);if(t!==void 0)s=this.#t(0),r.set(e,s);else{i(this.#s);return}}return i(s),super.get(e)}set(e,r){var s=this.#e,t=s.get(e),v=super.get(e),p=super.set(e,r),n=this.#s;if(t===void 0)t=this.#t(0),s.set(e,t),u(this.#r,super.size),a(n);else if(v!==r){a(t);var o=n.reactions===null?null:new Set(n.reactions),c=o===null||!t.reactions?.every(d=>o.has(d));c&&a(n)}return p}delete(e){var r=this.#e,s=r.get(e),t=super.delete(e);return s!==void 0&&(r.delete(e),u(this.#r,super.size),u(s,-1),a(this.#s)),t}clear(){if(super.size!==0){super.clear();var e=this.#e;u(this.#r,0);for(var r of e.values())u(r,-1);a(this.#s),e.clear()}}#i(){i(this.#s);var e=this.#e;if(this.#r.v!==e.size){for(var r of super.keys())if(!e.has(r)){var s=this.#t(0);e.set(r,s)}}for([,s]of this.#e)i(s)}keys(){return i(this.#s),super.keys()}values(){return this.#i(),super.values()}entries(){return this.#i(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return i(this.#r),super.size}}export{m as S};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/Dwwks_Q7.js
··· 1 + import{w as a}from"./Cy0nnqwK.js";a();
+1
app/.svelte-kit/output/client/_app/immutable/chunks/F8Rf94kU.js
··· 1 + import{_ as c,j as a,ac as d}from"./Cy0nnqwK.js";function p(s,u,e){if(s==null)return u(void 0),c;const t=a(()=>s.subscribe(u,e));return t.unsubscribe?()=>t.unsubscribe():t}const i=[];function g(s,u=c){let e=null;const t=new Set;function o(r){if(d(s,r)&&(s=r,e)){const b=!i.length;for(const n of t)n[1](),i.push(n,s);if(b){for(let n=0;n<i.length;n+=2)i[n][0](i[n+1]);i.length=0}}}function f(r){o(r(s))}function l(r,b=c){const n=[r,b];return t.add(n),t.size===1&&(e=u(o,f)||c),r(s),()=>{t.delete(n),t.size===0&&e&&(e(),e=null)}}return{set:o,update:f,subscribe:l}}function h(s){let u;return p(s,e=>u=e)(),u}export{h as g,p as s,g as w};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/IrKOPqpB.js
··· 1 + import{_ as E,$ as L,g as o,F as M,I as N,c as O,a0 as U,a1 as y,a2 as B,a3 as Y,M as $,a4 as h,o as w,a5 as x,a6 as j,j as q,h as z,a7 as C,a8 as F,a9 as G,aa as Z,S as p,ab as H}from"./Cy0nnqwK.js";import{s as J,g as K}from"./F8Rf94kU.js";let c=!1,g=Symbol();function X(e,a,i){const r=i[a]??={store:null,source:L(void 0),unsubscribe:E};if(r.store!==e&&!(g in i))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=E;else{var t=!0;r.unsubscribe=J(e,u=>{t?r.source.v=u:O(r.source,u)}),t=!1}return e&&g in i?K(e):o(r.source)}function k(){const e={};function a(){M(()=>{for(var i in e)e[i].unsubscribe();N(e,g,{enumerable:!1,value:!0})})}return[e,a]}function Q(e){var a=c;try{return c=!1,[e(),c]}finally{c=a}}function ee(e,a,i,r){var t=!z||(i&C)!==0,u=(i&j)!==0,R=(i&G)!==0,s=r,b=!0,P=()=>(b&&(b=!1,s=R?q(r):r),s),_;if(u){var A=p in e||H in e;_=U(e,a)?.set??(A&&a in e?n=>e[a]=n:void 0)}var d,I=!1;u?[d,I]=Q(()=>e[a]):d=e[a],d===void 0&&r!==void 0&&(d=P(),_&&(t&&y(),_(d)));var f;if(t?f=()=>{var n=e[a];return n===void 0?P():(b=!0,n)}:f=()=>{var n=e[a];return n!==void 0&&(s=void 0),n===void 0?s:n},t&&(i&B)===0)return f;if(_){var T=e.$$legacy;return(function(n,v){return arguments.length>0?((!t||!v||T||I)&&_(v?f():n),n):f()})}var S=!1,l=((i&F)!==0?w:x)(()=>(S=!1,f()));u&&o(l);var D=$;return(function(n,v){if(arguments.length>0){const m=v?o(l):t&&u?Y(n):n;return O(l,m),S=!0,s!==void 0&&(s=m),n}return Z&&S||(D.f&h)!==0?l.v:o(l)})}export{k as a,ee as p,X as s};
+2
app/.svelte-kit/output/client/_app/immutable/chunks/Ni3ygk_w.js
··· 1 + import{x as h}from"./Cy0nnqwK.js";function P(r){var u,i,f="";if(typeof r=="string"||typeof r=="number")f+=r;else if(typeof r=="object")if(Array.isArray(r)){var t=r.length;for(u=0;u<t;u++)r[u]&&(i=P(r[u]))&&(f&&(f+=" "),f+=i)}else for(i in r)r[i]&&(f&&(f+=" "),f+=i);return f}function L(){for(var r,u,i=0,f="",t=arguments.length;i<t;i++)(r=arguments[i])&&(u=P(r))&&(f&&(f+=" "),f+=u);return f}function e(r){return typeof r=="object"?L(r):r??""}const j=[...` 2 + \r\f \v\uFEFF`];function q(r,u,i){var f=r==null?"":""+r;if(u&&(f=f?f+" "+u:u),i){for(var t in i)if(i[t])f=f?f+" "+t:t;else if(f.length)for(var g=t.length,n=0;(n=f.indexOf(t,n))>=0;){var l=n+g;(n===0||j.includes(f[n-1]))&&(l===f.length||j.includes(f[l]))?f=(n===0?"":f.substring(0,n))+f.substring(l+1):n=l}}return f===""?null:f}function O(r,u=!1){var i=u?" !important;":";",f="";for(var t in r){var g=r[t];g!=null&&g!==""&&(f+=" "+t+": "+g+i)}return f}function b(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function T(r,u){if(u){var i="",f,t;if(Array.isArray(u)?(f=u[0],t=u[1]):f=u,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var g=!1,n=0,l=!1,c=[];f&&c.push(...Object.keys(f).map(b)),t&&c.push(...Object.keys(t).map(b));var p=0,a=-1;const v=r.length;for(var s=0;s<v;s++){var o=r[s];if(l?o==="/"&&r[s-1]==="*"&&(l=!1):g?g===o&&(g=!1):o==="/"&&r[s+1]==="*"?l=!0:o==='"'||o==="'"?g=o:o==="("?n++:o===")"&&n--,!l&&g===!1&&n===0){if(o===":"&&a===-1)a=s;else if(o===";"||s===v-1){if(a!==-1){var S=b(r.substring(p,a).trim());if(!c.includes(S)){o!==";"&&s++;var C=r.substring(p,s).trim();i+=" "+C+";"}}p=s+1,a=-1}}}}return f&&(i+=O(f)),t&&(i+=O(t,!0)),i=i.trim(),i===""?null:i}return r==null?null:String(r)}function A(r,u={},i,f){for(var t in i){var g=i[t];u[t]!==g&&(i[t]==null?r.style.removeProperty(t):r.style.setProperty(t,g,f))}}function z(r,u,i,f){var t=r.__style;if(h||t!==u){var g=T(u,f);(!h||g!==r.getAttribute("style"))&&(g==null?r.removeAttribute("style"):r.style.cssText=g),r.__style=u}else f&&(Array.isArray(f)?(A(r,i?.[0],f[0]),A(r,i?.[1],f[1],"important")):A(r,i,f));return f}export{e as c,z as s,q as t};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/VCyrUZ76.js
··· 1 + import{z as p,E as t}from"./Cy0nnqwK.js";import{B as c}from"./C3Bw9t1P.js";function E(r,s,...a){var e=new c(r);p(()=>{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{E as s};
+2
app/.svelte-kit/output/client/_app/immutable/chunks/Zp7FgOxX.js
··· 1 + import{aB as J,g as M,b as P,t as K,j as Q,i as O,v as V,U as d,x as c,M as E,z as U,y as W,ak as S,H as $,T as _,aC as g,Q as R,R as B,K as C,J as v,aD as x,aE as z,L,e as Y,V as G,am as X,P as w,C as b,aF as Z,B as tt,aG as H,aH as et,E as st,aI as it,aJ as nt,aK as rt,aL as N,aj as at,aM as ht,au as ot,aN as D,D as y,aO as ft,aw as lt,ao as ut,aP as _t,p as dt,al as ct,aQ as pt,a as gt}from"./Cy0nnqwK.js";import{a as vt,r as I,h as m}from"./wnUvJIYz.js";import{b as yt}from"./DTjTDYf3.js";function mt(i){let t=0,e=P(0),n;return()=>{J()&&(M(e),K(()=>(t===0&&(n=Q(()=>i(()=>O(e)))),t+=1,()=>{V(()=>{t-=1,t===0&&(n?.(),n=void 0,O(e))})})))}}var Et=st|it|nt;function bt(i,t,e){new Tt(i,t,e)}class Tt{parent;#s=!1;#e;#g=c?d:null;#n;#u;#r;#i=null;#t=null;#a=null;#h=null;#o=null;#_=0;#f=0;#d=!1;#l=null;#m=mt(()=>(this.#l=P(this.#_),()=>{this.#l=null}));constructor(t,e,n){this.#e=t,this.#n=e,this.#u=n,this.parent=E.b,this.#s=!!this.#n.pending,this.#r=U(()=>{if(E.b=this,c){const s=this.#g;W(),s.nodeType===S&&s.data===$?this.#b():this.#E()}else{var o=this.#v();try{this.#i=_(()=>n(o))}catch(s){this.error(s)}this.#f>0?this.#p():this.#s=!1}return()=>{this.#o?.remove()}},Et),c&&(this.#e=d)}#E(){try{this.#i=_(()=>this.#u(this.#e))}catch(t){this.error(t)}this.#s=!1}#b(){const t=this.#n.pending;t&&(this.#t=_(()=>t(this.#e)),g.enqueue(()=>{var e=this.#v();this.#i=this.#c(()=>(g.ensure(),_(()=>this.#u(e)))),this.#f>0?this.#p():(R(this.#t,()=>{this.#t=null}),this.#s=!1)}))}#v(){var t=this.#e;return this.#s&&(this.#o=B(),this.#e.before(this.#o),t=this.#o),t}is_pending(){return this.#s||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#n.pending}#c(t){var e=E,n=L,o=Y;C(this.#r),v(this.#r),x(this.#r.ctx);try{return t()}catch(s){return z(s),null}finally{C(e),v(n),x(o)}}#p(){const t=this.#n.pending;this.#i!==null&&(this.#h=document.createDocumentFragment(),this.#h.append(this.#o),G(this.#i,this.#h)),this.#t===null&&(this.#t=_(()=>t(this.#e)))}#y(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#y(t);return}this.#f+=t,this.#f===0&&(this.#s=!1,this.#t&&R(this.#t,()=>{this.#t=null}),this.#h&&(this.#e.before(this.#h),this.#h=null))}update_pending_count(t){this.#y(t),this.#_+=t,this.#l&&X(this.#l,this.#_)}get_effect_pending(){return this.#m(),M(this.#l)}error(t){var e=this.#n.onerror;let n=this.#n.failed;if(this.#d||!e&&!n)throw t;this.#i&&(w(this.#i),this.#i=null),this.#t&&(w(this.#t),this.#t=null),this.#a&&(w(this.#a),this.#a=null),c&&(b(this.#g),Z(),b(tt()));var o=!1,s=!1;const a=()=>{if(o){rt();return}o=!0,s&&et(),g.ensure(),this.#_=0,this.#a!==null&&R(this.#a,()=>{this.#a=null}),this.#s=this.has_pending_snippet(),this.#i=this.#c(()=>(this.#d=!1,_(()=>this.#u(this.#e)))),this.#f>0?this.#p():this.#s=!1};var f=L;try{v(null),s=!0,e?.(t,a),s=!1}catch(l){H(l,this.#r&&this.#r.parent)}finally{v(f)}n&&V(()=>{this.#a=this.#c(()=>{g.ensure(),this.#d=!0;try{return _(()=>{n(this.#e,()=>t,()=>a)})}catch(l){return H(l,this.#r.parent),null}finally{this.#d=!1}})})}}const Rt=["touchstart","touchmove"];function wt(i){return Rt.includes(i)}function kt(i,t){var e=t==null?"":typeof t=="object"?t+"":t;e!==(i.__t??=i.nodeValue)&&(i.__t=e,i.nodeValue=e+"")}function Nt(i,t){return j(i,t)}function Ft(i,t){N(),t.intro=t.intro??!1;const e=t.target,n=c,o=d;try{for(var s=at(e);s&&(s.nodeType!==S||s.data!==ht);)s=ot(s);if(!s)throw D;y(!0),b(s);const a=j(i,{...t,anchor:s});return y(!1),a}catch(a){if(a instanceof Error&&a.message.split(` 2 + `).some(f=>f.startsWith("https://svelte.dev/e/")))throw a;return a!==D&&console.warn("Failed to hydrate: ",a),t.recover===!1&&ft(),N(),lt(e),y(!1),Nt(i,t)}finally{y(n),b(o)}}const p=new Map;function j(i,{target:t,anchor:e,props:n={},events:o,context:s,intro:a=!0}){N();var f=new Set,l=u=>{for(var h=0;h<u.length;h++){var r=u[h];if(!f.has(r)){f.add(r);var k=wt(r);t.addEventListener(r,m,{passive:k});var F=p.get(r);F===void 0?(document.addEventListener(r,m,{passive:k}),p.set(r,1)):p.set(r,F+1)}}};l(ut(vt)),I.add(l);var T=void 0,q=_t(()=>{var u=e??t.appendChild(B());return bt(u,{pending:()=>{}},h=>{if(s){dt({});var r=Y;r.c=s}if(o&&(n.$$events=o),c&&yt(h,null),T=i(h,n)||{},c&&(E.nodes.end=d,d===null||d.nodeType!==S||d.data!==ct))throw pt(),D;s&&gt()}),()=>{for(var h of f){t.removeEventListener(h,m);var r=p.get(h);--r===0?(document.removeEventListener(h,m),p.delete(h)):p.set(h,r)}I.delete(l),u!==e&&u.parentNode?.removeChild(u)}});return A.set(T,q),T}let A=new WeakMap;function Ot(i,t){const e=A.get(i);return e?(A.delete(i),e(t)):Promise.resolve()}export{Ft as h,Nt as m,kt as s,Ot as u};
+1
app/.svelte-kit/output/client/_app/immutable/chunks/wnUvJIYz.js
··· 1 + import{F as y,v as L,G as E,I as M,J as v,K as g,L as k,M as S}from"./Cy0nnqwK.js";const T=new Set,q=new Set;function x(t,r,i,n={}){function e(a){if(n.capture||B.call(r,a),!a.cancelBubble)return E(()=>i?.call(this,a))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?L(()=>{r.addEventListener(t,e,n)}):r.addEventListener(t,e,n),e}function W(t,r,i,n,e){var a={capture:n,passive:e},l=x(t,r,i,a);(r===document.body||r===window||r===document||r instanceof HTMLMediaElement)&&y(()=>{r.removeEventListener(t,l,a)})}function D(t){for(var r=0;r<t.length;r++)T.add(t[r]);for(var i of q)i(t)}let p=null;function B(t){var r=this,i=r.ownerDocument,n=t.type,e=t.composedPath?.()||[],a=e[0]||t.target;p=t;var l=0,f=p===t&&t.__root;if(f){var u=e.indexOf(f);if(u!==-1&&(r===document||r===window)){t.__root=r;return}var _=e.indexOf(r);if(_===-1)return;u<=_&&(l=u)}if(a=e[l]||t.target,a!==r){M(t,"currentTarget",{configurable:!0,get(){return a||i}});var w=k,b=S;v(null),g(null);try{for(var c,d=[];a!==null;){var s=a.assignedSlot||a.parentNode||a.host||null;try{var h=a["__"+n];h!=null&&(!a.disabled||t.target===a)&&h.call(a,t)}catch(o){c?d.push(o):c=o}if(t.cancelBubble||s===r||s===null)break;a=s}if(c){for(let o of d)queueMicrotask(()=>{throw o});throw c}}finally{t.__root=r,delete t.currentTarget,v(w),g(b)}}}export{T as a,D as d,W as e,B as h,q as r};
+2
app/.svelte-kit/output/client/_app/immutable/entry/app.v3Vgvfg_.js
··· 1 + const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Bpyn17vy.js","../chunks/DTjTDYf3.js","../chunks/Cy0nnqwK.js","../chunks/VCyrUZ76.js","../chunks/C3Bw9t1P.js","../nodes/1.zAvY42iv.js","../chunks/Dwwks_Q7.js","../chunks/Zp7FgOxX.js","../chunks/wnUvJIYz.js","../chunks/BfVwtNtA.js","../chunks/BXN2zbQS.js","../chunks/F8Rf94kU.js","../chunks/CmPt_qt9.js","../nodes/2.B3v9Uros.js","../chunks/Disko3h9.js","../nodes/3.rm3kMfwl.js","../assets/3.DHpgJXmb.css","../nodes/4.DThprzVs.js","../chunks/IrKOPqpB.js","../chunks/CFNKoBvp.js","../chunks/Ni3ygk_w.js","../assets/DragWindow.Ct7pKWbu.css","../chunks/Du5sam5i.js","../nodes/5.QeLDNF63.js","../chunks/BxqNGrrm.js","../chunks/DTiiyNL4.js","../chunks/B5ZTdtgC.js","../assets/GridLines.Cmy_IU9Y.css","../assets/5.BH-JXrvf.css","../nodes/6.BjAi8SzL.js","../chunks/CvUAJ54q.js","../assets/CardGrid.DkTs1kla.css","../assets/6.DYvKU7Oc.css","../nodes/7.DyXTg_vC.js","../chunks/DIcbJqE8.js","../assets/7.DSn3KEp4.css"])))=>i.map(i=>d[i]); 2 + import{x as tt,y as et,z as rt,E as at,c as C,ab as st,g as l,aW as nt,I as ot,$ as ct,p as it,k as ut,d as lt,s as q,aX as mt,f as b,X as dt,a as ft,Y as _t,Z as ht,ag as x,ad as vt}from"../chunks/Cy0nnqwK.js";import{h as gt,m as Et,u as yt,s as bt}from"../chunks/Zp7FgOxX.js";import{f as Y,a as f,c as O,t as Pt}from"../chunks/DTjTDYf3.js";import{o as Rt}from"../chunks/CmPt_qt9.js";import{i as N}from"../chunks/BxqNGrrm.js";import{B as pt}from"../chunks/C3Bw9t1P.js";import{b as T}from"../chunks/DIcbJqE8.js";import{p as j}from"../chunks/IrKOPqpB.js";function S(s,t,a){tt&&et();var c=new pt(s);rt(()=>{var o=t()??null;c.ensure(o,o&&(r=>a(r,o)))},at)}function Ot(s){return class extends kt{constructor(t){super({component:s,...t})}}}class kt{#e;#t;constructor(t){var a=new Map,c=(r,e)=>{var n=ct(e,!1,!1);return a.set(r,n),n};const o=new Proxy({...t.props||{},$$events:{}},{get(r,e){return l(a.get(e)??c(e,Reflect.get(r,e)))},has(r,e){return e===st?!0:(l(a.get(e)??c(e,Reflect.get(r,e))),Reflect.has(r,e))},set(r,e,n){return C(a.get(e)??c(e,n),n),Reflect.set(r,e,n)}});this.#t=(t.hydrate?gt:Et)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover}),(!t?.props?.$$host||t.sync===!1)&&nt(),this.#e=o.$$events;for(const r of Object.keys(this.#t))r==="$set"||r==="$destroy"||r==="$on"||ot(this,r,{get(){return this.#t[r]},set(e){this.#t[r]=e},enumerable:!0});this.#t.$set=r=>{Object.assign(o,r)},this.#t.$destroy=()=>{yt(this.#t)}}$set(t){this.#t.$set(t)}$on(t,a){this.#e[t]=this.#e[t]||[];const c=(...o)=>a.call(this,...o);return this.#e[t].push(c),()=>{this.#e[t]=this.#e[t].filter(o=>o!==c)}}$destroy(){this.#t.$destroy()}}const wt="modulepreload",At=function(s,t){return new URL(s,t).href},X={},_=function(t,a,c){let o=Promise.resolve();if(a&&a.length>0){let D=function(i){return Promise.all(i.map(m=>Promise.resolve(m).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};const e=document.getElementsByTagName("link"),n=document.querySelector("meta[property=csp-nonce]"),k=n?.nonce||n?.getAttribute("nonce");o=D(a.map(i=>{if(i=At(i,c),i in X)return;X[i]=!0;const m=i.endsWith(".css"),h=m?'[rel="stylesheet"]':"";if(c)for(let v=e.length-1;v>=0;v--){const P=e[v];if(P.href===i&&(!m||P.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${h}`))return;const d=document.createElement("link");if(d.rel=m?"stylesheet":wt,m||(d.as="script"),d.crossOrigin="",d.href=i,k&&d.setAttribute("nonce",k),document.head.appendChild(d),m)return new Promise((v,P)=>{d.addEventListener("load",v),d.addEventListener("error",()=>P(new Error(`Unable to preload CSS for ${i}`)))})}))}function r(e){const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=e,window.dispatchEvent(n),!n.defaultPrevented)throw e}return o.then(e=>{for(const n of e||[])n.status==="rejected"&&r(n.reason);return t().catch(r)})};function It(s){return!Number.isNaN(Number.parseInt(s))}const Wt={FieldId:It};var Lt=Y('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),xt=Y("<!> <!>",1);function Tt(s,t){it(t,!0);let a=j(t,"components",23,()=>[]),c=j(t,"data_0",3,null),o=j(t,"data_1",3,null),r=j(t,"data_2",3,null);ut(()=>t.stores.page.set(t.page)),lt(()=>{t.stores,t.page,t.constructors,a(),t.form,c(),o(),r(),t.stores.page.notify()});let e=q(!1),n=q(!1),k=q(null);Rt(()=>{const u=t.stores.page.subscribe(()=>{l(e)&&(C(n,!0),mt().then(()=>{C(k,document.title||"untitled page",!0)}))});return C(e,!0),u});const D=x(()=>t.constructors[2]);var i=xt(),m=b(i);{var h=u=>{const g=x(()=>t.constructors[0]);var E=O(),w=b(E);S(w,()=>l(g),(y,R)=>{T(R(y,{get data(){return c()},get form(){return t.form},get params(){return t.page.params},children:(A,Nt)=>{var U=O(),G=b(U);{var Z=p=>{const V=x(()=>t.constructors[1]);var I=O(),F=b(I);S(F,()=>l(V),(M,B)=>{T(B(M,{get data(){return o()},get form(){return t.form},get params(){return t.page.params},children:(L,jt)=>{var W=O(),J=b(W);S(J,()=>l(D),(K,Q)=>{T(Q(K,{get data(){return r()},get form(){return t.form},get params(){return t.page.params}}),$=>a()[2]=$,()=>a()?.[2])}),f(L,W)},$$slots:{default:!0}}),L=>a()[1]=L,()=>a()?.[1])}),f(p,I)},H=p=>{const V=x(()=>t.constructors[1]);var I=O(),F=b(I);S(F,()=>l(V),(M,B)=>{T(B(M,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),L=>a()[1]=L,()=>a()?.[1])}),f(p,I)};N(G,p=>{t.constructors[2]?p(Z):p(H,!1)})}f(A,U)},$$slots:{default:!0}}),A=>a()[0]=A,()=>a()?.[0])}),f(u,E)},d=u=>{const g=x(()=>t.constructors[0]);var E=O(),w=b(E);S(w,()=>l(g),(y,R)=>{T(R(y,{get data(){return c()},get form(){return t.form},get params(){return t.page.params}}),A=>a()[0]=A,()=>a()?.[0])}),f(u,E)};N(m,u=>{t.constructors[1]?u(h):u(d,!1)})}var v=dt(m,2);{var P=u=>{var g=Lt(),E=_t(g);{var w=y=>{var R=Pt();vt(()=>bt(R,l(k))),f(y,R)};N(E,y=>{l(n)&&y(w)})}ht(g),f(u,g)};N(v,u=>{l(e)&&u(P)})}f(s,i),ft()}const Xt=Ot(Tt),Yt=[()=>_(()=>import("../nodes/0.Bpyn17vy.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),()=>_(()=>import("../nodes/1.zAvY42iv.js"),__vite__mapDeps([5,1,2,6,7,8,9,10,11,12]),import.meta.url),()=>_(()=>import("../nodes/2.B3v9Uros.js"),__vite__mapDeps([13,1,2,3,4,14]),import.meta.url),()=>_(()=>import("../nodes/3.rm3kMfwl.js"),__vite__mapDeps([15,1,2,6,16]),import.meta.url),()=>_(()=>import("../nodes/4.DThprzVs.js"),__vite__mapDeps([17,1,2,18,11,10,12,19,8,3,4,20,21,14,22]),import.meta.url),()=>_(()=>import("../nodes/5.QeLDNF63.js"),__vite__mapDeps([23,1,2,7,8,24,4,25,20,10,11,12,26,3,18,27,19,21,14,22,28]),import.meta.url),()=>_(()=>import("../nodes/6.BjAi8SzL.js"),__vite__mapDeps([29,1,2,6,9,30,3,4,24,7,8,25,20,18,11,31,32]),import.meta.url),()=>_(()=>import("../nodes/7.DyXTg_vC.js"),__vite__mapDeps([33,1,2,6,3,4,8,30,24,7,25,20,18,11,31,26,27,19,21,34,35]),import.meta.url)],zt=[],Gt={"/":[3],"/cards":[6],"/(socket)/field/[fieldId=FieldId]":[4,[2]],"/(socket)/overworld":[5,[2]],"/play":[7]},z={handleError:(({error:s})=>{console.error(s)}),reroute:(()=>{}),transport:{}},St=Object.fromEntries(Object.entries(z.transport).map(([s,t])=>[s,t.decode])),Zt=Object.fromEntries(Object.entries(z.transport).map(([s,t])=>[s,t.encode])),Ht=!1,Jt=(s,t)=>St[s](t);export{Jt as decode,St as decoders,Gt as dictionary,Zt as encoders,Ht as hash,z as hooks,Wt as matchers,Yt as nodes,Xt as root,zt as server_loads};
+1
app/.svelte-kit/output/client/_app/immutable/entry/start.B5rkkVvb.js
··· 1 + import{l as o,a as r}from"../chunks/BXN2zbQS.js";export{o as load_css,r as start};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/0.Bpyn17vy.js
··· 1 + import{c as nv,a as av}from"../chunks/DTjTDYf3.js";import{f as iv}from"../chunks/Cy0nnqwK.js";import{s as ov}from"../chunks/VCyrUZ76.js";const uv=!1,vv=!0,As=Object.freeze(Object.defineProperty({__proto__:null,prerender:vv,ssr:uv},Symbol.toStringTag,{value:"Module"}));var Wn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},zr,Hn;function H(){return Hn||(Hn=1,zr=function(r){try{return!!r()}catch{return!0}}),zr}var Jr,Yn;function Nr(){if(Yn)return Jr;Yn=1;var r=H();return Jr=!r(function(){var e=(function(){}).bind();return typeof e!="function"||e.hasOwnProperty("prototype")}),Jr}var Qr,zn;function W(){if(zn)return Qr;zn=1;var r=Nr(),e=Function.prototype,t=e.call,n=r&&e.bind.bind(t,t);return Qr=r?n:function(a){return function(){return t.apply(a,arguments)}},Qr}var Xr,Jn;function xr(){if(Jn)return Xr;Jn=1;var r=W(),e=r({}.toString),t=r("".slice);return Xr=function(n){return t(e(n),8,-1)},Xr}var Zr,Qn;function sv(){if(Qn)return Zr;Qn=1;var r=W(),e=H(),t=xr(),n=Object,a=r("".split);return Zr=e(function(){return!n("z").propertyIsEnumerable(0)})?function(o){return t(o)==="String"?a(o,""):n(o)}:n,Zr}var re,Xn;function Dr(){return Xn||(Xn=1,re=function(r){return r==null}),re}var ee,Zn;function Fr(){if(Zn)return ee;Zn=1;var r=Dr(),e=TypeError;return ee=function(t){if(r(t))throw new e("Can't call method on "+t);return t},ee}var te,ra;function gr(){if(ra)return te;ra=1;var r=sv(),e=Fr();return te=function(t){return r(e(t))},te}var mr,ea;function M(){if(ea)return mr;ea=1;var r=function(e){return e&&e.Math===Math&&e};return mr=r(typeof globalThis=="object"&&globalThis)||r(typeof window=="object"&&window)||r(typeof self=="object"&&self)||r(typeof Wn=="object"&&Wn)||r(typeof mr=="object"&&mr)||(function(){return this})()||Function("return this")(),mr}var ne={exports:{}},ae,ta;function k(){return ta||(ta=1,ae=!1),ae}var ie,na;function En(){if(na)return ie;na=1;var r=M(),e=Object.defineProperty;return ie=function(t,n){try{e(r,t,{value:n,configurable:!0,writable:!0})}catch{r[t]=n}return n},ie}var aa;function Mr(){if(aa)return ne.exports;aa=1;var r=k(),e=M(),t=En(),n="__core-js_shared__",a=ne.exports=e[n]||t(n,{});return(a.versions||(a.versions=[])).push({version:"3.38.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"}),ne.exports}var oe,ia;function Ou(){if(ia)return oe;ia=1;var r=Mr();return oe=function(e,t){return r[e]||(r[e]=t||{})},oe}var ue,oa;function Tn(){if(oa)return ue;oa=1;var r=Fr(),e=Object;return ue=function(t){return e(r(t))},ue}var ve,ua;function Q(){if(ua)return ve;ua=1;var r=W(),e=Tn(),t=r({}.hasOwnProperty);return ve=Object.hasOwn||function(a,o){return t(e(a),o)},ve}var se,va;function Su(){if(va)return se;va=1;var r=W(),e=0,t=Math.random(),n=r(1 .toString);return se=function(a){return"Symbol("+(a===void 0?"":a)+")_"+n(++e+t,36)},se}var ce,sa;function Pr(){if(sa)return ce;sa=1;var r=M(),e=r.navigator,t=e&&e.userAgent;return ce=t?String(t):"",ce}var fe,ca;function mu(){if(ca)return fe;ca=1;var r=M(),e=Pr(),t=r.process,n=r.Deno,a=t&&t.versions||n&&n.version,o=a&&a.v8,i,s;return o&&(i=o.split("."),s=i[0]>0&&i[0]<4?1:+(i[0]+i[1])),!s&&e&&(i=e.match(/Edge\/(\d+)/),(!i||i[1]>=74)&&(i=e.match(/Chrome\/(\d+)/),i&&(s=+i[1]))),fe=s,fe}var le,fa;function gu(){if(fa)return le;fa=1;var r=mu(),e=H(),t=M(),n=t.String;return le=!!Object.getOwnPropertySymbols&&!e(function(){var a=Symbol("symbol detection");return!n(a)||!(Object(a)instanceof Symbol)||!Symbol.sham&&r&&r<41}),le}var de,la;function Pu(){if(la)return de;la=1;var r=gu();return de=r&&!Symbol.sham&&typeof Symbol.iterator=="symbol",de}var he,da;function $(){if(da)return he;da=1;var r=M(),e=Ou(),t=Q(),n=Su(),a=gu(),o=Pu(),i=r.Symbol,s=e("wks"),v=o?i.for||i:i&&i.withoutSetter||n;return he=function(u){return t(s,u)||(s[u]=a&&t(i,u)?i[u]:v("Symbol."+u)),s[u]},he}var ye,ha;function U(){if(ha)return ye;ha=1;var r=typeof document=="object"&&document.all;return ye=typeof r>"u"&&r!==void 0?function(e){return typeof e=="function"||e===r}:function(e){return typeof e=="function"},ye}var pe,ya;function er(){if(ya)return pe;ya=1;var r=U();return pe=function(e){return typeof e=="object"?e!==null:r(e)},pe}var Ie,pa;function A(){if(pa)return Ie;pa=1;var r=er(),e=String,t=TypeError;return Ie=function(n){if(r(n))return n;throw new t(e(n)+" is not an object")},Ie}var Re={},be,Ia;function Y(){if(Ia)return be;Ia=1;var r=H();return be=!r(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),be}var Oe,Ra;function Eu(){if(Ra)return Oe;Ra=1;var r=Y(),e=H();return Oe=r&&e(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),Oe}var Se={},me,ba;function Br(){if(ba)return me;ba=1;var r=M(),e=er(),t=r.document,n=e(t)&&e(t.createElement);return me=function(a){return n?t.createElement(a):{}},me}var ge,Oa;function Tu(){if(Oa)return ge;Oa=1;var r=Y(),e=H(),t=Br();return ge=!r&&!e(function(){return Object.defineProperty(t("div"),"a",{get:function(){return 7}}).a!==7}),ge}var Pe,Sa;function B(){if(Sa)return Pe;Sa=1;var r=Nr(),e=Function.prototype.call;return Pe=r?e.bind(e):function(){return e.apply(e,arguments)},Pe}var Ee,ma;function tr(){if(ma)return Ee;ma=1;var r=M(),e=U(),t=function(n){return e(n)?n:void 0};return Ee=function(n,a){return arguments.length<2?t(r[n]):r[n]&&r[n][a]},Ee}var Te,ga;function Ur(){if(ga)return Te;ga=1;var r=W();return Te=r({}.isPrototypeOf),Te}var _e,Pa;function _u(){if(Pa)return _e;Pa=1;var r=tr(),e=U(),t=Ur(),n=Pu(),a=Object;return _e=n?function(o){return typeof o=="symbol"}:function(o){var i=r("Symbol");return e(i)&&t(i.prototype,a(o))},_e}var qe,Ea;function Gr(){if(Ea)return qe;Ea=1;var r=String;return qe=function(e){try{return r(e)}catch{return"Object"}},qe}var Ce,Ta;function V(){if(Ta)return Ce;Ta=1;var r=U(),e=Gr(),t=TypeError;return Ce=function(n){if(r(n))return n;throw new t(e(n)+" is not a function")},Ce}var we,_a;function vr(){if(_a)return we;_a=1;var r=V(),e=Dr();return we=function(t,n){var a=t[n];return e(a)?void 0:r(a)},we}var je,qa;function cv(){if(qa)return je;qa=1;var r=B(),e=U(),t=er(),n=TypeError;return je=function(a,o){var i,s;if(o==="string"&&e(i=a.toString)&&!t(s=r(i,a))||e(i=a.valueOf)&&!t(s=r(i,a))||o!=="string"&&e(i=a.toString)&&!t(s=r(i,a)))return s;throw new n("Can't convert object to primitive value")},je}var Ae,Ca;function fv(){if(Ca)return Ae;Ca=1;var r=B(),e=er(),t=_u(),n=vr(),a=cv(),o=$(),i=TypeError,s=o("toPrimitive");return Ae=function(v,u){if(!e(v)||t(v))return v;var c=n(v,s),f;if(c){if(u===void 0&&(u="default"),f=r(c,v,u),!e(f)||t(f))return f;throw new i("Can't convert object to primitive value")}return u===void 0&&(u="number"),a(v,u)},Ae}var Ne,wa;function qu(){if(wa)return Ne;wa=1;var r=fv(),e=_u();return Ne=function(t){var n=r(t,"string");return e(n)?n:n+""},Ne}var ja;function nr(){if(ja)return Se;ja=1;var r=Y(),e=Tu(),t=Eu(),n=A(),a=qu(),o=TypeError,i=Object.defineProperty,s=Object.getOwnPropertyDescriptor,v="enumerable",u="configurable",c="writable";return Se.f=r?t?function(l,d,h){if(n(l),d=a(d),n(h),typeof l=="function"&&d==="prototype"&&"value"in h&&c in h&&!h[c]){var p=s(l,d);p&&p[c]&&(l[d]=h.value,h={configurable:u in h?h[u]:p[u],enumerable:v in h?h[v]:p[v],writable:!1})}return i(l,d,h)}:i:function(l,d,h){if(n(l),d=a(d),n(h),e)try{return i(l,d,h)}catch{}if("get"in h||"set"in h)throw new o("Accessors not supported");return"value"in h&&(l[d]=h.value),l},Se}var xe,Aa;function lv(){if(Aa)return xe;Aa=1;var r=Math.ceil,e=Math.floor;return xe=Math.trunc||function(n){var a=+n;return(a>0?e:r)(a)},xe}var De,Na;function Lr(){if(Na)return De;Na=1;var r=lv();return De=function(e){var t=+e;return t!==t||t===0?0:r(t)},De}var Fe,xa;function dv(){if(xa)return Fe;xa=1;var r=Lr(),e=Math.max,t=Math.min;return Fe=function(n,a){var o=r(n);return o<0?e(o+a,0):t(o,a)},Fe}var Me,Da;function hv(){if(Da)return Me;Da=1;var r=Lr(),e=Math.min;return Me=function(t){var n=r(t);return n>0?e(n,9007199254740991):0},Me}var Be,Fa;function Cu(){if(Fa)return Be;Fa=1;var r=hv();return Be=function(e){return r(e.length)},Be}var Ue,Ma;function yv(){if(Ma)return Ue;Ma=1;var r=gr(),e=dv(),t=Cu(),n=function(a){return function(o,i,s){var v=r(o),u=t(v);if(u===0)return!a&&-1;var c=e(s,u),f;if(a&&i!==i){for(;u>c;)if(f=v[c++],f!==f)return!0}else for(;u>c;c++)if((a||c in v)&&v[c]===i)return a||c||0;return!a&&-1}};return Ue={includes:n(!0),indexOf:n(!1)},Ue}var Ge,Ba;function _n(){return Ba||(Ba=1,Ge={}),Ge}var Le,Ua;function wu(){if(Ua)return Le;Ua=1;var r=W(),e=Q(),t=gr(),n=yv().indexOf,a=_n(),o=r([].push);return Le=function(i,s){var v=t(i),u=0,c=[],f;for(f in v)!e(a,f)&&e(v,f)&&o(c,f);for(;s.length>u;)e(v,f=s[u++])&&(~n(c,f)||o(c,f));return c},Le}var $e,Ga;function qn(){return Ga||(Ga=1,$e=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]),$e}var Ke,La;function pv(){if(La)return Ke;La=1;var r=wu(),e=qn();return Ke=Object.keys||function(n){return r(n,e)},Ke}var $a;function Iv(){if($a)return Re;$a=1;var r=Y(),e=Eu(),t=nr(),n=A(),a=gr(),o=pv();return Re.f=r&&!e?Object.defineProperties:function(s,v){n(s);for(var u=a(v),c=o(v),f=c.length,l=0,d;f>l;)t.f(s,d=c[l++],u[d]);return s},Re}var ke,Ka;function ju(){if(Ka)return ke;Ka=1;var r=tr();return ke=r("document","documentElement"),ke}var Ve,ka;function Cn(){if(ka)return Ve;ka=1;var r=Ou(),e=Su(),t=r("keys");return Ve=function(n){return t[n]||(t[n]=e(n))},Ve}var We,Va;function sr(){if(Va)return We;Va=1;var r=A(),e=Iv(),t=qn(),n=_n(),a=ju(),o=Br(),i=Cn(),s=">",v="<",u="prototype",c="script",f=i("IE_PROTO"),l=function(){},d=function(y){return v+c+s+y+v+"/"+c+s},h=function(y){y.write(d("")),y.close();var I=y.parentWindow.Object;return y=null,I},p=function(){var y=o("iframe"),I="java"+c+":",R;return y.style.display="none",a.appendChild(y),y.src=String(I),R=y.contentWindow.document,R.open(),R.write(d("document.F=Object")),R.close(),R.F},O,S=function(){try{O=new ActiveXObject("htmlfile")}catch{}S=typeof document<"u"?document.domain&&O?h(O):p():h(O);for(var y=t.length;y--;)delete S[u][t[y]];return S()};return n[f]=!0,We=Object.create||function(I,R){var m;return I!==null?(l[u]=r(I),m=new l,l[u]=null,m[f]=I):m=S(),R===void 0?m:e.f(m,R)},We}var He,Wa;function Rv(){if(Wa)return He;Wa=1;var r=$(),e=sr(),t=nr().f,n=r("unscopables"),a=Array.prototype;return a[n]===void 0&&t(a,n,{configurable:!0,value:e(null)}),He=function(o){a[n][o]=!0},He}var Ye,Ha;function Er(){return Ha||(Ha=1,Ye={}),Ye}var ze,Ya;function bv(){if(Ya)return ze;Ya=1;var r=M(),e=U(),t=r.WeakMap;return ze=e(t)&&/native code/.test(String(t)),ze}var Je,za;function $r(){return za||(za=1,Je=function(r,e){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:e}}),Je}var Qe,Ja;function Ir(){if(Ja)return Qe;Ja=1;var r=Y(),e=nr(),t=$r();return Qe=r?function(n,a,o){return e.f(n,a,t(1,o))}:function(n,a,o){return n[a]=o,n},Qe}var Xe,Qa;function cr(){if(Qa)return Xe;Qa=1;var r=bv(),e=M(),t=er(),n=Ir(),a=Q(),o=Mr(),i=Cn(),s=_n(),v="Object already initialized",u=e.TypeError,c=e.WeakMap,f,l,d,h=function(y){return d(y)?l(y):f(y,{})},p=function(y){return function(I){var R;if(!t(I)||(R=l(I)).type!==y)throw new u("Incompatible receiver, "+y+" required");return R}};if(r||o.state){var O=o.state||(o.state=new c);O.get=O.get,O.has=O.has,O.set=O.set,f=function(y,I){if(O.has(y))throw new u(v);return I.facade=y,O.set(y,I),I},l=function(y){return O.get(y)||{}},d=function(y){return O.has(y)}}else{var S=i("state");s[S]=!0,f=function(y,I){if(a(y,S))throw new u(v);return I.facade=y,n(y,S,I),I},l=function(y){return a(y,S)?y[S]:{}},d=function(y){return a(y,S)}}return Xe={set:f,get:l,has:d,enforce:h,getterFor:p},Xe}var Ze={},rt={},Xa;function Ov(){if(Xa)return rt;Xa=1;var r={}.propertyIsEnumerable,e=Object.getOwnPropertyDescriptor,t=e&&!r.call({1:2},1);return rt.f=t?function(a){var o=e(this,a);return!!o&&o.enumerable}:r,rt}var Za;function Au(){if(Za)return Ze;Za=1;var r=Y(),e=B(),t=Ov(),n=$r(),a=gr(),o=qu(),i=Q(),s=Tu(),v=Object.getOwnPropertyDescriptor;return Ze.f=r?v:function(c,f){if(c=a(c),f=o(f),s)try{return v(c,f)}catch{}if(i(c,f))return n(!e(t.f,c,f),c[f])},Ze}var et={exports:{}},tt,ri;function Nu(){if(ri)return tt;ri=1;var r=Y(),e=Q(),t=Function.prototype,n=r&&Object.getOwnPropertyDescriptor,a=e(t,"name"),o=a&&(function(){}).name==="something",i=a&&(!r||r&&n(t,"name").configurable);return tt={EXISTS:a,PROPER:o,CONFIGURABLE:i},tt}var nt,ei;function wn(){if(ei)return nt;ei=1;var r=W(),e=U(),t=Mr(),n=r(Function.toString);return e(t.inspectSource)||(t.inspectSource=function(a){return n(a)}),nt=t.inspectSource,nt}var ti;function xu(){if(ti)return et.exports;ti=1;var r=W(),e=H(),t=U(),n=Q(),a=Y(),o=Nu().CONFIGURABLE,i=wn(),s=cr(),v=s.enforce,u=s.get,c=String,f=Object.defineProperty,l=r("".slice),d=r("".replace),h=r([].join),p=a&&!e(function(){return f(function(){},"length",{value:8}).length!==8}),O=String(String).split("String"),S=et.exports=function(y,I,R){l(c(I),0,7)==="Symbol("&&(I="["+d(c(I),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),R&&R.getter&&(I="get "+I),R&&R.setter&&(I="set "+I),(!n(y,"name")||o&&y.name!==I)&&(a?f(y,"name",{value:I,configurable:!0}):y.name=I),p&&R&&n(R,"arity")&&y.length!==R.arity&&f(y,"length",{value:R.arity});try{R&&n(R,"constructor")&&R.constructor?a&&f(y,"prototype",{writable:!1}):y.prototype&&(y.prototype=void 0)}catch{}var m=v(y);return n(m,"source")||(m.source=h(O,typeof I=="string"?I:"")),y};return Function.prototype.toString=S(function(){return t(this)&&u(this).source||i(this)},"toString"),et.exports}var at,ni;function ar(){if(ni)return at;ni=1;var r=U(),e=nr(),t=xu(),n=En();return at=function(a,o,i,s){s||(s={});var v=s.enumerable,u=s.name!==void 0?s.name:o;if(r(i)&&t(i,u,s),s.global)v?a[o]=i:n(o,i);else{try{s.unsafe?a[o]&&(v=!0):delete a[o]}catch{}v?a[o]=i:e.f(a,o,{value:i,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return a},at}var it={},ai;function Sv(){if(ai)return it;ai=1;var r=wu(),e=qn(),t=e.concat("length","prototype");return it.f=Object.getOwnPropertyNames||function(a){return r(a,t)},it}var ot={},ii;function mv(){return ii||(ii=1,ot.f=Object.getOwnPropertySymbols),ot}var ut,oi;function gv(){if(oi)return ut;oi=1;var r=tr(),e=W(),t=Sv(),n=mv(),a=A(),o=e([].concat);return ut=r("Reflect","ownKeys")||function(s){var v=t.f(a(s)),u=n.f;return u?o(v,u(s)):v},ut}var vt,ui;function Pv(){if(ui)return vt;ui=1;var r=Q(),e=gv(),t=Au(),n=nr();return vt=function(a,o,i){for(var s=e(o),v=n.f,u=t.f,c=0;c<s.length;c++){var f=s[c];!r(a,f)&&!(i&&r(i,f))&&v(a,f,u(o,f))}},vt}var st,vi;function Du(){if(vi)return st;vi=1;var r=H(),e=U(),t=/#|\.prototype\./,n=function(v,u){var c=o[a(v)];return c===s?!0:c===i?!1:e(u)?r(u):!!u},a=n.normalize=function(v){return String(v).replace(t,".").toLowerCase()},o=n.data={},i=n.NATIVE="N",s=n.POLYFILL="P";return st=n,st}var ct,si;function G(){if(si)return ct;si=1;var r=M(),e=Au().f,t=Ir(),n=ar(),a=En(),o=Pv(),i=Du();return ct=function(s,v){var u=s.target,c=s.global,f=s.stat,l,d,h,p,O,S;if(c?d=r:f?d=r[u]||a(u,{}):d=r[u]&&r[u].prototype,d)for(h in v){if(O=v[h],s.dontCallGetSet?(S=e(d,h),p=S&&S.value):p=d[h],l=i(c?h:u+(f?".":"#")+h,s.forced),!l&&p!==void 0){if(typeof O==typeof p)continue;o(O,p)}(s.sham||p&&p.sham)&&t(O,"sham",!0),n(d,h,O,s)}},ct}var ft,ci;function Ev(){if(ci)return ft;ci=1;var r=H();return ft=!r(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),ft}var lt,fi;function Kr(){if(fi)return lt;fi=1;var r=Q(),e=U(),t=Tn(),n=Cn(),a=Ev(),o=n("IE_PROTO"),i=Object,s=i.prototype;return lt=a?i.getPrototypeOf:function(v){var u=t(v);if(r(u,o))return u[o];var c=u.constructor;return e(c)&&u instanceof c?c.prototype:u instanceof i?s:null},lt}var dt,li;function Rr(){if(li)return dt;li=1;var r=H(),e=U(),t=er(),n=sr(),a=Kr(),o=ar(),i=$(),s=k(),v=i("iterator"),u=!1,c,f,l;[].keys&&(l=[].keys(),"next"in l?(f=a(a(l)),f!==Object.prototype&&(c=f)):u=!0);var d=!t(c)||r(function(){var h={};return c[v].call(h)!==h});return d?c={}:s&&(c=n(c)),e(c[v])||o(c,v,function(){return this}),dt={IteratorPrototype:c,BUGGY_SAFARI_ITERATORS:u},dt}var ht,di;function kr(){if(di)return ht;di=1;var r=nr().f,e=Q(),t=$(),n=t("toStringTag");return ht=function(a,o,i){a&&!i&&(a=a.prototype),a&&!e(a,n)&&r(a,n,{configurable:!0,value:o})},ht}var yt,hi;function Tv(){if(hi)return yt;hi=1;var r=Rr().IteratorPrototype,e=sr(),t=$r(),n=kr(),a=Er(),o=function(){return this};return yt=function(i,s,v,u){var c=s+" Iterator";return i.prototype=e(r,{next:t(+!u,v)}),n(i,c,!1,!0),a[c]=o,i},yt}var pt,yi;function _v(){if(yi)return pt;yi=1;var r=W(),e=V();return pt=function(t,n,a){try{return r(e(Object.getOwnPropertyDescriptor(t,n)[a]))}catch{}},pt}var It,pi;function qv(){if(pi)return It;pi=1;var r=er();return It=function(e){return r(e)||e===null},It}var Rt,Ii;function Cv(){if(Ii)return Rt;Ii=1;var r=qv(),e=String,t=TypeError;return Rt=function(n){if(r(n))return n;throw new t("Can't set "+e(n)+" as a prototype")},Rt}var bt,Ri;function Fu(){if(Ri)return bt;Ri=1;var r=_v(),e=er(),t=Fr(),n=Cv();return bt=Object.setPrototypeOf||("__proto__"in{}?(function(){var a=!1,o={},i;try{i=r(Object.prototype,"__proto__","set"),i(o,[]),a=o instanceof Array}catch{}return function(v,u){return t(v),n(u),e(v)&&(a?i(v,u):v.__proto__=u),v}})():void 0),bt}var Ot,bi;function Mu(){if(bi)return Ot;bi=1;var r=G(),e=B(),t=k(),n=Nu(),a=U(),o=Tv(),i=Kr(),s=Fu(),v=kr(),u=Ir(),c=ar(),f=$(),l=Er(),d=Rr(),h=n.PROPER,p=n.CONFIGURABLE,O=d.IteratorPrototype,S=d.BUGGY_SAFARI_ITERATORS,y=f("iterator"),I="keys",R="values",m="entries",g=function(){return this};return Ot=function(q,D,F,T,C,L,N){o(F,D,T);var P=function(J){if(J===C&&X)return X;if(!S&&J&&J in K)return K[J];switch(J){case I:return function(){return new F(this,J)};case R:return function(){return new F(this,J)};case m:return function(){return new F(this,J)}}return function(){return new F(this)}},_=D+" Iterator",ir=!1,K=q.prototype,Z=K[y]||K["@@iterator"]||C&&K[C],X=!S&&Z||P(C),wr=D==="Array"&&K.entries||Z,rr,or,fr;if(wr&&(rr=i(wr.call(new q)),rr!==Object.prototype&&rr.next&&(!t&&i(rr)!==O&&(s?s(rr,O):a(rr[y])||c(rr,y,g)),v(rr,_,!0,!0),t&&(l[_]=g))),h&&C===R&&Z&&Z.name!==R&&(!t&&p?u(K,"name",R):(ir=!0,X=function(){return e(Z,this)})),C)if(or={values:P(R),keys:L?X:P(I),entries:P(m)},N)for(fr in or)(S||ir||!(fr in K))&&c(K,fr,or[fr]);else r({target:D,proto:!0,forced:S||ir},or);return(!t||N)&&K[y]!==X&&c(K,y,X,{name:C}),l[D]=X,or},Ot}var St,Oi;function Tr(){return Oi||(Oi=1,St=function(r,e){return{value:r,done:e}}),St}var mt,Si;function Bu(){if(Si)return mt;Si=1;var r=gr(),e=Rv(),t=Er(),n=cr(),a=nr().f,o=Mu(),i=Tr(),s=k(),v=Y(),u="Array Iterator",c=n.set,f=n.getterFor(u);mt=o(Array,"Array",function(d,h){c(this,{type:u,target:r(d),index:0,kind:h})},function(){var d=f(this),h=d.target,p=d.index++;if(!h||p>=h.length)return d.target=null,i(void 0,!0);switch(d.kind){case"keys":return i(p,!1);case"values":return i(h[p],!1)}return i([p,h[p]],!1)},"values");var l=t.Arguments=t.Array;if(e("keys"),e("values"),e("entries"),!s&&v&&l.name!=="values")try{a(l,"name",{value:"values"})}catch{}return mt}var mi={},gt,gi;function jn(){if(gi)return gt;gi=1;var r=$(),e=r("toStringTag"),t={};return t[e]="z",gt=String(t)==="[object z]",gt}var Pt,Pi;function Vr(){if(Pi)return Pt;Pi=1;var r=jn(),e=U(),t=xr(),n=$(),a=n("toStringTag"),o=Object,i=t((function(){return arguments})())==="Arguments",s=function(v,u){try{return v[u]}catch{}};return Pt=r?t:function(v){var u,c,f;return v===void 0?"Undefined":v===null?"Null":typeof(c=s(u=o(v),a))=="string"?c:i?t(u):(f=t(u))==="Object"&&e(u.callee)?"Arguments":f},Pt}var Et,Ei;function wv(){if(Ei)return Et;Ei=1;var r=jn(),e=Vr();return Et=r?{}.toString:function(){return"[object "+e(this)+"]"},Et}var Ti;function jv(){if(Ti)return mi;Ti=1;var r=jn(),e=ar(),t=wv();return r||e(Object.prototype,"toString",t,{unsafe:!0}),mi}var _i={},qi={},Tt,Ci;function Uu(){if(Ci)return Tt;Ci=1;var r=M(),e=Pr(),t=xr(),n=function(a){return e.slice(0,a.length)===a};return Tt=(function(){return n("Bun/")?"BUN":n("Cloudflare-Workers")?"CLOUDFLARE":n("Deno/")?"DENO":n("Node.js/")?"NODE":r.Bun&&typeof Bun.version=="string"?"BUN":r.Deno&&typeof Deno.version=="object"?"DENO":t(r.process)==="process"?"NODE":r.window&&r.document?"BROWSER":"REST"})(),Tt}var _t,wi;function An(){if(wi)return _t;wi=1;var r=Uu();return _t=r==="NODE",_t}var qt,ji;function Gu(){if(ji)return qt;ji=1;var r=xu(),e=nr();return qt=function(t,n,a){return a.get&&r(a.get,n,{getter:!0}),a.set&&r(a.set,n,{setter:!0}),e.f(t,n,a)},qt}var Ct,Ai;function Av(){if(Ai)return Ct;Ai=1;var r=tr(),e=Gu(),t=$(),n=Y(),a=t("species");return Ct=function(o){var i=r(o);n&&i&&!i[a]&&e(i,a,{configurable:!0,get:function(){return this}})},Ct}var wt,Ni;function Lu(){if(Ni)return wt;Ni=1;var r=Ur(),e=TypeError;return wt=function(t,n){if(r(n,t))return t;throw new e("Incorrect invocation")},wt}var jt,xi;function Nv(){if(xi)return jt;xi=1;var r=W(),e=H(),t=U(),n=Vr(),a=tr(),o=wn(),i=function(){},s=a("Reflect","construct"),v=/^\s*(?:class|function)\b/,u=r(v.exec),c=!v.test(i),f=function(h){if(!t(h))return!1;try{return s(i,[],h),!0}catch{return!1}},l=function(h){if(!t(h))return!1;switch(n(h)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return c||!!u(v,o(h))}catch{return!0}};return l.sham=!0,jt=!s||e(function(){var d;return f(f.call)||!f(Object)||!f(function(){d=!0})||d})?l:f,jt}var At,Di;function xv(){if(Di)return At;Di=1;var r=Nv(),e=Gr(),t=TypeError;return At=function(n){if(r(n))return n;throw new t(e(n)+" is not a constructor")},At}var Nt,Fi;function Dv(){if(Fi)return Nt;Fi=1;var r=A(),e=xv(),t=Dr(),n=$(),a=n("species");return Nt=function(o,i){var s=r(o).constructor,v;return s===void 0||t(v=r(s)[a])?i:e(v)},Nt}var xt,Mi;function Fv(){if(Mi)return xt;Mi=1;var r=Nr(),e=Function.prototype,t=e.apply,n=e.call;return xt=typeof Reflect=="object"&&Reflect.apply||(r?n.bind(t):function(){return n.apply(t,arguments)}),xt}var Dt,Bi;function Mv(){if(Bi)return Dt;Bi=1;var r=xr(),e=W();return Dt=function(t){if(r(t)==="Function")return e(t)},Dt}var Ft,Ui;function Nn(){if(Ui)return Ft;Ui=1;var r=Mv(),e=V(),t=Nr(),n=r(r.bind);return Ft=function(a,o){return e(a),o===void 0?a:t?n(a,o):function(){return a.apply(o,arguments)}},Ft}var Mt,Gi;function Bv(){if(Gi)return Mt;Gi=1;var r=W();return Mt=r([].slice),Mt}var Bt,Li;function Uv(){if(Li)return Bt;Li=1;var r=TypeError;return Bt=function(e,t){if(e<t)throw new r("Not enough arguments");return e},Bt}var Ut,$i;function $u(){if($i)return Ut;$i=1;var r=Pr();return Ut=/(?:ipad|iphone|ipod).*applewebkit/i.test(r),Ut}var Gt,Ki;function Ku(){if(Ki)return Gt;Ki=1;var r=M(),e=Fv(),t=Nn(),n=U(),a=Q(),o=H(),i=ju(),s=Bv(),v=Br(),u=Uv(),c=$u(),f=An(),l=r.setImmediate,d=r.clearImmediate,h=r.process,p=r.Dispatch,O=r.Function,S=r.MessageChannel,y=r.String,I=0,R={},m="onreadystatechange",g,q,D,F;o(function(){g=r.location});var T=function(P){if(a(R,P)){var _=R[P];delete R[P],_()}},C=function(P){return function(){T(P)}},L=function(P){T(P.data)},N=function(P){r.postMessage(y(P),g.protocol+"//"+g.host)};return(!l||!d)&&(l=function(_){u(arguments.length,1);var ir=n(_)?_:O(_),K=s(arguments,1);return R[++I]=function(){e(ir,void 0,K)},q(I),I},d=function(_){delete R[_]},f?q=function(P){h.nextTick(C(P))}:p&&p.now?q=function(P){p.now(C(P))}:S&&!c?(D=new S,F=D.port2,D.port1.onmessage=L,q=t(F.postMessage,F)):r.addEventListener&&n(r.postMessage)&&!r.importScripts&&g&&g.protocol!=="file:"&&!o(N)?(q=N,r.addEventListener("message",L,!1)):m in v("script")?q=function(P){i.appendChild(v("script"))[m]=function(){i.removeChild(this),T(P)}}:q=function(P){setTimeout(C(P),0)}),Gt={set:l,clear:d},Gt}var Lt,ki;function Gv(){if(ki)return Lt;ki=1;var r=M(),e=Y(),t=Object.getOwnPropertyDescriptor;return Lt=function(n){if(!e)return r[n];var a=t(r,n);return a&&a.value},Lt}var $t,Vi;function ku(){if(Vi)return $t;Vi=1;var r=function(){this.head=null,this.tail=null};return r.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e){var t=this.head=e.next;return t===null&&(this.tail=null),e.item}}},$t=r,$t}var Kt,Wi;function Lv(){if(Wi)return Kt;Wi=1;var r=Pr();return Kt=/ipad|iphone|ipod/i.test(r)&&typeof Pebble<"u",Kt}var kt,Hi;function $v(){if(Hi)return kt;Hi=1;var r=Pr();return kt=/web0s(?!.*chrome)/i.test(r),kt}var Vt,Yi;function Kv(){if(Yi)return Vt;Yi=1;var r=M(),e=Gv(),t=Nn(),n=Ku().set,a=ku(),o=$u(),i=Lv(),s=$v(),v=An(),u=r.MutationObserver||r.WebKitMutationObserver,c=r.document,f=r.process,l=r.Promise,d=e("queueMicrotask"),h,p,O,S,y;if(!d){var I=new a,R=function(){var m,g;for(v&&(m=f.domain)&&m.exit();g=I.get();)try{g()}catch(q){throw I.head&&h(),q}m&&m.enter()};!o&&!v&&!s&&u&&c?(p=!0,O=c.createTextNode(""),new u(R).observe(O,{characterData:!0}),h=function(){O.data=p=!p}):!i&&l&&l.resolve?(S=l.resolve(void 0),S.constructor=l,y=t(S.then,S),h=function(){y(R)}):v?h=function(){f.nextTick(R)}:(n=t(n,r),h=function(){n(R)}),d=function(m){I.head||h(),I.add(m)}}return Vt=d,Vt}var Wt,zi;function kv(){return zi||(zi=1,Wt=function(r,e){try{arguments.length===1?console.error(r):console.error(r,e)}catch{}}),Wt}var Ht,Ji;function Wr(){return Ji||(Ji=1,Ht=function(r){try{return{error:!1,value:r()}}catch(e){return{error:!0,value:e}}}),Ht}var Yt,Qi;function _r(){if(Qi)return Yt;Qi=1;var r=M();return Yt=r.Promise,Yt}var zt,Xi;function qr(){if(Xi)return zt;Xi=1;var r=M(),e=_r(),t=U(),n=Du(),a=wn(),o=$(),i=Uu(),s=k(),v=mu(),u=e&&e.prototype,c=o("species"),f=!1,l=t(r.PromiseRejectionEvent),d=n("Promise",function(){var h=a(e),p=h!==String(e);if(!p&&v===66||s&&!(u.catch&&u.finally))return!0;if(!v||v<51||!/native code/.test(h)){var O=new e(function(I){I(1)}),S=function(I){I(function(){},function(){})},y=O.constructor={};if(y[c]=S,f=O.then(function(){})instanceof S,!f)return!0}return!p&&(i==="BROWSER"||i==="DENO")&&!l});return zt={CONSTRUCTOR:d,REJECTION_EVENT:l,SUBCLASSING:f},zt}var Jt={},Zi;function Cr(){if(Zi)return Jt;Zi=1;var r=V(),e=TypeError,t=function(n){var a,o;this.promise=new n(function(i,s){if(a!==void 0||o!==void 0)throw new e("Bad Promise constructor");a=i,o=s}),this.resolve=r(a),this.reject=r(o)};return Jt.f=function(n){return new t(n)},Jt}var ro;function Vv(){if(ro)return qi;ro=1;var r=G(),e=k(),t=An(),n=M(),a=B(),o=ar(),i=Fu(),s=kr(),v=Av(),u=V(),c=U(),f=er(),l=Lu(),d=Dv(),h=Ku().set,p=Kv(),O=kv(),S=Wr(),y=ku(),I=cr(),R=_r(),m=qr(),g=Cr(),q="Promise",D=m.CONSTRUCTOR,F=m.REJECTION_EVENT,T=m.SUBCLASSING,C=I.getterFor(q),L=I.set,N=R&&R.prototype,P=R,_=N,ir=n.TypeError,K=n.document,Z=n.process,X=g.f,wr=X,rr=!!(K&&K.createEvent&&n.dispatchEvent),or="unhandledrejection",fr="rejectionhandled",J=0,Sr=1,Xu=2,Hr=1,Fn=2,jr,Mn,Zu,Bn,Un=function(b){var E;return f(b)&&c(E=b.then)?E:!1},Gn=function(b,E){var w=E.value,j=E.state===Sr,x=j?b.ok:b.fail,hr=b.resolve,Ar=b.reject,yr=b.domain,pr,kn,Vn;try{x?(j||(E.rejection===Fn&&ev(E),E.rejection=Hr),x===!0?pr=w:(yr&&yr.enter(),pr=x(w),yr&&(yr.exit(),Vn=!0)),pr===b.promise?Ar(new ir("Promise-chain cycle")):(kn=Un(pr))?a(kn,pr,hr,Ar):hr(pr)):Ar(w)}catch(tv){yr&&!Vn&&yr.exit(),Ar(tv)}},Ln=function(b,E){b.notified||(b.notified=!0,p(function(){for(var w=b.reactions,j;j=w.get();)Gn(j,b);b.notified=!1,E&&!b.rejection&&rv(b)}))},$n=function(b,E,w){var j,x;rr?(j=K.createEvent("Event"),j.promise=E,j.reason=w,j.initEvent(b,!1,!0),n.dispatchEvent(j)):j={promise:E,reason:w},!F&&(x=n["on"+b])?x(j):b===or&&O("Unhandled promise rejection",w)},rv=function(b){a(h,n,function(){var E=b.facade,w=b.value,j=Kn(b),x;if(j&&(x=S(function(){t?Z.emit("unhandledRejection",w,E):$n(or,E,w)}),b.rejection=t||Kn(b)?Fn:Hr,x.error))throw x.value})},Kn=function(b){return b.rejection!==Hr&&!b.parent},ev=function(b){a(h,n,function(){var E=b.facade;t?Z.emit("rejectionHandled",E):$n(fr,E,b.value)})},lr=function(b,E,w){return function(j){b(E,j,w)}},dr=function(b,E,w){b.done||(b.done=!0,w&&(b=w),b.value=E,b.state=Xu,Ln(b,!0))},Yr=function(b,E,w){if(!b.done){b.done=!0,w&&(b=w);try{if(b.facade===E)throw new ir("Promise can't be resolved itself");var j=Un(E);j?p(function(){var x={done:!1};try{a(j,E,lr(Yr,x,b),lr(dr,x,b))}catch(hr){dr(x,hr,b)}}):(b.value=E,b.state=Sr,Ln(b,!1))}catch(x){dr({done:!1},x,b)}}};if(D&&(P=function(E){l(this,_),u(E),a(jr,this);var w=C(this);try{E(lr(Yr,w),lr(dr,w))}catch(j){dr(w,j)}},_=P.prototype,jr=function(E){L(this,{type:q,done:!1,notified:!1,parent:!1,reactions:new y,rejection:!1,state:J,value:null})},jr.prototype=o(_,"then",function(E,w){var j=C(this),x=X(d(this,P));return j.parent=!0,x.ok=c(E)?E:!0,x.fail=c(w)&&w,x.domain=t?Z.domain:void 0,j.state===J?j.reactions.add(x):p(function(){Gn(x,j)}),x.promise}),Mn=function(){var b=new jr,E=C(b);this.promise=b,this.resolve=lr(Yr,E),this.reject=lr(dr,E)},g.f=X=function(b){return b===P||b===Zu?new Mn(b):wr(b)},!e&&c(R)&&N!==Object.prototype)){Bn=N.then,T||o(N,"then",function(E,w){var j=this;return new P(function(x,hr){a(Bn,j,x,hr)}).then(E,w)},{unsafe:!0});try{delete N.constructor}catch{}i&&i(N,_)}return r({global:!0,constructor:!0,wrap:!0,forced:D},{Promise:P}),s(P,q,!1,!0),v(q),qi}var eo={},Qt,to;function Wv(){if(to)return Qt;to=1;var r=$(),e=Er(),t=r("iterator"),n=Array.prototype;return Qt=function(a){return a!==void 0&&(e.Array===a||n[t]===a)},Qt}var Xt,no;function xn(){if(no)return Xt;no=1;var r=Vr(),e=vr(),t=Dr(),n=Er(),a=$(),o=a("iterator");return Xt=function(i){if(!t(i))return e(i,o)||e(i,"@@iterator")||n[r(i)]},Xt}var Zt,ao;function Hv(){if(ao)return Zt;ao=1;var r=B(),e=V(),t=A(),n=Gr(),a=xn(),o=TypeError;return Zt=function(i,s){var v=arguments.length<2?a(i):s;if(e(v))return t(r(v,i));throw new o(n(i)+" is not iterable")},Zt}var rn,io;function br(){if(io)return rn;io=1;var r=B(),e=A(),t=vr();return rn=function(n,a,o){var i,s;e(n);try{if(i=t(n,"return"),!i){if(a==="throw")throw o;return o}i=r(i,n)}catch(v){s=!0,i=v}if(a==="throw")throw o;if(s)throw i;return e(i),o},rn}var en,oo;function ur(){if(oo)return en;oo=1;var r=Nn(),e=B(),t=A(),n=Gr(),a=Wv(),o=Cu(),i=Ur(),s=Hv(),v=xn(),u=br(),c=TypeError,f=function(d,h){this.stopped=d,this.result=h},l=f.prototype;return en=function(d,h,p){var O=p&&p.that,S=!!(p&&p.AS_ENTRIES),y=!!(p&&p.IS_RECORD),I=!!(p&&p.IS_ITERATOR),R=!!(p&&p.INTERRUPTED),m=r(h,O),g,q,D,F,T,C,L,N=function(_){return g&&u(g,"normal",_),new f(!0,_)},P=function(_){return S?(t(_),R?m(_[0],_[1],N):m(_[0],_[1])):R?m(_,N):m(_)};if(y)g=d.iterator;else if(I)g=d;else{if(q=v(d),!q)throw new c(n(d)+" is not iterable");if(a(q)){for(D=0,F=o(d);F>D;D++)if(T=P(d[D]),T&&i(l,T))return T;return new f(!1)}g=s(d,q)}for(C=y?d.next:g.next;!(L=e(C,g)).done;){try{T=P(L.value)}catch(_){u(g,"throw",_)}if(typeof T=="object"&&T&&i(l,T))return T}return new f(!1)},en}var tn,uo;function Yv(){if(uo)return tn;uo=1;var r=$(),e=r("iterator"),t=!1;try{var n=0,a={next:function(){return{done:!!n++}},return:function(){t=!0}};a[e]=function(){return this},Array.from(a,function(){throw 2})}catch{}return tn=function(o,i){try{if(!i&&!t)return!1}catch{return!1}var s=!1;try{var v={};v[e]=function(){return{next:function(){return{done:s=!0}}}},o(v)}catch{}return s},tn}var nn,vo;function Vu(){if(vo)return nn;vo=1;var r=_r(),e=Yv(),t=qr().CONSTRUCTOR;return nn=t||!e(function(n){r.all(n).then(void 0,function(){})}),nn}var so;function zv(){if(so)return eo;so=1;var r=G(),e=B(),t=V(),n=Cr(),a=Wr(),o=ur(),i=Vu();return r({target:"Promise",stat:!0,forced:i},{all:function(v){var u=this,c=n.f(u),f=c.resolve,l=c.reject,d=a(function(){var h=t(u.resolve),p=[],O=0,S=1;o(v,function(y){var I=O++,R=!1;S++,e(h,u,y).then(function(m){R||(R=!0,p[I]=m,--S||f(p))},l)}),--S||f(p)});return d.error&&l(d.value),c.promise}}),eo}var co={},fo;function Jv(){if(fo)return co;fo=1;var r=G(),e=k(),t=qr().CONSTRUCTOR,n=_r(),a=tr(),o=U(),i=ar(),s=n&&n.prototype;if(r({target:"Promise",proto:!0,forced:t,real:!0},{catch:function(u){return this.then(void 0,u)}}),!e&&o(n)){var v=a("Promise").prototype.catch;s.catch!==v&&i(s,"catch",v,{unsafe:!0})}return co}var lo={},ho;function Qv(){if(ho)return lo;ho=1;var r=G(),e=B(),t=V(),n=Cr(),a=Wr(),o=ur(),i=Vu();return r({target:"Promise",stat:!0,forced:i},{race:function(v){var u=this,c=n.f(u),f=c.reject,l=a(function(){var d=t(u.resolve);o(v,function(h){e(d,u,h).then(c.resolve,f)})});return l.error&&f(l.value),c.promise}}),lo}var yo={},po;function Xv(){if(po)return yo;po=1;var r=G(),e=Cr(),t=qr().CONSTRUCTOR;return r({target:"Promise",stat:!0,forced:t},{reject:function(a){var o=e.f(this),i=o.reject;return i(a),o.promise}}),yo}var Io={},an,Ro;function Zv(){if(Ro)return an;Ro=1;var r=A(),e=er(),t=Cr();return an=function(n,a){if(r(n),e(a)&&a.constructor===n)return a;var o=t.f(n),i=o.resolve;return i(a),o.promise},an}var bo;function rs(){if(bo)return Io;bo=1;var r=G(),e=tr(),t=k(),n=_r(),a=qr().CONSTRUCTOR,o=Zv(),i=e("Promise"),s=t&&!a;return r({target:"Promise",stat:!0,forced:t||a},{resolve:function(u){return o(s&&this===i?n:this,u)}}),Io}var Oo;function es(){return Oo||(Oo=1,Vv(),zv(),Jv(),Qv(),Xv(),rs()),_i}var So={},on,mo;function Wu(){if(mo)return on;mo=1;var r=Vr(),e=String;return on=function(t){if(r(t)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return e(t)},on}var un,go;function ts(){if(go)return un;go=1;var r=W(),e=Lr(),t=Wu(),n=Fr(),a=r("".charAt),o=r("".charCodeAt),i=r("".slice),s=function(v){return function(u,c){var f=t(n(u)),l=e(c),d=f.length,h,p;return l<0||l>=d?v?"":void 0:(h=o(f,l),h<55296||h>56319||l+1===d||(p=o(f,l+1))<56320||p>57343?v?a(f,l):h:v?i(f,l,l+2):(h-55296<<10)+(p-56320)+65536)}};return un={codeAt:s(!1),charAt:s(!0)},un}var Po;function ns(){if(Po)return So;Po=1;var r=ts().charAt,e=Wu(),t=cr(),n=Mu(),a=Tr(),o="String Iterator",i=t.set,s=t.getterFor(o);return n(String,"String",function(v){i(this,{type:o,string:e(v),index:0})},function(){var u=s(this),c=u.string,f=u.index,l;return f>=c.length?a(void 0,!0):(l=r(c,f),u.index+=l.length,a(l,!1))}),So}var Eo={},vn,To;function as(){if(To)return vn;To=1;var r=Y(),e=nr(),t=$r();return vn=function(n,a,o){r?e.f(n,a,t(0,o)):n[a]=o},vn}var _o;function is(){if(_o)return Eo;_o=1;var r=G(),e=M(),t=Lu(),n=A(),a=U(),o=Kr(),i=Gu(),s=as(),v=H(),u=Q(),c=$(),f=Rr().IteratorPrototype,l=Y(),d=k(),h="constructor",p="Iterator",O=c("toStringTag"),S=TypeError,y=e[p],I=d||!a(y)||y.prototype!==f||!v(function(){y({})}),R=function(){if(t(this,f),o(this)===f)throw new S("Abstract class Iterator not directly constructable")},m=function(g,q){l?i(f,g,{configurable:!0,get:function(){return q},set:function(D){if(n(this),this===f)throw new S("You can't redefine this property");u(this,g)?this[g]=D:s(this,g,D)}}):f[g]=q};return u(f,O)||m(O,p),(I||!u(f,h)||f[h]===Object)&&m(h,R),R.prototype=f,r({global:!0,constructor:!0,forced:I},{Iterator:R}),Eo}var qo={},Co;function os(){if(Co)return qo;Co=1;var r=B(),e=ar(),t=vr(),n=Q(),a=$(),o=Rr().IteratorPrototype,i=a("dispose");return n(o,i)||e(o,i,function(){var s=t(this,"return");s&&r(s,this)}),qo}var wo={},sn,jo;function z(){return jo||(jo=1,sn=function(r){return{iterator:r,next:r.next,done:!1}}),sn}var cn,Ao;function Hu(){if(Ao)return cn;Ao=1;var r=RangeError;return cn=function(e){if(e===e)return e;throw new r("NaN is not allowed")},cn}var fn,No;function Yu(){if(No)return fn;No=1;var r=Lr(),e=RangeError;return fn=function(t){var n=r(t);if(n<0)throw new e("The argument can't be less than 0");return n},fn}var ln,xo;function Dn(){if(xo)return ln;xo=1;var r=ar();return ln=function(e,t,n){for(var a in t)r(e,a,t[a],n);return e},ln}var dn,Do;function Or(){if(Do)return dn;Do=1;var r=B(),e=sr(),t=Ir(),n=Dn(),a=$(),o=cr(),i=vr(),s=Rr().IteratorPrototype,v=Tr(),u=br(),c=a("toStringTag"),f="IteratorHelper",l="WrapForValidIterator",d=o.set,h=function(S){var y=o.getterFor(S?l:f);return n(e(s),{next:function(){var R=y(this);if(S)return R.nextHandler();try{var m=R.done?void 0:R.nextHandler();return v(m,R.done)}catch(g){throw R.done=!0,g}},return:function(){var I=y(this),R=I.iterator;if(I.done=!0,S){var m=i(R,"return");return m?r(m,R):v(void 0,!0)}if(I.inner)try{u(I.inner.iterator,"normal")}catch(g){return u(R,"throw",g)}return u(R,"normal"),v(void 0,!0)}})},p=h(!0),O=h(!1);return t(O,c,"Iterator Helper"),dn=function(S,y){var I=function(m,g){g?(g.iterator=m.iterator,g.next=m.next):g=m,g.type=y?l:f,g.nextHandler=S,g.counter=0,g.done=!1,d(this,g)};return I.prototype=y?p:O,I},dn}var Fo;function us(){if(Fo)return wo;Fo=1;var r=G(),e=B(),t=A(),n=z(),a=Hu(),o=Yu(),i=Or(),s=k(),v=i(function(){for(var u=this.iterator,c=this.next,f,l;this.remaining;)if(this.remaining--,f=t(e(c,u)),l=this.done=!!f.done,l)return;if(f=t(e(c,u)),l=this.done=!!f.done,!l)return f.value});return r({target:"Iterator",proto:!0,real:!0,forced:s},{drop:function(c){t(this);var f=o(a(+c));return new v(n(this),{remaining:f})}}),wo}var Mo={},Bo;function vs(){if(Bo)return Mo;Bo=1;var r=G(),e=ur(),t=V(),n=A(),a=z();return r({target:"Iterator",proto:!0,real:!0},{every:function(i){n(this),t(i);var s=a(this),v=0;return!e(s,function(u,c){if(!i(u,v++))return c()},{IS_RECORD:!0,INTERRUPTED:!0}).stopped}}),Mo}var Uo={},hn,Go;function zu(){if(Go)return hn;Go=1;var r=A(),e=br();return hn=function(t,n,a,o){try{return o?n(r(a)[0],a[1]):n(a)}catch(i){e(t,"throw",i)}},hn}var Lo;function ss(){if(Lo)return Uo;Lo=1;var r=G(),e=B(),t=V(),n=A(),a=z(),o=Or(),i=zu(),s=k(),v=o(function(){for(var u=this.iterator,c=this.predicate,f=this.next,l,d,h;;){if(l=n(e(f,u)),d=this.done=!!l.done,d)return;if(h=l.value,i(u,c,[h,this.counter++],!0))return h}});return r({target:"Iterator",proto:!0,real:!0,forced:s},{filter:function(c){return n(this),t(c),new v(a(this),{predicate:c})}}),Uo}var $o={},Ko;function cs(){if(Ko)return $o;Ko=1;var r=G(),e=ur(),t=V(),n=A(),a=z();return r({target:"Iterator",proto:!0,real:!0},{find:function(i){n(this),t(i);var s=a(this),v=0;return e(s,function(u,c){if(i(u,v++))return c(u)},{IS_RECORD:!0,INTERRUPTED:!0}).result}}),$o}var ko={},yn,Vo;function Ju(){if(Vo)return yn;Vo=1;var r=B(),e=A(),t=z(),n=xn();return yn=function(a,o){(!o||typeof a!="string")&&e(a);var i=n(a);return t(e(i!==void 0?r(i,a):a))},yn}var Wo;function fs(){if(Wo)return ko;Wo=1;var r=G(),e=B(),t=V(),n=A(),a=z(),o=Ju(),i=Or(),s=br(),v=k(),u=i(function(){for(var c=this.iterator,f=this.mapper,l,d;;){if(d=this.inner)try{if(l=n(e(d.next,d.iterator)),!l.done)return l.value;this.inner=null}catch(h){s(c,"throw",h)}if(l=n(e(this.next,c)),this.done=!!l.done)return;try{this.inner=o(f(l.value,this.counter++),!1)}catch(h){s(c,"throw",h)}}});return r({target:"Iterator",proto:!0,real:!0,forced:v},{flatMap:function(f){return n(this),t(f),new u(a(this),{mapper:f,inner:null})}}),ko}var Ho={},Yo;function ls(){if(Yo)return Ho;Yo=1;var r=G(),e=ur(),t=V(),n=A(),a=z();return r({target:"Iterator",proto:!0,real:!0},{forEach:function(i){n(this),t(i);var s=a(this),v=0;e(s,function(u){i(u,v++)},{IS_RECORD:!0})}}),Ho}var zo={},Jo;function ds(){if(Jo)return zo;Jo=1;var r=G(),e=B(),t=Tn(),n=Ur(),a=Rr().IteratorPrototype,o=Or(),i=Ju(),s=k(),v=o(function(){return e(this.next,this.iterator)},!0);return r({target:"Iterator",stat:!0,forced:s},{from:function(c){var f=i(typeof c=="string"?t(c):c,!0);return n(a,f.iterator)?f.iterator:new v(f)}}),zo}var Qo={},pn,Xo;function hs(){if(Xo)return pn;Xo=1;var r=B(),e=V(),t=A(),n=z(),a=Or(),o=zu(),i=a(function(){var s=this.iterator,v=t(r(this.next,s)),u=this.done=!!v.done;if(!u)return o(s,this.mapper,[v.value,this.counter++],!0)});return pn=function(v){return t(this),e(v),new i(n(this),{mapper:v})},pn}var Zo;function ys(){if(Zo)return Qo;Zo=1;var r=G(),e=hs(),t=k();return r({target:"Iterator",proto:!0,real:!0,forced:t},{map:e}),Qo}var ru={},eu;function ps(){if(eu)return ru;eu=1;var r=G(),e=ur(),t=V(),n=A(),a=z(),o=TypeError;return r({target:"Iterator",proto:!0,real:!0},{reduce:function(s){n(this),t(s);var v=a(this),u=arguments.length<2,c=u?void 0:arguments[1],f=0;if(e(v,function(l){u?(u=!1,c=l):c=s(c,l,f),f++},{IS_RECORD:!0}),u)throw new o("Reduce of empty iterator with no initial value");return c}}),ru}var tu={},nu;function Is(){if(nu)return tu;nu=1;var r=G(),e=ur(),t=V(),n=A(),a=z();return r({target:"Iterator",proto:!0,real:!0},{some:function(i){n(this),t(i);var s=a(this),v=0;return e(s,function(u,c){if(i(u,v++))return c()},{IS_RECORD:!0,INTERRUPTED:!0}).stopped}}),tu}var au={},iu;function Rs(){if(iu)return au;iu=1;var r=G(),e=B(),t=A(),n=z(),a=Hu(),o=Yu(),i=Or(),s=br(),v=k(),u=i(function(){var c=this.iterator;if(!this.remaining--)return this.done=!0,s(c,"normal",void 0);var f=t(e(this.next,c)),l=this.done=!!f.done;if(!l)return f.value});return r({target:"Iterator",proto:!0,real:!0,forced:v},{take:function(f){t(this);var l=o(a(+f));return new u(n(this),{remaining:l})}}),au}var ou={},uu;function bs(){if(uu)return ou;uu=1;var r=G(),e=A(),t=ur(),n=z(),a=[].push;return r({target:"Iterator",proto:!0,real:!0},{toArray:function(){var i=[];return t(n(e(this)),a,{that:i,IS_RECORD:!0}),i}}),ou}var vu={},In,su;function Qu(){if(su)return In;su=1;var r=M(),e=Mr(),t=U(),n=sr(),a=Kr(),o=ar(),i=$(),s=k(),v="USE_FUNCTION_CONSTRUCTOR",u=i("asyncIterator"),c=r.AsyncIterator,f=e.AsyncIteratorPrototype,l,d;if(f)l=f;else if(t(c))l=c.prototype;else if(e[v]||r[v])try{d=a(a(a(Function("return async function*(){}()")()))),a(d)===Object.prototype&&(l=d)}catch{}return l?s&&(l=n(l)):l={},t(l[u])||o(l,u,function(){return this}),In=l,In}var Rn,cu;function Os(){if(cu)return Rn;cu=1;var r=B(),e=A(),t=sr(),n=vr(),a=Dn(),o=cr(),i=tr(),s=Qu(),v=Tr(),u=i("Promise"),c="AsyncFromSyncIterator",f=o.set,l=o.getterFor(c),d=function(p,O,S){var y=p.done;u.resolve(p.value).then(function(I){O(v(I,y))},S)},h=function(O){O.type=c,f(this,O)};return h.prototype=a(t(s),{next:function(){var O=l(this);return new u(function(S,y){var I=e(r(O.next,O.iterator));d(I,S,y)})},return:function(){var p=l(this).iterator;return new u(function(O,S){var y=n(p,"return");if(y===void 0)return O(v(void 0,!0));var I=e(r(y,p));d(I,O,S)})}}),Rn=h,Rn}var bn,fu;function Ss(){if(fu)return bn;fu=1;var r=B(),e=Wr(),t=A(),n=sr(),a=Ir(),o=Dn(),i=$(),s=cr(),v=tr(),u=vr(),c=Qu(),f=Tr(),l=br(),d=v("Promise"),h=i("toStringTag"),p="AsyncIteratorHelper",O="WrapForValidAsyncIterator",S=s.set,y=function(m){var g=!m,q=s.getterFor(m?O:p),D=function(F){var T=e(function(){return q(F)}),C=T.error,L=T.value;return C||g&&L.done?{exit:!0,value:C?d.reject(L):d.resolve(f(void 0,!0))}:{exit:!1,value:L}};return o(n(c),{next:function(){var T=D(this),C=T.value;if(T.exit)return C;var L=e(function(){return t(C.nextHandler(d))}),N=L.error,P=L.value;return N&&(C.done=!0),N?d.reject(P):d.resolve(P)},return:function(){var F=D(this),T=F.value;if(F.exit)return T;T.done=!0;var C=T.iterator,L,N,P=e(function(){if(T.inner)try{l(T.inner.iterator,"normal")}catch(_){return l(C,"throw",_)}return u(C,"return")});return L=N=P.value,P.error?d.reject(N):L===void 0?d.resolve(f(void 0,!0)):(P=e(function(){return r(L,C)}),N=P.value,P.error?d.reject(N):m?d.resolve(N):d.resolve(N).then(function(_){return t(_),f(void 0,!0)}))}})},I=y(!0),R=y(!1);return a(R,h,"Async Iterator Helper"),bn=function(m,g){var q=function(F,T){T?(T.iterator=F.iterator,T.next=F.next):T=F,T.type=g?O:p,T.nextHandler=m,T.counter=0,T.done=!1,S(this,T)};return q.prototype=g?I:R,q},bn}var On,lu;function ms(){if(lu)return On;lu=1;var r=B(),e=Ss();return On=e(function(){return r(this.next,this.iterator)},!0),On}var du;function gs(){if(du)return vu;du=1;var r=G(),e=A(),t=Os(),n=ms(),a=z(),o=k();return r({target:"Iterator",proto:!0,real:!0,forced:o},{toAsync:function(){return new n(a(new t(a(e(this)))))}}),vu}var hu={},Sn,yu;function Ps(){return yu||(yu=1,Sn={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}),Sn}var mn,pu;function Es(){if(pu)return mn;pu=1;var r=Br(),e=r("span").classList,t=e&&e.constructor&&e.constructor.prototype;return mn=t===Object.prototype?void 0:t,mn}var Iu;function Ts(){if(Iu)return hu;Iu=1;var r=M(),e=Ps(),t=Es(),n=Bu(),a=Ir(),o=kr(),i=$(),s=i("iterator"),v=n.values,u=function(f,l){if(f){if(f[s]!==v)try{a(f,s,v)}catch{f[s]=v}if(o(f,l,!0),e[l]){for(var d in n)if(f[d]!==n[d])try{a(f,d,n[d])}catch{f[d]=n[d]}}}};for(var c in e)u(r[c]&&r[c].prototype,c);return u(t,"DOMTokenList"),hu}var gn,Ru;function _s(){if(Ru)return gn;Ru=1;var r=M();return gn=r,gn}var Pn,bu;function qs(){if(bu)return Pn;bu=1,Bu(),jv(),es(),ns(),is(),os(),us(),vs(),ss(),cs(),fs(),ls(),ds(),ys(),ps(),Is(),Rs(),bs(),gs(),Ts();var r=_s();return Pn=r.Iterator,Pn}qs();function Ns(r,e){var t=nv(),n=iv(t);ov(n,()=>e.children),av(r,t)}export{Ns as component,As as universal};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/1.zAvY42iv.js
··· 1 + import{f as u,a as h}from"../chunks/DTjTDYf3.js";import"../chunks/Dwwks_Q7.js";import{p as g,f as d,ad as l,a as v,Y as s,Z as e,X as _}from"../chunks/Cy0nnqwK.js";import{s as o}from"../chunks/Zp7FgOxX.js";import{i as x}from"../chunks/BfVwtNtA.js";import{s as $,p}from"../chunks/BXN2zbQS.js";const k={get error(){return p.error},get status(){return p.status}};$.updated.check;const m=k;var b=u("<h1> </h1> <p> </p>",1);function w(i,f){g(f,!1),x();var t=b(),r=d(t),n=s(r,!0);e(r);var a=_(r,2),c=s(a,!0);e(a),l(()=>{o(n,m.status),o(c,m.error?.message)}),h(i,t),v()}export{w as component};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/2.B3v9Uros.js
··· 1 + import{c as t,a as m}from"../chunks/DTjTDYf3.js";import{p as e,f as s,a as i}from"../chunks/Cy0nnqwK.js";import{s as n}from"../chunks/VCyrUZ76.js";import{p as f}from"../chunks/Disko3h9.js";function l(r,o){e(o,!0),f();var a=t(),p=s(a);n(p,()=>o.children),m(r,a),i()}export{l as component};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/3.rm3kMfwl.js
··· 1 + import{f as s,a as r}from"../chunks/DTjTDYf3.js";import"../chunks/Dwwks_Q7.js";var t=s('<main class="svelte-1uha8ag"><h1 class="svelte-1uha8ag">This game?</h1> <a href="/cards">See the cards</a> <a href="/play">Just play</a></main>');function h(a){var e=t();r(a,e)}export{h as component};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/4.DThprzVs.js
··· 1 + import"../chunks/DTjTDYf3.js";import{s as u,a3 as b,c as n,g as d,ae as l,p as g,a as m}from"../chunks/Cy0nnqwK.js";import{s as _,a as $}from"../chunks/IrKOPqpB.js";import{s as S}from"../chunks/BXN2zbQS.js";import{D as x}from"../chunks/CFNKoBvp.js";import{g as F}from"../chunks/Disko3h9.js";import{S as f}from"../chunks/Du5sam5i.js";const v=()=>{const e=S;return{page:{subscribe:e.page.subscribe},navigating:{subscribe:e.navigating.subscribe},updated:e.updated}},C={subscribe(e){return v().page.subscribe(e)}};function h(e){return Number.parseInt(e)}const w=Symbol("Field State");function D(e,i){const s=F();let r=u(b(i)),a=u(b(new f));s.$on("auth",()=>{const o=s.subscribe("fields"),c=s.subscribe({topic:"field_cards",field_id:e});return s.getField(e).$then(({data:t})=>{n(r,t.field,!0),n(a,new f(t.field_cards.map(p=>[p.card_id,p])),!0)}),c.$on("next",({message:t})=>{d(a).set(t.data.field_card.card_id,t.data.field_card)}),o.$on("next",({message:t})=>{n(r,t.data.field,!0)}),()=>{o.unsubscribe(),c.unsubscribe()}}),l(w,{get field(){return d(r)},get fieldCards(){return d(a)}})}function M(e,i){g(i,!0);const s=()=>_(C,"$page",r),[r,a]=$(),{fieldId:o}=s().params;D(h(o)),x(e,{}),m(),a()}export{M as component};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/5.QeLDNF63.js
··· 1 + import{f as c,a as n,t as _}from"../chunks/DTjTDYf3.js";import{s as L,a3 as P,c as R,g as t,ae as W,af as E,p as M,a as T,f as V,Y as $,X,ag as w,Z as x,ad as b}from"../chunks/Cy0nnqwK.js";import{s as h}from"../chunks/Zp7FgOxX.js";import{i as Y}from"../chunks/BxqNGrrm.js";import{e as Z}from"../chunks/DTiiyNL4.js";import{g as j}from"../chunks/BXN2zbQS.js";import{G as q,D as z}from"../chunks/B5ZTdtgC.js";import{D as A}from"../chunks/CFNKoBvp.js";import{g as B}from"../chunks/Disko3h9.js";import{S as y}from"../chunks/Du5sam5i.js";const D=Symbol("Overworld");function H(){return{...E(D)}}function I(){const e=B();let s=L(P(new y));e.$on("auth",()=>{const d=e.subscribe("fields");return e.getFields().$then(({data:r})=>{R(s,new y(r.fields.map(l=>[l.id,l])),!0)}),d.$on("next",({message:r})=>{t(s).set(r.data.field.id,r.data.field)}),()=>{d.unsubscribe()}}),W(D,{get fields(){return t(s)}})}var J=c('<div class="field-label svelte-urwvt6"><!></div>'),K=c("<!> <!>",1),N=c('<main class="void svelte-urwvt6" role="application"><!></main>');function vt(e,s){M(s,!0),I();const d=w(H),r=w(()=>t(d).fields);async function l(f){await j(`/field/${f.id}`)}var v=N(),O=$(v);A(O,{children:(f,Q)=>{var u=K(),g=V(u);q(g,{});var k=X(g,2);Z(k,17,()=>t(r).values(),m=>m.id,(m,a)=>{z(m,{get x(){return t(a).grid_x},get y(){return t(a).grid_y},onClick:()=>l(t(a)),children:(S,U)=>{var p=J(),C=$(p);{var F=o=>{var i=_();b(()=>h(i,t(a).name)),n(o,i)},G=o=>{var i=_();b(()=>h(i,`Field ${t(a).id??""}`)),n(o,i)};Y(C,o=>{t(a).name?o(F):o(G,!1)})}x(p),n(S,p)},$$slots:{default:!0}})}),n(f,u)},$$slots:{default:!0}}),x(v),n(e,v),T()}export{vt as component};
+1
app/.svelte-kit/output/client/_app/immutable/nodes/6.BjAi8SzL.js
··· 1 + import{f as v,a as p}from"../chunks/DTjTDYf3.js";import"../chunks/Dwwks_Q7.js";import{p as m,a as n,X as f,Y as e,Z as s}from"../chunks/Cy0nnqwK.js";import{i as h}from"../chunks/BfVwtNtA.js";import{c as u,C as q}from"../chunks/CvUAJ54q.js";var b=v('<div class="layout svelte-qmtet4"><div class="controls svelte-qmtet4"><a href="/" class="back-button svelte-qmtet4">&larr; Back</a> <div class="fields svelte-qmtet4"><input type="search" placeholder="Search..." class="svelte-qmtet4"/></div></div> <div class="gridarea svelte-qmtet4"><!></div></div>');function O(r,i){m(i,!1);const o=Object.values(u).sort((l,c)=>l.type<c.type?-1:1);h();var t=b(),a=f(e(t),2),d=e(a);q(d,{get cards(){return o}}),s(a),s(t),p(r,t),n()}export{O as component};
+39
app/.svelte-kit/output/client/_app/immutable/nodes/7.DyXTg_vC.js
··· 1 + import{c as me,a as f,f as $,d as mt,t as xe}from"../chunks/DTjTDYf3.js";import"../chunks/Dwwks_Q7.js";import{p as oe,ae as He,f as Y,a as re,c as P,s as F,g as e,af as Ze,a3 as _e,k as lt,d as Xe,ah as ve,ag as g,Y as v,Z as s,ad as Q,X as r,_ as ce,a$ as ut,aF as B}from"../chunks/Cy0nnqwK.js";import{s as be}from"../chunks/VCyrUZ76.js";import{e as ie,d as Se}from"../chunks/wnUvJIYz.js";import{s as vt,c as pe,r as We,R as ue,l as tt,a as ot,b as Ue,C as _t,d as wt,S as Je,e as bt,G as kt,f as rt,T as xt}from"../chunks/CvUAJ54q.js";import{i as de}from"../chunks/BxqNGrrm.js";import{e as Pe,s as Qe,a as we,i as Pt}from"../chunks/DTiiyNL4.js";import{s as qe,c as St}from"../chunks/Ni3ygk_w.js";import{s as te}from"../chunks/Zp7FgOxX.js";import{p as pt}from"../chunks/IrKOPqpB.js";import{D as Tt,G as Mt}from"../chunks/B5ZTdtgC.js";import{b as at,D as Et}from"../chunks/CFNKoBvp.js";import{b as N}from"../chunks/DIcbJqE8.js";const ht=Symbol("APP_STATE");function Ve(){return Ze(ht)}function $t(l,t){oe(t,!0);let a=F("place");He(ht,{get mode(){return e(a)},set mode(d){P(a,d,!0)}});var p=me(),c=Y(p);be(c,()=>t.children),f(l,p),re()}class Oe extends Event{cards;constructor(t){super("cardsreceived"),this.cards=t}}function It(){return window.crypto.randomUUID()}function Ct(l,t){const{name:a}=vt[t];return{id:It(),homeCard:l,species:t,name:a}}function zt({card:l,field:t},a){return l.source.some(p=>{switch(p.type){case"terrain":if(a.terrain[t.y]?.[t.x]?.type===p.terrain)return!0;break;case"any":return!0}})}function Rt(l){return l.category==="source"||l.category==="production"}function Me(){return window.crypto.randomUUID()}function nt(l){if(l.length===0)throw new TypeError("Cannot choose from an empty array");return l[Math.floor(Math.random()*l.length)]}const ft=Symbol("GAME_STATE");function Ie(){return Ze(ft)}function Dt(l,t){oe(t,!0);const a={biome:"Coast",origin:{x:0,y:0},terrain:[[{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"grass"},{type:"soil"},{type:"soil"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"soil"},{type:"soil"},{type:"soil"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"soil"},{type:"soil"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}],[{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"},{type:"grass"}]]};let p=F(_e([])),c=F(_e([])),d=F(_e([])),h=F(_e([])),y=F(_e({packs:[]})),x=F(_e([])),m=F(0);lt(()=>{const M=window.localStorage.getItem("game_state");if(M)try{(w=>{P(c,w.field,!0),P(p,w.deck,!0),P(x,w.flow,!0),P(d,w.citizens,!0),P(h,w.employment,!0),P(y,w.shop,!0),P(m,w.money,!0)})(JSON.parse(M))}catch{}}),He(ft,{get geography(){return a},get deck(){return e(p)},get field(){return e(c)},get shop(){return e(y)},get flow(){return e(x)},get citizens(){return e(d)},get employment(){return e(h)},get money(){return e(m)},set money(M){P(m,M,!0)}}),Xe(()=>{window.localStorage.setItem("game_state",JSON.stringify({field:e(c),deck:e(p),flow:e(x),citizens:e(d),employment:e(h),shop:e(y),money:e(m)}))});function _(M){for(const{id:w,type:E}of M.cards){const k=pe[E];if(k.category==="residential")for(const o of k.population)e(d).push(...Array.from({length:o.quantity},()=>Ct(w,o.species)))}e(p).push(...M.cards)}function z(M){if(M.pack.price>e(m))return;const w=Object.values(pe),E=M.pack.contents.map(k=>{switch(k.type){case"card":return k.missing?void 0:{id:Me(),type:k.card};case"category":return{id:Me(),type:nt(w.filter(o=>o.category===k.category)).type};case"any":return{id:Me(),type:nt(w).type}}}).filter(k=>k!==void 0);P(m,e(m)-M.pack.price),window.dispatchEvent(new Oe(E))}function C(M){if(M.flow.source===M.flow.destination)return;const w=e(p).find(u=>u.id===M.flow.source);if(!w)return;const E=pe[w.type];if(!("outputs"in E)||!E.outputs.some(u=>u.resource===M.flow.resource))return;const k=e(p).find(u=>u.id===M.flow.destination);if(!k)return;const o=pe[k.type];"inputs"in o&&o.inputs.some(u=>u.resource===M.flow.resource)&&(e(x).some(u=>u.source===M.flow.source&&u.destination===M.flow.destination&&u.resource===M.flow.resource)||e(x).push(M.flow))}function T(M){const w=e(x).findIndex(E=>E.id===M.flow);w!==-1&&e(x).splice(w,1)}var R=me();ie("cardsreceived",ve,_),ie("buypack",ve,z),ie("createflow",ve,C),ie("deleteflow",ve,T);var O=Y(R);be(O,()=>t.children),f(l,R),re()}function Ft(l){return new Map(l.map(t=>[t.id,t]))}function Ot(l){return new Map(l.map(t=>[t.id,t]))}function qt(){return window.crypto.randomUUID()}function At(l){return Map.groupBy(l,t=>t.destination)}function Le(l,t){return l+t}const gt=Symbol("RESOURCE_STATE");function Ke(){return Ze(gt)}function Gt(l,t){oe(t,!0);const a=Ie(),p=g(()=>a.deck),c=g(()=>a.field),d=g(()=>a.flow),h=g(()=>a.geography),y=g(()=>Ft(e(p))),x=g(()=>Ot(e(c))),m=g(()=>At(e(d))),_=g(()=>e(c).filter(w=>!w.loose)),z=g(()=>e(_).map(w=>e(y).get(w.id)).map(w=>pe[w.type]).filter(w=>w.category==="residential").flatMap(w=>w.population).reduce((w,E)=>(w[E.species]??={quantity:0},w[E.species].quantity+=E.quantity,w),{})),C=g(()=>{const w={},E=new Map(Array.from(e(m).entries()).filter(([,o])=>o.length).map(([o,u])=>[o,[...u]])),k=e(_).filter(o=>Rt(pe[e(y).get(o.id).type])).filter(o=>!e(m).get(o.id)?.length).map(o=>o.id);e:for(;k.length;){const o=k.shift(),u=e(x).get(o),I=e(y).get(o),S=pe[I.type];for(const[D,X]of E.entries()){const j=X.filter(Z=>Z.source===o);j.length?E.set(D,j):(E.delete(D),k.push(D))}const q=[];switch(S.category){case"production":{const D=e(m).get(o),X=S.inputs.map(j=>{const Z=[];let W=j.quantity;if(D)for(const L of D){const J=w[L.source]?.outputs;if(J)for(const V of J){if(V.resource!==j.resource)continue;const le=V.quantity-V.consumedBy.map(ge=>ge.quantity).reduce(Le,0);if(W<=le){Z.push({flow:L,output:V,quantity:W}),W=0;break}else Z.push({flow:L,output:V,quantity:le}),W-=le}}return{input:j,remaining:W,consumeFrom:Z}});if(!X.every(j=>j.remaining===0))continue e;for(const j of X)for(const{flow:Z,output:W,quantity:L}of j.consumeFrom)W.consumedBy.push({id:o,quantity:L}),q.push({cardId:Z.source,resource:W.resource,quantity:L});break}case"source":{if(!zt({card:S,field:u},e(h)))continue e;break}case"residential":case"trade":continue e;default:throw new Error("Unreachable")}w[o]={inputs:q,outputs:S.outputs.map(D=>({...D,consumedBy:[]}))}}return w}),T=g(()=>{const w=Object.values(e(C)).flatMap(E=>E.outputs).reduce((E,k)=>{E[k.resource]??={produced:0,consumed:0,demand:0},E[k.resource].produced+=k.quantity;for(const{quantity:o}of k.consumedBy)E[k.resource].consumed+=o;return E},{});for(const[E,{quantity:k}]of Object.entries(e(z)))for(const o of vt[E].needs)o.type==="resource"&&(w[o.resource]??={produced:0,consumed:0,demand:0},w[o.resource].demand+=k*o.quantity);return w}),R=g(()=>Object.entries(e(T)).map(([w,{produced:E,consumed:k,demand:o}])=>{const u=We[w].value;return u*Math.max(0,E-k-o)+u*5*Math.min(o,Math.max(0,E-k))}).reduce(Le,0));He(gt,{get population(){return e(z)},get cardProduction(){return e(C)},get resourceProduction(){return e(T)},get income(){return e(R)}});var O=me(),M=Y(O);be(M,()=>t.children),f(l,O),re()}class Bt extends Event{cardId;constructor(t){super("cardfocus"),this.cardId=t}}var jt=$('<div class="card svelte-isv3d4"> </div>');function Yt(l,t){oe(t,!0);const a=pt(t,"loose",3,!1),p=Ve();function c(){window.dispatchEvent(new Bt(t.id))}const d=g(()=>pe[t.type].name.split(" ").map(h=>h[0]).join(""));{let h=g(()=>p.mode==="place"?t.onMove:void 0);Tt(l,{get onMove(){return e(h)},onClick:c,get x(){return t.x},get y(){return t.y},get loose(){return a()},children:(y,x)=>{var m=jt(),_=v(m,!0);s(m),Q(()=>te(_,e(d))),f(y,m)},$$slots:{default:!0}})}re()}function Xt(l,t){oe(t,!0);var a=me(),p=Y(a);Pe(p,17,()=>t.field,c=>c.id,(c,d)=>{const h=g(()=>t.deck.find(_=>_.id===e(d).id));var y=me(),x=Y(y);{var m=_=>{Yt(_,{get id(){return e(d).id},get x(){return e(d).x},get y(){return e(d).y},get type(){return e(h).type},onMove:(z,C)=>t.onMoveCard(e(d).id,z,C),get loose(){return e(d).loose}})};de(x,_=>{e(h)&&_(m)})}f(c,y)}),f(l,a),re()}class Nt extends Event{card;constructor(t){super("cardplaced"),this.card=t}}class Ut extends Event{flow;constructor(t){super("createflow"),this.flow=t}}class Wt extends Event{flow;constructor(t){super("deleteflow"),this.flow=t}}var Lt=mt('<path role="button" tabindex="0"></path><defs><linearGradient><stop offset="0%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 100%, var(--color-input) 0%)"></stop><stop offset="10%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 90%, var(--color-input) 10%)"></stop><stop offset="20%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 80%, var(--color-input) 20%)"></stop><stop offset="30%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 70%, var(--color-input) 30%)"></stop><stop offset="40%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 60%, var(--color-input) 40%)"></stop><stop offset="50%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 50%, var(--color-input) 50%)"></stop><stop offset="60%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 40%, var(--color-input) 60%)"></stop><stop offset="70%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 30%, var(--color-input) 70%)"></stop><stop offset="80%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 20%, var(--color-input) 80%)"></stop><stop offset="90%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 10%, var(--color-input) 90%)"></stop><stop offset="100%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 0%, var(--color-input) 100%)"></stop></linearGradient></defs>',1);function st(l,t){const d=g(()=>`${t.x1}_${t.y1}_${t.x2}_${t.y2}`),h=g(()=>t.x2-t.x1),y=g(()=>t.y2-t.y1),x=g(()=>Math.sqrt(e(h)**2+e(y)**2)),m=g(()=>e(x)/2),_=g(()=>Math.atan2(e(y),e(h))),z=g(()=>Math.sign(e(h))),C=g(()=>Math.sign(e(y))),T=g(()=>Math.sign(e(h))||1),R=g(()=>t.x1+e(h)/2+e(m)*Math.sin(e(_))/2*e(T)),O=g(()=>t.y1+e(y)/2-e(m)*Math.cos(e(_))/2*e(T)),M=g(()=>t.x1+e(h)/2+(e(m)+12)*Math.sin(e(_))/2*e(T)),w=g(()=>t.y1+e(y)/2-(e(m)+12)*Math.cos(e(_))/2*e(T)),E=g(()=>1-Math.max(0,Math.min(1,(e(x)-256)/384)*.75));var k=Lt(),o=Y(k);o.__click=function(...q){t.onclick?.apply(this,q)};let u;var I=r(o),S=v(I);s(I),Q(()=>{u=Qe(o,0,"flow live svelte-da3do8",null,u,{selectable:!!t.onclick}),qe(o,`--efficacy: ${e(E)??""}; fill: url(#${e(d)??""}); stroke: url(#${e(d)??""})`),we(o,"d",`M ${t.x1??""} ${t.y1??""} Q ${e(R)??""} ${e(O)??""} ${t.x2??""} ${t.y2??""} Q ${e(M)??""} ${e(w)??""} ${t.x1??""} ${t.y1??""}`),we(S,"id",e(d)),we(S,"x1",e(z)===-1?1:0),we(S,"y1",e(C)===-1?1:0),we(S,"x2",e(z)===-1?0:1),we(S,"y2",e(C)===-1?0:1)}),f(l,k)}Se(["click"]);class it extends Event{sourceType;resource;clientX;clientY;constructor({resource:t,sourceType:a,clientX:p,clientY:c}){super("startflow"),this.sourceType=a,this.resource=t,this.clientX=p,this.clientY=c}}var Ht=$('<div class="piprow svelte-go3dgf"><div class="pip input svelte-go3dgf" role="presentation"></div> <span> <!></span></div>'),Zt=$('<div class="pips svelte-go3dgf"></div>'),Jt=$('<div class="piprow svelte-go3dgf"><span><!> </span> <div class="pip output svelte-go3dgf" role="presentation"></div></div>'),Qt=$('<div class="pips svelte-go3dgf"></div>'),Vt=$('<div class="gridspace svelte-go3dgf"><!> <!></div>');function Kt(l,t){oe(t,!0);const a=g(()=>pe[t.type]),p=_e({}),c=_e({});function d(T){return p[T]}function h(T){return c[T]}var y={findInput:d,findOutput:h},x=Vt(),m=v(x);{var _=T=>{var R=Zt();Pe(R,21,()=>e(a).inputs,O=>O.resource,(O,M)=>{var w=Ht(),E=v(w),k=g(()=>tt(ot(S=>new it({resource:e(M).resource,sourceType:"input",clientX:S.clientX,clientY:S.clientY}))));E.__mousedown=function(...S){e(k)?.apply(this,S)},N(E,(S,q)=>p[q.resource]=S,S=>p?.[S.resource],()=>[e(M)]);var o=r(E,2),u=v(o),I=r(u);ue(I,{get id(){return e(M).resource}}),s(o),s(w),Q(()=>te(u,`${e(M).quantity??""} → `)),ie("startflow",E,function(...S){t.onStartFlow?.apply(this,S)}),f(O,w)}),s(R),f(T,R)};de(m,T=>{"inputs"in e(a)&&T(_)})}var z=r(m,2);{var C=T=>{var R=Qt();Pe(R,21,()=>e(a).outputs,O=>O.resource,(O,M)=>{var w=Jt(),E=v(w),k=v(E);ue(k,{get id(){return e(M).resource}});var o=r(k);s(E);var u=r(E,2),I=g(()=>tt(ot(S=>new it({resource:e(M).resource,sourceType:"output",clientX:S.clientX,clientY:S.clientY}))));u.__mousedown=function(...S){e(I)?.apply(this,S)},N(u,(S,q)=>c[q.resource]=S,S=>c?.[S.resource],()=>[e(M)]),s(w),Q(()=>te(o,` → ${e(M).quantity??""}`)),ie("startflow",u,function(...S){t.onStartFlow?.apply(this,S)}),f(O,w)}),s(R),f(T,R)};de(z,T=>{"outputs"in e(a)&&T(C)})}return s(x),Q(()=>{qe(x,`--grid-x: ${t.x??""}; --grid-y: ${t.y??""}`),we(x,"data-cardid",t.id)}),f(l,x),re(y)}Se(["mousedown"]);var eo=$('<!> <div class="full svelte-13qno0"><svg><!><!></svg></div>',1);function to(l,t){oe(t,!0);const a=g(()=>t.flow.map(({source:o,destination:u,...I})=>{const S=t.field.find(D=>D.id===o),q=t.field.find(D=>D.id===u);if(!(!S||!q))return{...I,source:S,destination:q}}).filter(o=>o!==void 0).toSorted((o,u)=>o.priority-u.priority));let p=F(0),c=F(0),d=F(void 0),h=F(0),y=F(0);const x=_e({});function m(o,u){P(d,{resource:o.resource,sourceType:o.sourceType,anchor:o.currentTarget,card:u},!0),P(h,o.clientX,!0),P(y,o.clientY,!0)}function _(o){e(d)&&(P(h,o.clientX,!0),P(y,o.clientY,!0))}function z(o){if(o.button===0&&e(d)){const u=document.elementFromPoint(e(h),e(y))?.closest("[data-cardid]");if(u){const I=u.dataset.cardid;window.dispatchEvent(new Ut({id:qt(),priority:0,source:e(d).sourceType==="output"?e(d).card.id:I,destination:e(d).sourceType==="output"?I:e(d).card.id,resource:e(d).resource}))}P(h,0),P(y,0),P(d,void 0)}}function C(o){window.dispatchEvent(new Wt(o))}var T=eo();ie("mousemove",ve,_),ie("mouseup",ve,z);var R=Y(T);Pe(R,17,()=>t.field,o=>o.id,(o,u)=>{const I=g(()=>t.deck.find(S=>S.id===e(u).id));N(Kt(o,{get id(){return e(u).id},get type(){return e(I).type},get x(){return e(u).x},get y(){return e(u).y},onStartFlow:S=>m(S,e(u))}),(S,q)=>x[q.id]=S,S=>x?.[S.id],()=>[e(u)])});var O=r(R,2),M=v(O),w=v(M);Pe(w,17,()=>e(a),o=>o.id,(o,u,I,S)=>{const q=g(()=>x[e(u).source.id]?.findOutput(e(u).resource)?.getBoundingClientRect()),D=g(()=>x[e(u).destination.id]?.findInput(e(u).resource)?.getBoundingClientRect());var X=me(),j=Y(X);{var Z=W=>{{let L=g(()=>e(q).x+e(q).width/2),J=g(()=>e(q).y+e(q).height/2),V=g(()=>e(D).x+e(D).width/2),le=g(()=>e(D).y+e(D).height/2);st(W,{get x1(){return e(L)},get y1(){return e(J)},get x2(){return e(V)},get y2(){return e(le)},onclick:()=>C(e(u).id)})}};de(j,W=>{e(q)&&e(D)&&W(Z)})}f(o,X)});var E=r(w);{var k=o=>{const u=g(()=>e(d).anchor.getBoundingClientRect()),I=g(()=>e(u).x+e(u).width/2),S=g(()=>e(u).y+e(u).height/2);st(o,{get x1(){return e(I)},get y1(){return e(S)},get x2(){return e(h)},get y2(){return e(y)}})};de(E,o=>{e(d)&&o(k)})}s(M),s(O),Q(()=>we(M,"viewBox",`0 0 ${e(c)??""} ${e(p)??""}`)),at(O,"clientWidth",o=>P(c,o)),at(O,"clientHeight",o=>P(p,o)),f(l,T),re()}var oo=$('<div class="terrain svelte-11xczzg"></div>'),ro=$("<!> <!> <!> <!>",1);function ao(l,t){oe(t,!0);const a=128,p=Ve(),c=Ie(),d=g(()=>c.geography),h=g(()=>c.deck),y=g(()=>c.field),x=g(()=>c.flow);let m=F(0),_=F(0),z=F(0),C=F(0);function T(I,S,q){const D=e(y).find(X=>X.id===I);if(D){const X=D.loose?Math.round((D.x+S)/a):D.x+Math.round(S/a),j=D.loose?Math.round((D.y+q)/a):D.y+Math.round(q/a);if(e(y).some(Z=>Z.x===X&&Z.y===j))return;D.x=X,D.y=j,D.loose=!1,window.dispatchEvent(new Nt(D))}}const R=g(()=>Math.floor(e(z)/a)),O=g(()=>Math.floor(e(C)/a)),M=g(()=>Math.floor((e(z)+e(m))/a)+1),w=g(()=>Math.floor((e(C)+e(_))/a)+1);function E({x:I,y:S}){return e(m)===0||e(_)===0?!1:e(R)<=I&&I<e(M)&&e(O)<=S&&S<e(w)}const k=g(()=>e(d).terrain.slice(Math.max(0,e(O)-e(d).origin.y),Math.max(0,e(w)-e(d).origin.y)).flatMap((I,S)=>I.slice(Math.max(0,e(R)-e(d).origin.x),Math.max(0,e(M)-e(d).origin.x)).map((q,D)=>({x:D+Math.max(e(R)-e(d).origin.x,0),y:S+Math.max(e(O)-e(d).origin.y,0),...q})))),o=g(()=>e(y).filter(I=>I.loose||E(I))),u=g(()=>e(o).filter(I=>!I.loose));Et(l,{get offsetX(){return e(z)},set offsetX(I){P(z,I,!0)},get offsetY(){return e(C)},set offsetY(I){P(C,I,!0)},get clientWidth(){return e(m)},set clientWidth(I){P(m,I,!0)},get clientHeight(){return e(_)},set clientHeight(I){P(_,I,!0)},children:(I,S)=>{var q=ro(),D=Y(q);Pe(D,16,()=>e(k),L=>L,(L,J)=>{var V=oo();Q(()=>{we(V,"data-type",J.type),qe(V,`--grid-x: ${J.x??""}; --grid-y: ${J.y??""}`)}),f(L,V)});var X=r(D,2);Mt(X,{});var j=r(X,2);Xt(j,{get field(){return e(o)},get deck(){return e(h)},onMoveCard:T});var Z=r(j,2);{var W=L=>{to(L,{get field(){return e(u)},get deck(){return e(h)},get flow(){return e(x)}})};de(Z,L=>{p.mode==="flow"&&L(W)})}f(I,q)},$$slots:{default:!0}}),re()}class no extends Event{card;constructor(t){super("cardfielded"),this.card=t}}var so=$('<dialog class="svelte-1ylobv7"><!></dialog>');function io(l,t){oe(t,!0);let a=F(void 0),p=F(void 0);function c(_){P(p,_,!0),e(a)?.show()}function d(){e(a)?.close()}var h={show:c,close:d},y=so();ie("click",ve,d);var x=v(y);{var m=_=>{Ue(_,{get card(){return e(p)}})};de(x,_=>{e(p)&&_(m)})}return s(y),N(y,_=>P(a,_),()=>e(a)),f(l,y),re(h)}var co=$('<div class="row svelte-15gpl1s"></div>');function yt(l,t){var a=co();Pe(a,21,()=>t.items,Pt,(p,c)=>{var d=me(),h=Y(d);be(h,()=>t.item,()=>e(c)),f(p,d)}),s(a),f(l,a)}var lo=$('<dialog class="svelte-eun80g"><!></dialog>');function uo(l,t){oe(t,!0);let a=F(void 0);function p(){e(a)?.showModal()}function c(){e(a)?.close()}var d={show:p,close:c},h=lo(),y=v(h);return be(y,()=>t.children),s(h),N(h,x=>P(a,x),()=>e(a)),Q(()=>qe(h,t.style)),f(l,h),re(d)}var vo=$('<div class="card svelte-t8l7ck"><!></div>'),po=$('<article class="svelte-t8l7ck"><header class="svelte-t8l7ck"><h1>Card Received!</h1></header> <!> <button>Sweet!</button></article>');function ho(l,t){oe(t,!0);let a=F(void 0),p=F(_e([]));function c(h){P(p,h,!0),e(a)?.show()}var d={show:c};return N(uo(l,{style:"--shimmer-color: rgb(164 85 217)",children:(h,y)=>{var x=po(),m=r(v(x),2);yt(m,{get items(){return e(p)},item:(C,T=ce)=>{var R=vo(),O=v(R);Ue(O,{get card(){return T()}}),s(R),f(C,R)}});var _=r(m,2);_.__click=()=>e(a)?.close(),s(x),f(h,x)},$$slots:{default:!0}}),h=>P(a,h,!0),()=>e(a)),re(d)}Se(["click"]);var fo=$("<dialog><!></dialog>");function et(l,t){oe(t,!0);const a=pt(t,"sizing",3,"fit");let p=F(void 0);function c(){e(p)?.showModal()}function d(){e(p)?.close()}var h={show:c,close:d},y=fo(),x=v(y);return be(x,()=>t.children),s(y),N(y,m=>P(p,m),()=>e(p)),Q(()=>Qe(y,1,St(a()),"svelte-ta60gp")),f(l,y),re(h)}class go extends Event{constructor(){super("deckopened")}}var yo=$('<article><header class="svelte-rkzgio"><h1>Deck</h1> <button class="close svelte-rkzgio">&times;</button></header> <div class="content svelte-rkzgio"><!></div></article>');function mo(l,t){oe(t,!0);const a=Ie(),p=g(()=>a.deck),c=g(()=>a.field),d=g(()=>e(p).map(_=>({...pe[_.type],deckCard:_,isFielded:e(c).some(z=>z.id===_.id)})));let h=F(void 0);function y(){e(h)?.show(),window.dispatchEvent(new go)}function x(){e(h)?.close()}var m={show:y,close:x};return N(et(l,{sizing:"fill",children:(_,z)=>{var C=yo(),T=v(C),R=r(v(T),2);R.__click=()=>e(h).close(),s(T);var O=r(T,2),M=v(O);_t(M,{get cards(){return e(d)},card:(E,k=ce)=>{{let o=g(()=>wt(k())(t.onSelectCard));Ue(E,{get card(){return k()},get onSelect(){return e(o)},get disabled(){return k().isFielded}})}}}),s(O),s(C),f(_,C)},$$slots:{default:!0}}),_=>P(h,_,!0),()=>e(h)),re(m)}Se(["click"]);function Ee(l,t){Je(l,{style:"--shimmer-color: oklch(from var(--color-money) calc(l - 0.2) c h)",children:(a,p)=>{var c=me(),d=Y(c);{var h=x=>{var m=xe();Q(()=>te(m,`$${t.amount??""}`)),f(x,m)},y=x=>{var m=xe("Money");f(x,m)};de(d,x=>{t.amount!==void 0?x(h):x(y,!1)})}f(a,c)}})}var _o=$('<tr class="svelte-mterps"><th class="svelte-mterps"><!></th><td class="produced svelte-mterps"> </td><td class="consumed svelte-mterps"> </td><td class="svelte-mterps"><span class="produced svelte-mterps"> </span> / <span class="consumed svelte-mterps"> </span></td><td class="consumed svelte-mterps"> </td><td class="svelte-mterps"><!></td><td class="svelte-mterps"><!></td></tr>'),wo=$('<table class="svelte-mterps"><thead class="svelte-mterps"><tr class="svelte-mterps"><th class="svelte-mterps">Resource</th><th class="svelte-mterps">Produced</th><th class="svelte-mterps">Consumed</th><th class="svelte-mterps">Satisfaction</th><th class="svelte-mterps">Exported</th><th class="svelte-mterps">Value</th><th class="svelte-mterps">Profit</th></tr></thead><tbody></tbody><tfoot class="svelte-mterps"><tr class="svelte-mterps"><th class="svelte-mterps">Total</th><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"><!></td></tr></tfoot></table>');function bo(l,t){oe(t,!0);const a=g(()=>Object.entries(t.resourceProduction).map(([m,{produced:_,consumed:z,demand:C}])=>{const T=We[m].value;return T*Math.max(0,_-z-C)+T*5*Math.min(C,Math.max(0,_-z))}).reduce(Le,0));var p=wo(),c=r(v(p));Pe(c,21,()=>Object.entries(t.resourceProduction),([m,_])=>m,(m,_)=>{var z=g(()=>ut(e(_),2));let C=()=>e(z)[0],T=()=>e(z)[1];const R=g(()=>Math.max(0,T().produced-T().consumed-T().demand)),O=g(()=>Math.min(T().demand,Math.max(0,T().produced-T().consumed))),M=g(()=>We[C()].value);var w=_o(),E=v(w),k=v(E);ue(k,{get id(){return C()}}),s(E);var o=r(E),u=v(o,!0);s(o);var I=r(o),S=v(I,!0);s(I);var q=r(I),D=v(q),X=v(D,!0);s(D);var j=r(D,2),Z=v(j,!0);s(j),s(q);var W=r(q),L=v(W,!0);s(W);var J=r(W),V=v(J);Ee(V,{get amount(){return e(M)}}),s(J);var le=r(J),ge=v(le);{let ye=g(()=>e(M)*e(R)+e(M)*5*e(O));Ee(ge,{get amount(){return e(ye)}})}s(le),s(w),Q(()=>{te(u,T().produced),te(S,T().consumed),te(X,e(O)),te(Z,T().demand),te(L,e(R))}),f(m,w)}),s(c);var d=r(c),h=v(d),y=r(v(h),6),x=v(y);Ee(x,{get amount(){return e(a)}}),s(y),s(h),s(d),s(p),f(l,p),re()}var ko=$('<article><header class="svelte-1dvzbw0"><h1>Production Report</h1> <button class="close svelte-1dvzbw0">&times;</button></header> <div class="content svelte-1dvzbw0"><!></div></article>');function xo(l,t){oe(t,!0);const a=Ke(),p=g(()=>a.resourceProduction);let c=F(void 0);function d(){e(c)?.show()}function h(){e(c)?.close()}var y={show:d,close:h};return N(et(l,{children:(x,m)=>{var _=ko(),z=v(_),C=r(v(z),2);C.__click=()=>e(c).close(),s(z);var T=r(z,2),R=v(T);bo(R,{get resourceProduction(){return e(p)}}),s(T),s(_),f(x,_)},$$slots:{default:!0}}),x=>P(c,x,!0),()=>e(c)),re(y)}Se(["click"]);class Po extends Event{constructor(){super("shopopened")}}var So=$('<div class="category svelte-legrwj"> </div>'),To=$('<div class="card-back svelte-legrwj"><!></div>');function ct(l,t){var a=To(),p=v(a);{var c=d=>{var h=So(),y=v(h,!0);s(h),Q(()=>te(y,t.category)),f(d,h)};de(p,d=>{t.category&&d(c)})}s(a),f(l,a)}function Ne(l,t){Je(l,{style:"--shimmer-color: var(--color-pack)",children:(a,p)=>{var c=me(),d=Y(c);be(d,()=>t.children),f(a,c)}})}var Mo=$('<div class="shimmer svelte-y2bo7g"><!></div>');function dt(l,t){var a=Mo(),p=v(a);be(p,()=>t.children??ce),s(a),Q(()=>qe(a,t.style)),f(l,a)}var Eo=$('<div class="info svelte-1h5lzcn"> </div>'),$o=$('<s class="price-label svelte-1h5lzcn"> </s>'),Io=$('<div class="price-tag replaced svelte-1h5lzcn"><!></div>'),Co=$('<div class="price-label svelte-1h5lzcn"> </div>'),zo=$('<div class="card svelte-1h5lzcn"><!></div>'),Ro=$('<div class="pack svelte-1h5lzcn" role="button"><div class="banner svelte-1h5lzcn"><!></div> <!> <!> <div><!></div></div> <dialog class="tooltip svelte-1h5lzcn"><header class="svelte-1h5lzcn"><!></header> <!></dialog>',1);function Do(l,t){oe(t,!0);let a=F(!1);var p=Ro(),c=Y(p);we(c,"tabindex",0),c.__click=function(...k){t.onSelect?.apply(this,k)};var d=g(()=>bt(t.onSelect));c.__keydown=function(...k){e(d)?.apply(this,k)},c.__mouseover=()=>P(a,!0),c.__mouseout=()=>P(a,!1);var h=v(c),y=v(h);Ne(y,{children:(k,o)=>{B();var u=xe();Q(()=>te(u,t.pack.name)),f(k,u)}}),s(h);var x=r(h,2);{var m=k=>{var o=Eo(),u=v(o,!0);s(o),Q(()=>te(u,t.pack.description)),f(k,o)};de(x,k=>{t.pack.description&&k(m)})}var _=r(x,2);{var z=k=>{var o=Io(),u=v(o);dt(u,{style:"--shimmer-color: oklch(from var(--color-money) l calc(c - 0.075) h); border-radius: 1rem; padding-inline: 1rem;",children:(I,S)=>{var q=$o(),D=v(q);s(q),Q(()=>te(D,`$${t.pack.originalPrice??""}`)),f(I,q)}}),s(o),f(k,o)};de(_,k=>{t.pack.originalPrice&&k(z)})}var C=r(_,2);let T;var R=v(C);dt(R,{style:"--shimmer-color: var(--color-money); border-radius: 1rem; padding-inline: 1rem;",children:(k,o)=>{var u=Co(),I=v(u);s(u),Q(()=>te(I,`$${t.pack.price??""}`)),f(k,u)}}),s(C),s(c);var O=r(c,2),M=v(O),w=v(M);Ne(w,{children:(k,o)=>{B();var u=xe();Q(()=>te(u,t.pack.name)),f(k,u)}}),s(M);var E=r(M,2);yt(E,{get items(){return t.pack.contents},item:(o,u=ce)=>{var I=zo(),S=v(I);{var q=X=>{Ue(X,{get card(){return pe[u().card]},get disabled(){return u().missing}})},D=X=>{var j=me(),Z=Y(j);{var W=J=>{ct(J,{get category(){return u().category}})},L=J=>{var V=me(),le=Y(V);{var ge=ye=>{ct(ye,{})};de(le,ye=>{u().type==="any"&&ye(ge)},!0)}f(J,V)};de(Z,J=>{u().type==="category"?J(W):J(L,!1)},!0)}f(X,j)};de(S,X=>{u().type==="card"?X(q):X(D,!1)})}s(I),f(o,I)}}),s(O),Q(()=>{T=Qe(C,1,"price-tag svelte-1h5lzcn",null,T,{replacement:!!t.pack.originalPrice}),O.open=e(a)}),ie("focus",c,()=>P(a,!0)),ie("blur",c,()=>P(a,!1)),f(l,p),re()}Se(["click","keydown","mouseover","mouseout"]);class Fo extends Event{pack;constructor(t){super("buypack"),this.pack=t}}var Oo=$('<article><header class="svelte-1w43591"><h1>Shop</h1> <button class="close svelte-1w43591">&times;</button></header> <div class="content svelte-1w43591"><!></div></article>');function qo(l,t){oe(t,!0);const a=Ie(),p=g(()=>a.shop);let c=F(void 0);function d(){e(c)?.show(),window.dispatchEvent(new Po)}function h(m){e(c)?.close(),window.dispatchEvent(new Fo(m))}function y(){e(c)?.close()}var x={show:d,close:y};return N(et(l,{sizing:"fill",children:(m,_)=>{var z=Oo(),C=v(z),T=r(v(C),2);T.__click=()=>e(c).close(),s(C);var R=r(C,2),O=v(R);kt(O,{get items(){return e(p).packs},item:(w,E=ce)=>{Do(w,{get pack(){return E()},onSelect:()=>h(E())})}}),s(R),s(z),f(m,z)},$$slots:{default:!0}}),m=>P(c,m,!0),()=>e(c)),re(x)}Se(["click"]);var Ao=$("<span><!> <!></span>"),Go=$('<button class="svelte-og50z2">Prod</button> <button class="svelte-og50z2">Shop</button>',1),Bo=$('<div class="area svelte-og50z2"><div class="status svelte-og50z2"><div class="title-area svelte-og50z2"><span class="title svelte-og50z2">Your Town</span> <span> </span> <span> </span></div> <div class="resource-area svelte-og50z2"></div></div> <div class="menu svelte-og50z2" role="toolbar"><a class="button svelte-og50z2" href="/">Menu</a> <button class="svelte-og50z2">Reset</button> <button class="svelte-og50z2"> </button> <!> <button class="svelte-og50z2">Deck</button></div></div> <!> <!> <!> <!> <!>',1);function jo(l,t){oe(t,!0);const a=Ve(),p=Ie(),c=g(()=>p.deck),d=g(()=>p.field),h=g(()=>p.money),y=Ke(),x=g(()=>y.resourceProduction),m=g(()=>y.income);let _=F(void 0),z=F(void 0),C=F(void 0),T=F(void 0),R=F(void 0);const O=g(()=>e(c).find(n=>n.type==="trading-centre")),M=g(()=>e(d).find(n=>n.id===e(O)?.id)),w=g(()=>e(M)&&!e(M).loose);function E(){e(_)?.show()}function k(){e(z)?.show()}function o(){a.mode=a.mode==="flow"?"place":"flow"}function u(){e(R)?.show()}function I(n){window.dispatchEvent(new no(n.deckCard)),e(d).push({id:n.deckCard.id,x:0,y:0,loose:!0}),e(_)?.close()}function S(){window.localStorage.clear(),window.location.reload()}function q(n){e(C)?.show(n.cards.map(b=>pe[b.type]))}function D(n){const b=e(c).find(H=>H.id===n.cardId);if(!b)return;const G=pe[b.type];window.setTimeout(()=>e(T)?.show(G),0)}var X=Bo();ie("cardsreceived",ve,q),ie("cardfocus",ve,D);var j=Y(X),Z=v(j),W=v(Z),L=r(v(W),2),J=v(L);s(L);var V=r(L,2),le=v(V);s(V),s(W);var ge=r(W,2);Pe(ge,21,()=>Object.entries(e(x)),([n,{produced:b,consumed:G,demand:H}])=>n,(n,b)=>{var G=g(()=>ut(e(b),2));let H=()=>e(G)[0],ne=()=>e(G)[1].produced,ae=()=>e(G)[1].consumed,se=()=>e(G)[1].demand;var ee=Ao(),he=v(ee);ue(he,{get id(){return H()}});var ke=r(he,2);{var De=Te=>{var Fe=xe();Q(()=>te(Fe,`${ne()??""}/${se()??""}`)),f(Te,Fe)},Ye=Te=>{var Fe=xe();Q(()=>te(Fe,ne()-ae())),f(Te,Fe)};de(ke,Te=>{se()?Te(De):Te(Ye,!1)})}s(ee),f(n,ee)}),s(ge),s(Z);var ye=r(Z,2),Ce=r(v(ye),2);Ce.__click=S;var $e=r(Ce,2);$e.__click=o;var Ae=v($e);s($e);var ze=r($e,2);{var Ge=n=>{var b=Go(),G=Y(b);G.__click=u;var H=r(G,2);H.__click=k,f(n,b)};de(ze,n=>{e(w)&&n(Ge)})}var Be=r(ze,2);Be.__click=E,s(ye),s(j);var Re=r(j,2);N(xo(Re,{}),n=>P(R,n,!0),()=>e(R));var je=r(Re,2);N(mo(je,{onSelectCard:I}),n=>P(_,n,!0),()=>e(_));var U=r(je,2);N(qo(U,{}),n=>P(z,n,!0),()=>e(z));var i=r(U,2);N(ho(i,{}),n=>P(C,n,!0),()=>e(C));var A=r(i,2);N(io(A,{}),n=>P(T,n,!0),()=>e(T)),Q(()=>{te(J,`$${e(h)??""}`),te(le,`$${e(m)??""} / day`),te(Ae,`Mode: ${a.mode??""}`)}),f(l,X),re()}Se(["click"]);function K(l,t){oe(t,!0);const a=g(()=>pe[t.id]);Je(l,{style:"--shimmer-color: var(--color-card)",children:(p,c)=>{B();var d=xe();Q(()=>te(d,e(a).name)),f(p,d)}}),re()}var Yo=$('<dialog class="svelte-1chcjmg"><article class="svelte-1chcjmg"><!></article> <div class="controls svelte-1chcjmg"><!></div></dialog>');function fe(l,t){oe(t,!0);let a=F(void 0);function p(){e(a)?.showModal()}function c(){e(a)?.close(),t.onDismiss?.()}var d={show:p},h=Yo(),y=v(h),x=v(y);be(x,()=>t.children),s(y);var m=r(y,2),_=v(m);return be(_,()=>t.actions,()=>c),s(m),s(h),N(h,z=>P(a,z),()=>e(a)),f(l,h),re(d)}var Xo=$("<button>Of course!</button>"),No=$(`<p>Hello mayor, and welcome to the location of our new town! All of us are just getting started 2 + here ourselves. We haven't even placed a single card yet!</p> <p>I have the card for a <!> right here, I'll put it into your deck. 3 + Since you're in charge here, I'll let you see about setting that up for us. Start by opening up the 4 + deck view.</p> <p class="info svelte-1195hbs">The button to open the deck view is at the bottom right.</p>`,1),Uo=$("<button>Got it!</button>"),Wo=$(`<p>This is the deck view; the cards you see here are yours. There are all sorts of cards to be 5 + collected, each one providing a different function. I'm sure you'll soon have a whole collection 6 + and turn this town into a great place to live!</p> <p>For now, we just need to set up that <!> for your citizens to live 7 + in.</p> <p class="info svelte-1195hbs">Click a card to drop it into the world.</p>`,1),Lo=$("<button>On it!</button>"),Ho=$(`<p>The <!> is now on the field, but it's sitting loose. Make sure to 8 + properly set into the grid to ensure that it stays put.</p> <p class="info svelte-1195hbs">Click and drag cards to relocate them.</p>`,1),Zo=$("<button>Got it!</button>"),Jo=$(`<p>Residential cards provide housing for residents in your town. The <!> in particular has room for 6 <!> residents.</p> <p>Each type of resident has different needs. When the needs of a resident are satisfied, their 9 + productivity increases and they will pay you more <!>.</p> <p>A <!> requires 1 <!> per day to be satisfied. Luckily, 10 + I have a <!> card already, which will allow us to produce that <!> right here in town!</p> <p class="info svelte-1195hbs">Place a <!> from your deck into your town.</p>`,1),Qo=$("<button>Ok!</button>"),Vo=$(`<p>The <!> is a Production card. Production cards produce resources by consuming 11 + the resources of other cards nearby. To produce 5 units of <!>, the <!> uses 1 unit of <!> and 4 units of <!>.</p> <p>If we want this <!> working, we'll need to get our hands on those resources. 12 + I think I have a few more cards that might help with that, take a look and see what you can do.</p>`,1),Ko=$("<button>Makes sense to me!</button>"),er=$(`<p>The <!> and <!> cards are both Source cards, meaning 13 + they are able to produce resources without needing to consume anything first. Instead, they allow 14 + you to harvest resources straight from the source.</p> <p>While the <!> is able to produce water from anywhere, the <!> requires being placed on fertile <!> in order to 15 + grow wheat.</p> <p class="info svelte-1195hbs">Make sure your new cards are both producing.</p>`,1),tr=$("<button>Wow!</button>"),or=$(`<p>The <!> is producing, but without a <!> in town, 16 + there's nothing for us to do with the <!>.</p> <p>Luckily, I've got one last card here with me, it's a rare <!> card. You'll 17 + probably never get your hands on another one of these. This <!> will become the backbone of our town, allowing us to sell our excess resources in exchange for <!>.</p> <p class="info svelte-1195hbs">Place the <!>.</p>`,1),rr=$("<button>I do like money...</button>"),ar=$(`<p>This is a world of production and trade, so all resources are reported in a rate of <strong>production per day</strong>. Other than <!>, there's not much point in 18 + stockpiling any resources. Instead, at the end of each day, any excess resources we haven't used 19 + get exported via the <!>.</p> <p>The <!> produces 4 <!> per day, but a unit of <!> is worth just <!> when exported. The <!> on the other hand isn't even worth selling. Unused resources aren't worth 20 + much!</p> <p>Eventually most of your income will be coming from satisfied residents buying the things they 21 + need, but for now I'll just work out a deal real quick for your first export.</p>`,1),nr=$("<button>Exciting!</button>"),sr=$(`<p>The other thing the <!> allows you to trade for is more cards. For a 22 + little bit of <!>, you can buy a pack containing a few common cards which you can add 23 + to your town.</p> <p class="info svelte-1195hbs">Open up the shop with the button at the bottom right.</p>`,1),ir=$("<button>That's ok...</button>"),cr=$(`<p>The shop offers new cards in <strong>Packs</strong>. The available packs are always changing, 24 + and each one contains a different assortment of cards, so be sure to check back often and buy 25 + any that catch your eye.</p> <p>There's one pack available right now, the <!>, but I have a 26 + confession to make... I already opened it and gave you most of the cards. There's still one left 27 + though, I didn't want to take away all the fun!</p> <p class="info svelte-1195hbs">Buy (the rest of) the <!>.</p>`,1),dr=$("<button>Cool!</button>"),lr=$(`<p>There's just one last step: to set up the transportation of resources from where they are 28 + produced, to where they will be consumed. As the mayor, you're responsible for determining all 29 + of what goes where and how it gets there.</p> <p>In general, it's hard to move things long distances by hand in one day. One or two tiles is 30 + totally fine, but beyond that you'll be losing about 25% of the total throughput per tile. Any 31 + more than 5 tiles is too far for things to be carried by hand in a day at all, though you might 32 + be able find cards for useful tools to help with that type of thing later on.</p> <p class="info svelte-1195hbs">Enter Flow mode and drag connections from producers to consumers.</p>`,1),ur=$("<button>I will!</button>"),vr=$(`<p>That's it, the <!> is finally able to make its <!>! 33 + You don't have to set up connections for residents finding and consuming their needs, or for 34 + resources to be exported, that all happens automatically, so you'll find that already your 35 + expected profits for tomorrow are looking quite healthy!</p> <p>You'll be on your own from here on out. I look forward to seeing where you take the town, and 36 + meeting all the people who will eventually move in! Good luck, and I hope you have fun!</p> <p class="info svelte-1195hbs">Cards don't only come from packs. Earn powerful and rare cards by participating in certain 37 + activities in the real world, or trade your cards online with other players to get exactly the 38 + ones you need.</p>`,1),pr=$("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1);function hr(l,t){oe(t,!0);const a=Ie(),p=g(()=>a.deck),c=g(()=>a.field),d=g(()=>a.shop),h=Ke(),y=g(()=>h.resourceProduction);let x=F(void 0),m=F(void 0),_=F(void 0),z=F(void 0),C=F(void 0),T=F(void 0),R=F(void 0),O=F(void 0),M=F(void 0),w=F(void 0),E=F(void 0),k=F(void 0),o=F("intro");lt(()=>{const U=window.localStorage.getItem("tutorial_step");if(!U)return;const i=JSON.parse(U);typeof i=="string"&&P(o,i,!0)}),Xe(()=>{window.localStorage.setItem("tutorial_step",JSON.stringify(e(o))),e(o)==="intro"&&window.setTimeout(()=>e(x).show(),500),e(o)==="buy-pack"&&window.setTimeout(()=>e(M).show(),500)}),Xe(()=>{e(o)==="await-production"&&e(y).wheat&&e(y).wheat.produced>0&&window.setTimeout(()=>e(R).show(),500)}),Xe(()=>{e(o)==="produce-bread"&&e(y).bread&&e(y).bread.produced>0&&(window.setTimeout(()=>e(k).show(),500),P(o,"complete"))});function u(){window.setTimeout(()=>{window.dispatchEvent(new Oe([{id:Me(),type:"cat-neighbourhood"}])),P(o,"place-neighbourhood")},500)}function I(){window.setTimeout(()=>{window.dispatchEvent(new Oe([{id:Me(),type:"bakery"}])),P(o,"place-bakery")},500)}function S(){window.setTimeout(()=>{window.dispatchEvent(new Oe([{id:Me(),type:"water-well"},{id:Me(),type:"wheat-farm"}])),P(o,"place-sources")},500)}function q(){window.setTimeout(()=>{window.dispatchEvent(new Oe([{id:Me(),type:"trading-centre"}])),P(o,"place-trading-centre")},500)}function D(){a.money+=4,P(o,"buy-pack"),e(d).packs.push({id:window.crypto.randomUUID(),name:"Starter Pack?",description:`A one of a kind pack containing all you need to get started! 39 + It looks like this one has been opened already, and some of the cards are missing.`,price:4,originalPrice:20,contents:[{type:"card",card:"cat-neighbourhood",missing:!0},{type:"card",card:"water-well",missing:!0},{type:"card",card:"wheat-farm",missing:!0},{type:"card",card:"flour-mill"},{type:"card",card:"bakery",missing:!0}]})}function X(U){e(o)==="place-neighbourhood"&&window.setTimeout(()=>e(m).show(),500)}function j(U){e(o)==="buy-pack"&&window.setTimeout(()=>e(w).show(),500)}function Z({card:U}){e(o)==="place-neighbourhood"&&U.type==="cat-neighbourhood"&&window.setTimeout(()=>e(_).show(),500)}function W(U){e(o)==="buy-pack"&&P(o,"produce-bread")}function L({card:U}){e(o)==="place-neighbourhood"&&e(p).find(i=>i.id===U.id)?.type==="cat-neighbourhood"&&(window.setTimeout(()=>e(z).show(),500),P(o,"place-bakery")),e(o)==="place-bakery"&&e(p).find(i=>i.id===U.id)?.type==="bakery"&&window.setTimeout(()=>e(C).show(),500),e(o)==="place-sources"&&["wheat-farm","water-well"].every(i=>e(c).some(A=>!A.loose&&e(p).some(n=>A.id===n.id&&n.type===i)))&&window.setTimeout(()=>e(T).show(),500),e(o)==="place-trading-centre"&&e(p).find(i=>i.id===U.id)?.type==="trading-centre"&&window.setTimeout(()=>e(O).show(),500),e(o)==="produce-bread"&&e(p).find(i=>i.id===U.id)?.type==="flour-mill"&&window.setTimeout(()=>e(E).show(),500)}var J=pr();ie("deckopened",ve,X),ie("shopopened",ve,j),ie("cardfielded",ve,Z),ie("cardplaced",ve,L),ie("buypack",ve,W);var V=Y(J);N(fe(V,{onDismiss:u,actions:(i,A=ce)=>{var n=Xo();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=No(),b=r(Y(n),2),G=r(v(b));K(G,{id:"cat-neighbourhood"}),B(),s(b),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(x,i,!0),()=>e(x));var le=r(V,2);N(fe(le,{actions:(i,A=ce)=>{var n=Uo();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=Wo(),b=r(Y(n),2),G=r(v(b));K(G,{id:"cat-neighbourhood"}),B(),s(b),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(m,i,!0),()=>e(m));var ge=r(le,2);N(fe(ge,{actions:(i,A=ce)=>{var n=Lo();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=Ho(),b=Y(n),G=r(v(b));K(G,{id:"cat-neighbourhood"}),B(),s(b),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(_,i,!0),()=>e(_));var ye=r(ge,2);N(fe(ye,{onDismiss:I,actions:(i,A=ce)=>{var n=Zo();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=Jo(),b=Y(n),G=r(v(b));K(G,{id:"cat-neighbourhood"});var H=r(G,2);rt(H,{id:"cat"}),B(),s(b);var ne=r(b,2),ae=r(v(ne));Ee(ae,{}),B(),s(ne);var se=r(ne,2),ee=r(v(se));rt(ee,{id:"cat"});var he=r(ee,2);ue(he,{id:"bread"});var ke=r(he,2);K(ke,{id:"bakery"});var De=r(ke,2);ue(De,{id:"bread"}),B(),s(se);var Ye=r(se,2),Te=r(v(Ye));K(Te,{id:"bakery"}),B(),s(Ye),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(z,i,!0),()=>e(z));var Ce=r(ye,2);N(fe(Ce,{onDismiss:S,actions:(i,A=ce)=>{var n=Qo();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=Vo(),b=Y(n),G=r(v(b));K(G,{id:"bakery"});var H=r(G,2);ue(H,{id:"bread"});var ne=r(H,2);K(ne,{id:"bakery"});var ae=r(ne,2);ue(ae,{id:"water"});var se=r(ae,2);ue(se,{id:"flour"}),B(),s(b);var ee=r(b,2),he=r(v(ee));K(he,{id:"bakery"}),B(),s(ee),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(C,i,!0),()=>e(C));var $e=r(Ce,2);N(fe($e,{onDismiss:()=>P(o,"await-production"),actions:(i,A=ce)=>{var n=Ko();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=er(),b=Y(n),G=r(v(b));K(G,{id:"water-well"});var H=r(G,2);K(H,{id:"wheat-farm"}),B(),s(b);var ne=r(b,2),ae=r(v(ne));K(ae,{id:"water-well"});var se=r(ae,2);K(se,{id:"wheat-farm"});var ee=r(se,2);xt(ee,{id:"soil"}),B(),s(ne),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(T,i,!0),()=>e(T));var Ae=r($e,2);N(fe(Ae,{onDismiss:q,actions:(i,A=ce)=>{var n=tr();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=or(),b=Y(n),G=r(v(b));K(G,{id:"wheat-farm"});var H=r(G,2);K(H,{id:"flour-mill"});var ne=r(H,2);ue(ne,{id:"wheat"}),B(),s(b);var ae=r(b,2),se=r(v(ae));K(se,{id:"trading-centre"});var ee=r(se,2);K(ee,{id:"trading-centre"});var he=r(ee,2);Ee(he,{}),B(),s(ae);var ke=r(ae,2),De=r(v(ke));K(De,{id:"trading-centre"}),B(),s(ke),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(R,i,!0),()=>e(R));var ze=r(Ae,2);N(fe(ze,{onDismiss:D,actions:(i,A=ce)=>{var n=rr();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=ar(),b=Y(n),G=r(v(b),3);Ee(G,{});var H=r(G,2);K(H,{id:"trading-centre"}),B(),s(b);var ne=r(b,2),ae=r(v(ne));K(ae,{id:"wheat-farm"});var se=r(ae,2);ue(se,{id:"wheat"});var ee=r(se,2);ue(ee,{id:"wheat"});var he=r(ee,2);Ee(he,{amount:1});var ke=r(he,2);ue(ke,{id:"water"}),B(),s(ne),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(O,i,!0),()=>e(O));var Ge=r(ze,2);N(fe(Ge,{actions:(i,A=ce)=>{var n=nr();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=sr(),b=Y(n),G=r(v(b));K(G,{id:"trading-centre"});var H=r(G,2);Ee(H,{}),B(),s(b),B(2),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(M,i,!0),()=>e(M));var Be=r(Ge,2);N(fe(Be,{actions:(i,A=ce)=>{var n=ir();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=cr(),b=r(Y(n),2),G=r(v(b));Ne(G,{children:(ae,se)=>{B();var ee=xe("Starter Pack");f(ae,ee)}}),B(),s(b);var H=r(b,2),ne=r(v(H));Ne(ne,{children:(ae,se)=>{B();var ee=xe("Starter Pack");f(ae,ee)}}),B(),s(H),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(w,i,!0),()=>e(w));var Re=r(Be,2);N(fe(Re,{actions:(i,A=ce)=>{var n=dr();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=lr();B(4),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(E,i,!0),()=>e(E));var je=r(Re,2);N(fe(je,{actions:(i,A=ce)=>{var n=ur();n.__click=function(...b){A()?.apply(this,b)},f(i,n)},children:(i,A)=>{var n=vr(),b=Y(n),G=r(v(b));K(G,{id:"bakery"});var H=r(G,2);ue(H,{id:"bread"}),B(),s(b),B(4),f(i,n)},$$slots:{actions:!0,default:!0}}),i=>P(k,i,!0),()=>e(k)),f(l,J),re()}Se(["click"]);var fr=$('<main class="svelte-hy9bcf"><!></main> <div class="hud svelte-hy9bcf"><!></div> <!>',1),gr=$('<div role="application" class="svelte-hy9bcf"><!></div>');function Cr(l){var t=gr(),a=v(t);$t(a,{children:(p,c)=>{Dt(p,{children:(d,h)=>{Gt(d,{children:(y,x)=>{var m=fr(),_=Y(m),z=v(_);ao(z,{}),s(_);var C=r(_,2),T=v(C);jo(T,{}),s(C);var R=r(C,2);hr(R,{}),f(y,m)},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{default:!0}}),s(t),f(l,t)}export{Cr as component};
+1
app/.svelte-kit/output/client/_app/version.json
··· 1 + {"version":"1767206368199"}
app/.svelte-kit/output/client/favicon.png

This is a binary file and will not be displayed.

+142
app/.svelte-kit/output/prerendered/pages/cards.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <link rel="icon" href="./favicon.png" /> 6 + <meta 7 + name="viewport" 8 + content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" 9 + /> 10 + 11 + <link rel="modulepreload" href="./_app/immutable/entry/start.B5rkkVvb.js"> 12 + <link rel="modulepreload" href="./_app/immutable/chunks/BXN2zbQS.js"> 13 + <link rel="modulepreload" href="./_app/immutable/chunks/Cy0nnqwK.js"> 14 + <link rel="modulepreload" href="./_app/immutable/chunks/F8Rf94kU.js"> 15 + <link rel="modulepreload" href="./_app/immutable/chunks/CmPt_qt9.js"> 16 + <link rel="modulepreload" href="./_app/immutable/entry/app.v3Vgvfg_.js"> 17 + <link rel="modulepreload" href="./_app/immutable/chunks/Zp7FgOxX.js"> 18 + <link rel="modulepreload" href="./_app/immutable/chunks/wnUvJIYz.js"> 19 + <link rel="modulepreload" href="./_app/immutable/chunks/DTjTDYf3.js"> 20 + <link rel="modulepreload" href="./_app/immutable/chunks/BxqNGrrm.js"> 21 + <link rel="modulepreload" href="./_app/immutable/chunks/C3Bw9t1P.js"> 22 + <link rel="modulepreload" href="./_app/immutable/chunks/DIcbJqE8.js"> 23 + <link rel="modulepreload" href="./_app/immutable/chunks/IrKOPqpB.js"> 24 + <style> 25 + @property --grid-x { 26 + syntax: "<number>"; 27 + inherits: false; 28 + initial-value: 0; 29 + } 30 + 31 + @property --grid-y { 32 + syntax: "<number>"; 33 + inherits: false; 34 + initial-value: 0; 35 + } 36 + 37 + @property --drag-x { 38 + syntax: "<length>"; 39 + inherits: false; 40 + initial-value: 0px; 41 + } 42 + 43 + @property --drag-y { 44 + syntax: "<length>"; 45 + inherits: false; 46 + initial-value: 0px; 47 + } 48 + 49 + @property --loose-x { 50 + syntax: "<length>"; 51 + inherits: false; 52 + initial-value: 0px; 53 + } 54 + 55 + @property --loose-y { 56 + syntax: "<length>"; 57 + inherits: false; 58 + initial-value: 0px; 59 + } 60 + 61 + @property --loose-rotation { 62 + syntax: "<angle>"; 63 + inherits: false; 64 + initial-value: 0deg; 65 + } 66 + 67 + :root { 68 + font-size: 16px; 69 + overscroll-behavior: none; 70 + 71 + --color-money: rgb(214 168 15); 72 + --color-resource: rgb(199 73 52); 73 + --color-terrain: rgb(38 163 38); 74 + --color-card: rgb(164 85 217); 75 + --color-species: rgb(16 121 227); 76 + --color-pack: rgb(179 43 74); 77 + --color-input: rgb(66 90 245); 78 + --color-output: rgb(244 0 213); 79 + } 80 + 81 + body { 82 + min-height: 100vh; 83 + font-size: 1rem; 84 + font-weight: 400; 85 + } 86 + 87 + * { 88 + margin: 0; 89 + padding: 0; 90 + font-family: sans-serif; 91 + box-sizing: border-box; 92 + } 93 + 94 + a:link, 95 + a:visited, 96 + a:active, 97 + a { 98 + text-decoration: none; 99 + color: black; 100 + } 101 + 102 + h1 { 103 + font-size: 2rem; 104 + font-weight: bold; 105 + } 106 + 107 + button { 108 + padding: 0.5rem 1rem; 109 + border: 1px solid rgb(0 0 0 / 0.25); 110 + border-radius: 0.25rem; 111 + background: rgb(0 0 0 / 0); 112 + cursor: pointer; 113 + font-size: 1rem; 114 + 115 + &:hover, 116 + &:focus-visible { 117 + background-color: rgb(0 0 0 / 0.05); 118 + } 119 + } 120 + </style> 121 + </head> 122 + <body data-sveltekit-preload-data="hover"> 123 + <div style="display: contents"> 124 + <script> 125 + { 126 + __sveltekit_xcp44a = { 127 + base: new URL(".", location).pathname.slice(0, -1) 128 + }; 129 + 130 + const element = document.currentScript.parentElement; 131 + 132 + Promise.all([ 133 + import("./_app/immutable/entry/start.B5rkkVvb.js"), 134 + import("./_app/immutable/entry/app.v3Vgvfg_.js") 135 + ]).then(([kit, app]) => { 136 + kit.start(app, element); 137 + }); 138 + } 139 + </script> 140 + </div> 141 + </body> 142 + </html>
+142
app/.svelte-kit/output/prerendered/pages/index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <link rel="icon" href="./favicon.png" /> 6 + <meta 7 + name="viewport" 8 + content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" 9 + /> 10 + 11 + <link rel="modulepreload" href="./_app/immutable/entry/start.B5rkkVvb.js"> 12 + <link rel="modulepreload" href="./_app/immutable/chunks/BXN2zbQS.js"> 13 + <link rel="modulepreload" href="./_app/immutable/chunks/Cy0nnqwK.js"> 14 + <link rel="modulepreload" href="./_app/immutable/chunks/F8Rf94kU.js"> 15 + <link rel="modulepreload" href="./_app/immutable/chunks/CmPt_qt9.js"> 16 + <link rel="modulepreload" href="./_app/immutable/entry/app.v3Vgvfg_.js"> 17 + <link rel="modulepreload" href="./_app/immutable/chunks/Zp7FgOxX.js"> 18 + <link rel="modulepreload" href="./_app/immutable/chunks/wnUvJIYz.js"> 19 + <link rel="modulepreload" href="./_app/immutable/chunks/DTjTDYf3.js"> 20 + <link rel="modulepreload" href="./_app/immutable/chunks/BxqNGrrm.js"> 21 + <link rel="modulepreload" href="./_app/immutable/chunks/C3Bw9t1P.js"> 22 + <link rel="modulepreload" href="./_app/immutable/chunks/DIcbJqE8.js"> 23 + <link rel="modulepreload" href="./_app/immutable/chunks/IrKOPqpB.js"> 24 + <style> 25 + @property --grid-x { 26 + syntax: "<number>"; 27 + inherits: false; 28 + initial-value: 0; 29 + } 30 + 31 + @property --grid-y { 32 + syntax: "<number>"; 33 + inherits: false; 34 + initial-value: 0; 35 + } 36 + 37 + @property --drag-x { 38 + syntax: "<length>"; 39 + inherits: false; 40 + initial-value: 0px; 41 + } 42 + 43 + @property --drag-y { 44 + syntax: "<length>"; 45 + inherits: false; 46 + initial-value: 0px; 47 + } 48 + 49 + @property --loose-x { 50 + syntax: "<length>"; 51 + inherits: false; 52 + initial-value: 0px; 53 + } 54 + 55 + @property --loose-y { 56 + syntax: "<length>"; 57 + inherits: false; 58 + initial-value: 0px; 59 + } 60 + 61 + @property --loose-rotation { 62 + syntax: "<angle>"; 63 + inherits: false; 64 + initial-value: 0deg; 65 + } 66 + 67 + :root { 68 + font-size: 16px; 69 + overscroll-behavior: none; 70 + 71 + --color-money: rgb(214 168 15); 72 + --color-resource: rgb(199 73 52); 73 + --color-terrain: rgb(38 163 38); 74 + --color-card: rgb(164 85 217); 75 + --color-species: rgb(16 121 227); 76 + --color-pack: rgb(179 43 74); 77 + --color-input: rgb(66 90 245); 78 + --color-output: rgb(244 0 213); 79 + } 80 + 81 + body { 82 + min-height: 100vh; 83 + font-size: 1rem; 84 + font-weight: 400; 85 + } 86 + 87 + * { 88 + margin: 0; 89 + padding: 0; 90 + font-family: sans-serif; 91 + box-sizing: border-box; 92 + } 93 + 94 + a:link, 95 + a:visited, 96 + a:active, 97 + a { 98 + text-decoration: none; 99 + color: black; 100 + } 101 + 102 + h1 { 103 + font-size: 2rem; 104 + font-weight: bold; 105 + } 106 + 107 + button { 108 + padding: 0.5rem 1rem; 109 + border: 1px solid rgb(0 0 0 / 0.25); 110 + border-radius: 0.25rem; 111 + background: rgb(0 0 0 / 0); 112 + cursor: pointer; 113 + font-size: 1rem; 114 + 115 + &:hover, 116 + &:focus-visible { 117 + background-color: rgb(0 0 0 / 0.05); 118 + } 119 + } 120 + </style> 121 + </head> 122 + <body data-sveltekit-preload-data="hover"> 123 + <div style="display: contents"> 124 + <script> 125 + { 126 + __sveltekit_xcp44a = { 127 + base: new URL(".", location).pathname.slice(0, -1) 128 + }; 129 + 130 + const element = document.currentScript.parentElement; 131 + 132 + Promise.all([ 133 + import("./_app/immutable/entry/start.B5rkkVvb.js"), 134 + import("./_app/immutable/entry/app.v3Vgvfg_.js") 135 + ]).then(([kit, app]) => { 136 + kit.start(app, element); 137 + }); 138 + } 139 + </script> 140 + </div> 141 + </body> 142 + </html>
+142
app/.svelte-kit/output/prerendered/pages/overworld.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <link rel="icon" href="./favicon.png" /> 6 + <meta 7 + name="viewport" 8 + content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" 9 + /> 10 + 11 + <link rel="modulepreload" href="./_app/immutable/entry/start.B5rkkVvb.js"> 12 + <link rel="modulepreload" href="./_app/immutable/chunks/BXN2zbQS.js"> 13 + <link rel="modulepreload" href="./_app/immutable/chunks/Cy0nnqwK.js"> 14 + <link rel="modulepreload" href="./_app/immutable/chunks/F8Rf94kU.js"> 15 + <link rel="modulepreload" href="./_app/immutable/chunks/CmPt_qt9.js"> 16 + <link rel="modulepreload" href="./_app/immutable/entry/app.v3Vgvfg_.js"> 17 + <link rel="modulepreload" href="./_app/immutable/chunks/Zp7FgOxX.js"> 18 + <link rel="modulepreload" href="./_app/immutable/chunks/wnUvJIYz.js"> 19 + <link rel="modulepreload" href="./_app/immutable/chunks/DTjTDYf3.js"> 20 + <link rel="modulepreload" href="./_app/immutable/chunks/BxqNGrrm.js"> 21 + <link rel="modulepreload" href="./_app/immutable/chunks/C3Bw9t1P.js"> 22 + <link rel="modulepreload" href="./_app/immutable/chunks/DIcbJqE8.js"> 23 + <link rel="modulepreload" href="./_app/immutable/chunks/IrKOPqpB.js"> 24 + <style> 25 + @property --grid-x { 26 + syntax: "<number>"; 27 + inherits: false; 28 + initial-value: 0; 29 + } 30 + 31 + @property --grid-y { 32 + syntax: "<number>"; 33 + inherits: false; 34 + initial-value: 0; 35 + } 36 + 37 + @property --drag-x { 38 + syntax: "<length>"; 39 + inherits: false; 40 + initial-value: 0px; 41 + } 42 + 43 + @property --drag-y { 44 + syntax: "<length>"; 45 + inherits: false; 46 + initial-value: 0px; 47 + } 48 + 49 + @property --loose-x { 50 + syntax: "<length>"; 51 + inherits: false; 52 + initial-value: 0px; 53 + } 54 + 55 + @property --loose-y { 56 + syntax: "<length>"; 57 + inherits: false; 58 + initial-value: 0px; 59 + } 60 + 61 + @property --loose-rotation { 62 + syntax: "<angle>"; 63 + inherits: false; 64 + initial-value: 0deg; 65 + } 66 + 67 + :root { 68 + font-size: 16px; 69 + overscroll-behavior: none; 70 + 71 + --color-money: rgb(214 168 15); 72 + --color-resource: rgb(199 73 52); 73 + --color-terrain: rgb(38 163 38); 74 + --color-card: rgb(164 85 217); 75 + --color-species: rgb(16 121 227); 76 + --color-pack: rgb(179 43 74); 77 + --color-input: rgb(66 90 245); 78 + --color-output: rgb(244 0 213); 79 + } 80 + 81 + body { 82 + min-height: 100vh; 83 + font-size: 1rem; 84 + font-weight: 400; 85 + } 86 + 87 + * { 88 + margin: 0; 89 + padding: 0; 90 + font-family: sans-serif; 91 + box-sizing: border-box; 92 + } 93 + 94 + a:link, 95 + a:visited, 96 + a:active, 97 + a { 98 + text-decoration: none; 99 + color: black; 100 + } 101 + 102 + h1 { 103 + font-size: 2rem; 104 + font-weight: bold; 105 + } 106 + 107 + button { 108 + padding: 0.5rem 1rem; 109 + border: 1px solid rgb(0 0 0 / 0.25); 110 + border-radius: 0.25rem; 111 + background: rgb(0 0 0 / 0); 112 + cursor: pointer; 113 + font-size: 1rem; 114 + 115 + &:hover, 116 + &:focus-visible { 117 + background-color: rgb(0 0 0 / 0.05); 118 + } 119 + } 120 + </style> 121 + </head> 122 + <body data-sveltekit-preload-data="hover"> 123 + <div style="display: contents"> 124 + <script> 125 + { 126 + __sveltekit_xcp44a = { 127 + base: new URL(".", location).pathname.slice(0, -1) 128 + }; 129 + 130 + const element = document.currentScript.parentElement; 131 + 132 + Promise.all([ 133 + import("./_app/immutable/entry/start.B5rkkVvb.js"), 134 + import("./_app/immutable/entry/app.v3Vgvfg_.js") 135 + ]).then(([kit, app]) => { 136 + kit.start(app, element); 137 + }); 138 + } 139 + </script> 140 + </div> 141 + </body> 142 + </html>
+142
app/.svelte-kit/output/prerendered/pages/play.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <link rel="icon" href="./favicon.png" /> 6 + <meta 7 + name="viewport" 8 + content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" 9 + /> 10 + 11 + <link rel="modulepreload" href="./_app/immutable/entry/start.B5rkkVvb.js"> 12 + <link rel="modulepreload" href="./_app/immutable/chunks/BXN2zbQS.js"> 13 + <link rel="modulepreload" href="./_app/immutable/chunks/Cy0nnqwK.js"> 14 + <link rel="modulepreload" href="./_app/immutable/chunks/F8Rf94kU.js"> 15 + <link rel="modulepreload" href="./_app/immutable/chunks/CmPt_qt9.js"> 16 + <link rel="modulepreload" href="./_app/immutable/entry/app.v3Vgvfg_.js"> 17 + <link rel="modulepreload" href="./_app/immutable/chunks/Zp7FgOxX.js"> 18 + <link rel="modulepreload" href="./_app/immutable/chunks/wnUvJIYz.js"> 19 + <link rel="modulepreload" href="./_app/immutable/chunks/DTjTDYf3.js"> 20 + <link rel="modulepreload" href="./_app/immutable/chunks/BxqNGrrm.js"> 21 + <link rel="modulepreload" href="./_app/immutable/chunks/C3Bw9t1P.js"> 22 + <link rel="modulepreload" href="./_app/immutable/chunks/DIcbJqE8.js"> 23 + <link rel="modulepreload" href="./_app/immutable/chunks/IrKOPqpB.js"> 24 + <style> 25 + @property --grid-x { 26 + syntax: "<number>"; 27 + inherits: false; 28 + initial-value: 0; 29 + } 30 + 31 + @property --grid-y { 32 + syntax: "<number>"; 33 + inherits: false; 34 + initial-value: 0; 35 + } 36 + 37 + @property --drag-x { 38 + syntax: "<length>"; 39 + inherits: false; 40 + initial-value: 0px; 41 + } 42 + 43 + @property --drag-y { 44 + syntax: "<length>"; 45 + inherits: false; 46 + initial-value: 0px; 47 + } 48 + 49 + @property --loose-x { 50 + syntax: "<length>"; 51 + inherits: false; 52 + initial-value: 0px; 53 + } 54 + 55 + @property --loose-y { 56 + syntax: "<length>"; 57 + inherits: false; 58 + initial-value: 0px; 59 + } 60 + 61 + @property --loose-rotation { 62 + syntax: "<angle>"; 63 + inherits: false; 64 + initial-value: 0deg; 65 + } 66 + 67 + :root { 68 + font-size: 16px; 69 + overscroll-behavior: none; 70 + 71 + --color-money: rgb(214 168 15); 72 + --color-resource: rgb(199 73 52); 73 + --color-terrain: rgb(38 163 38); 74 + --color-card: rgb(164 85 217); 75 + --color-species: rgb(16 121 227); 76 + --color-pack: rgb(179 43 74); 77 + --color-input: rgb(66 90 245); 78 + --color-output: rgb(244 0 213); 79 + } 80 + 81 + body { 82 + min-height: 100vh; 83 + font-size: 1rem; 84 + font-weight: 400; 85 + } 86 + 87 + * { 88 + margin: 0; 89 + padding: 0; 90 + font-family: sans-serif; 91 + box-sizing: border-box; 92 + } 93 + 94 + a:link, 95 + a:visited, 96 + a:active, 97 + a { 98 + text-decoration: none; 99 + color: black; 100 + } 101 + 102 + h1 { 103 + font-size: 2rem; 104 + font-weight: bold; 105 + } 106 + 107 + button { 108 + padding: 0.5rem 1rem; 109 + border: 1px solid rgb(0 0 0 / 0.25); 110 + border-radius: 0.25rem; 111 + background: rgb(0 0 0 / 0); 112 + cursor: pointer; 113 + font-size: 1rem; 114 + 115 + &:hover, 116 + &:focus-visible { 117 + background-color: rgb(0 0 0 / 0.05); 118 + } 119 + } 120 + </style> 121 + </head> 122 + <body data-sveltekit-preload-data="hover"> 123 + <div style="display: contents"> 124 + <script> 125 + { 126 + __sveltekit_xcp44a = { 127 + base: new URL(".", location).pathname.slice(0, -1) 128 + }; 129 + 130 + const element = document.currentScript.parentElement; 131 + 132 + Promise.all([ 133 + import("./_app/immutable/entry/start.B5rkkVvb.js"), 134 + import("./_app/immutable/entry/app.v3Vgvfg_.js") 135 + ]).then(([kit, app]) => { 136 + kit.start(app, element); 137 + }); 138 + } 139 + </script> 140 + </div> 141 + </body> 142 + </html>
+278
app/.svelte-kit/output/server/.vite/manifest.json
··· 1 + { 2 + ".svelte-kit/generated/server/internal.js": { 3 + "file": "internal.js", 4 + "name": "internal", 5 + "src": ".svelte-kit/generated/server/internal.js", 6 + "isEntry": true, 7 + "imports": [ 8 + "_internal.js", 9 + "_environment.js" 10 + ] 11 + }, 12 + "_CardGrid.DT7-TWg-.css": { 13 + "file": "_app/immutable/assets/CardGrid.DT7-TWg-.css", 14 + "src": "_CardGrid.DT7-TWg-.css" 15 + }, 16 + "_CardGrid.js": { 17 + "file": "chunks/CardGrid.js", 18 + "name": "CardGrid", 19 + "imports": [ 20 + "_index2.js", 21 + "_escaping.js" 22 + ], 23 + "css": [ 24 + "_app/immutable/assets/CardGrid.DT7-TWg-.css" 25 + ] 26 + }, 27 + "_DragWindow.DPc-Trky.css": { 28 + "file": "_app/immutable/assets/DragWindow.DPc-Trky.css", 29 + "src": "_DragWindow.DPc-Trky.css" 30 + }, 31 + "_DragWindow.js": { 32 + "file": "chunks/DragWindow.js", 33 + "name": "DragWindow", 34 + "imports": [ 35 + "_index2.js" 36 + ], 37 + "css": [ 38 + "_app/immutable/assets/DragWindow.DPc-Trky.css" 39 + ] 40 + }, 41 + "_GridLines.B-mTbh4z.css": { 42 + "file": "_app/immutable/assets/GridLines.B-mTbh4z.css", 43 + "src": "_GridLines.B-mTbh4z.css" 44 + }, 45 + "_GridLines.js": { 46 + "file": "chunks/GridLines.js", 47 + "name": "GridLines", 48 + "imports": [ 49 + "_index2.js" 50 + ], 51 + "css": [ 52 + "_app/immutable/assets/GridLines.B-mTbh4z.css" 53 + ] 54 + }, 55 + "_client.js": { 56 + "file": "chunks/client.js", 57 + "name": "client", 58 + "imports": [ 59 + "_exports.js", 60 + "_utils.js", 61 + "_index.js", 62 + "_state.svelte.js" 63 + ] 64 + }, 65 + "_context.js": { 66 + "file": "chunks/context.js", 67 + "name": "context" 68 + }, 69 + "_environment.js": { 70 + "file": "chunks/environment.js", 71 + "name": "environment" 72 + }, 73 + "_escaping.js": { 74 + "file": "chunks/escaping.js", 75 + "name": "escaping" 76 + }, 77 + "_exports.js": { 78 + "file": "chunks/exports.js", 79 + "name": "exports" 80 + }, 81 + "_false.js": { 82 + "file": "chunks/false.js", 83 + "name": "false" 84 + }, 85 + "_index-server.js": { 86 + "file": "chunks/index-server.js", 87 + "name": "index-server" 88 + }, 89 + "_index.js": { 90 + "file": "chunks/index.js", 91 + "name": "index", 92 + "imports": [ 93 + "_escaping.js" 94 + ] 95 + }, 96 + "_index2.js": { 97 + "file": "chunks/index2.js", 98 + "name": "index", 99 + "imports": [ 100 + "_escaping.js", 101 + "_false.js", 102 + "_context.js" 103 + ] 104 + }, 105 + "_internal.js": { 106 + "file": "chunks/internal.js", 107 + "name": "internal", 108 + "imports": [ 109 + "_index2.js", 110 + "_escaping.js", 111 + "_context.js", 112 + "_environment.js" 113 + ] 114 + }, 115 + "_provideSocket.svelte.js": { 116 + "file": "chunks/provideSocket.svelte.js", 117 + "name": "provideSocket.svelte", 118 + "imports": [ 119 + "_context.js" 120 + ] 121 + }, 122 + "_shared.js": { 123 + "file": "chunks/shared.js", 124 + "name": "shared", 125 + "imports": [ 126 + "_utils.js" 127 + ] 128 + }, 129 + "_state.svelte.js": { 130 + "file": "chunks/state.svelte.js", 131 + "name": "state.svelte", 132 + "imports": [ 133 + "_escaping.js" 134 + ] 135 + }, 136 + "_utils.js": { 137 + "file": "chunks/utils.js", 138 + "name": "utils" 139 + }, 140 + "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js": { 141 + "file": "remote-entry.js", 142 + "name": "remote-entry", 143 + "src": "node_modules/@sveltejs/kit/src/runtime/app/server/remote/index.js", 144 + "isEntry": true, 145 + "imports": [ 146 + "_shared.js", 147 + "_false.js", 148 + "_environment.js" 149 + ] 150 + }, 151 + "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte": { 152 + "file": "entries/fallbacks/error.svelte.js", 153 + "name": "entries/fallbacks/error.svelte", 154 + "src": "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte", 155 + "isEntry": true, 156 + "imports": [ 157 + "_escaping.js", 158 + "_state.svelte.js", 159 + "_client.js", 160 + "_context.js" 161 + ] 162 + }, 163 + "node_modules/@sveltejs/kit/src/runtime/server/index.js": { 164 + "file": "index.js", 165 + "name": "index", 166 + "src": "node_modules/@sveltejs/kit/src/runtime/server/index.js", 167 + "isEntry": true, 168 + "imports": [ 169 + "_false.js", 170 + "_environment.js", 171 + "_shared.js", 172 + "_exports.js", 173 + "_utils.js", 174 + "_index.js", 175 + "_internal.js" 176 + ] 177 + }, 178 + "src/params/FieldId.ts": { 179 + "file": "entries/matchers/FieldId.js", 180 + "name": "entries/matchers/FieldId", 181 + "src": "src/params/FieldId.ts", 182 + "isEntry": true 183 + }, 184 + "src/routes/(socket)/+layout.svelte": { 185 + "file": "entries/pages/(socket)/_layout.svelte.js", 186 + "name": "entries/pages/(socket)/_layout.svelte", 187 + "src": "src/routes/(socket)/+layout.svelte", 188 + "isEntry": true, 189 + "imports": [ 190 + "_provideSocket.svelte.js" 191 + ] 192 + }, 193 + "src/routes/(socket)/field/[fieldId=FieldId]/+page.svelte": { 194 + "file": "entries/pages/(socket)/field/_fieldId_FieldId_/_page.svelte.js", 195 + "name": "entries/pages/(socket)/field/_fieldId_FieldId_/_page.svelte", 196 + "src": "src/routes/(socket)/field/[fieldId=FieldId]/+page.svelte", 197 + "isEntry": true, 198 + "imports": [ 199 + "_index2.js", 200 + "_context.js", 201 + "_exports.js", 202 + "_utils.js", 203 + "_state.svelte.js", 204 + "_DragWindow.js", 205 + "_provideSocket.svelte.js", 206 + "_index-server.js" 207 + ] 208 + }, 209 + "src/routes/(socket)/overworld/+page.svelte": { 210 + "file": "entries/pages/(socket)/overworld/_page.svelte.js", 211 + "name": "entries/pages/(socket)/overworld/_page.svelte", 212 + "src": "src/routes/(socket)/overworld/+page.svelte", 213 + "isEntry": true, 214 + "imports": [ 215 + "_index2.js", 216 + "_client.js", 217 + "_GridLines.js", 218 + "_DragWindow.js", 219 + "_context.js", 220 + "_provideSocket.svelte.js", 221 + "_index-server.js", 222 + "_escaping.js" 223 + ], 224 + "css": [ 225 + "_app/immutable/assets/_page.BH-JXrvf.css" 226 + ] 227 + }, 228 + "src/routes/+layout.svelte": { 229 + "file": "entries/pages/_layout.svelte.js", 230 + "name": "entries/pages/_layout.svelte", 231 + "src": "src/routes/+layout.svelte", 232 + "isEntry": true 233 + }, 234 + "src/routes/+layout.ts": { 235 + "file": "entries/pages/_layout.ts.js", 236 + "name": "entries/pages/_layout.ts", 237 + "src": "src/routes/+layout.ts", 238 + "isEntry": true 239 + }, 240 + "src/routes/+page.svelte": { 241 + "file": "entries/pages/_page.svelte.js", 242 + "name": "entries/pages/_page.svelte", 243 + "src": "src/routes/+page.svelte", 244 + "isEntry": true, 245 + "css": [ 246 + "_app/immutable/assets/_page.DHpgJXmb.css" 247 + ] 248 + }, 249 + "src/routes/cards/+page.svelte": { 250 + "file": "entries/pages/cards/_page.svelte.js", 251 + "name": "entries/pages/cards/_page.svelte", 252 + "src": "src/routes/cards/+page.svelte", 253 + "isEntry": true, 254 + "imports": [ 255 + "_CardGrid.js" 256 + ], 257 + "css": [ 258 + "_app/immutable/assets/_page.FmjhQDL_.css" 259 + ] 260 + }, 261 + "src/routes/play/+page.svelte": { 262 + "file": "entries/pages/play/_page.svelte.js", 263 + "name": "entries/pages/play/_page.svelte", 264 + "src": "src/routes/play/+page.svelte", 265 + "isEntry": true, 266 + "imports": [ 267 + "_context.js", 268 + "_CardGrid.js", 269 + "_index2.js", 270 + "_escaping.js", 271 + "_GridLines.js", 272 + "_DragWindow.js" 273 + ], 274 + "css": [ 275 + "_app/immutable/assets/_page.j-beyg8a.css" 276 + ] 277 + } 278 + }
+1
app/.svelte-kit/output/server/_app/immutable/assets/CardGrid.DT7-TWg-.css
··· 1 + @property --shimmer-offset{syntax: "<percentage>"; inherits: false; initial-value: 0%;}@property --shimmer-color{syntax: "<color>"; inherits: false; initial-value: rgb(0 0 0);}.shimmer.svelte-j4afnf{font-weight:600;color:transparent;background-image:linear-gradient(to right,var(--shimmer-color) calc(0% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(50% - var(--shimmer-offset)),var(--shimmer-color) calc(100% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(150% - var(--shimmer-offset)),var(--shimmer-color) calc(200% - var(--shimmer-offset)));background-repeat:repeat-x;background-clip:text;animation:svelte-j4afnf-shimmer 8s ease-in-out alternate infinite}@keyframes svelte-j4afnf-shimmer{0%{--shimmer-offset: 0%}to{--shimmer-offset: 100%}}.card.svelte-1udyrqm{width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020;padding:.5rem;display:flex;flex-direction:column;gap:.5rem;transition:transform .2s,box-shadow .2s,opacity .1s;&.selectable{cursor:pointer;&:hover,&:focus-visible{transform:scale(1.05);box-shadow:0 0 2rem #5bc8e380;outline:1px solid rgb(91 200 227)}}&.disabled{opacity:50%;&:hover{opacity:100%}}}.title.svelte-1udyrqm{padding:.25rem;border:1px solid rgb(0 0 0 / .12);white-space:nowrap}.image.svelte-1udyrqm{aspect-ratio:1 / 1;width:100%;background-color:#0000001a}.info.svelte-1udyrqm{border:1px solid rgb(0 0 0 / .12);flex-grow:1;padding:.25rem}@property --grid-gap{syntax: "<length>"; inherits: false; initial-value: 1rem;}.grid.svelte-1hhz0mg{width:100%;display:grid;grid-auto-flow:row;grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));grid-auto-rows:auto;align-content:start;gap:var(--grid-gap, 1rem)}
+1
app/.svelte-kit/output/server/_app/immutable/assets/DragWindow.DPc-Trky.css
··· 1 + @property --offset-x{syntax: "<length>"; inherits: true; initial-value: 0;}@property --offset-y{syntax: "<length>"; inherits: true; initial-value: 0;}@property --tile-width{syntax: "<length>"; inherits: true; initial-value: 128px;}@property --tile-height{syntax: "<length>"; inherits: true; initial-value: 128px;}.window.svelte-1j4berq{width:100%;height:100%;position:relative;overflow:hidden;user-select:none;isolation:isolate}
+1
app/.svelte-kit/output/server/_app/immutable/assets/GridLines.B-mTbh4z.css
··· 1 + .griditem.svelte-1docm9i{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);transform:translate(calc(var(--loose-x) + var(--grid-x) * var(--tile-width) - var(--offset-x) + var(--drag-x, 0px)),calc(var(--loose-y) + var(--grid-y) * var(--tile-height) - var(--offset-y) + var(--drag-y, 0px))) rotate(var(--loose-rotation))}.tile.svelte-1docm9i{background-color:#fff;transition:--grid-x .1s,--grid-y .1s,--loose-rotation .15s,--loose-x .1s,--loose-y .1s;&:not(.dragging){transition:--grid-x .1s,--grid-y .1s,--drag-x .1s,--drag-y .1s,--loose-rotation .15s,--loose-x .1s,--loose-y .1s}}.tile.clickable.svelte-1docm9i{cursor:pointer}.tile.draggable.svelte-1docm9i{cursor:grab;&:hover{box-shadow:0 0 1rem #00000040;border:1px solid rgb(91 200 227);z-index:1}&.dragging{cursor:grabbing}}.shadow.svelte-1docm9i{background-color:#00000026}.loose.svelte-1docm9i{box-shadow:0 0 2rem #00000040}@property --grid-lines-color{syntax: "<color>"; inherits: true; initial-value: black;}.gridlines.svelte-2yd5bj{pointer-events:none;position:absolute;top:calc(0px - var(--tile-height));left:calc(0px - var(--tile-width));width:calc(100% + var(--tile-width));height:calc(100% + var(--tile-height));image-rendering:crisp-edges;background-position:mod(0px - var(--offset-x),var(--tile-width)) mod(0px - var(--offset-y),var(--tile-height));background-repeat:repeat;background-size:var(--tile-width) var(--tile-height);background-image:linear-gradient(rgb(from var(--grid-lines-color) r g b / 12%),rgb(from var(--grid-lines-color) r g b / 12%) 1px,transparent 1px,transparent),linear-gradient(to right,rgb(from var(--grid-lines-color) r g b / 12%),rgb(from var(--grid-lines-color) r g b / 12%) 1px,transparent 1px,transparent)}
+1
app/.svelte-kit/output/server/_app/immutable/assets/_page.BH-JXrvf.css
··· 1 + main.svelte-urwvt6{position:absolute;inset:0;width:100vw;height:100vh}.void.svelte-urwvt6{background:#000;--grid-lines-color: white}.field-label.svelte-urwvt6{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-weight:600;border:1px solid rgb(0 0 0 / .12)}
+1
app/.svelte-kit/output/server/_app/immutable/assets/_page.DHpgJXmb.css
··· 1 + main.svelte-1uha8ag{width:100%;height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem}h1.svelte-1uha8ag{font-size:2rem}
+1
app/.svelte-kit/output/server/_app/immutable/assets/_page.FmjhQDL_.css
··· 1 + .layout.svelte-qmtet4{display:grid;grid-template-columns:auto 1fr;min-height:100vh}.controls.svelte-qmtet4,.fields.svelte-qmtet4{display:flex;flex-direction:column;gap:1rem}.controls.svelte-qmtet4{border-right:1px solid rgb(0 0 0 / .12)}.fields.svelte-qmtet4{padding-inline:1rem}.back-button.svelte-qmtet4{display:block;padding:.5rem 1rem;&:hover{background:#0000001a}}.gridarea.svelte-qmtet4{padding:1rem}input.svelte-qmtet4{padding:.25rem;min-width:32ch}
+1
app/.svelte-kit/output/server/_app/immutable/assets/_page.j-beyg8a.css
··· 1 + .card.svelte-isv3d4{width:100%;height:100%;display:flex;background-color:#fff;border:1px solid rgb(0 0 0 / .25);text-align:center;align-items:center;justify-content:center;font-weight:700;font-size:2rem}.flow.svelte-da3do8{stroke-width:2;stroke-linecap:round;opacity:var(--efficacy)}.selectable.svelte-da3do8{cursor:pointer;pointer-events:visiblePainted}.gridspace.svelte-go3dgf{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);display:flex;flex-direction:column;justify-content:space-between;transform:translate(calc(var(--grid-x) * var(--tile-width) - var(--offset-x)),calc(var(--grid-y) * var(--tile-height) - var(--offset-y)))}.pips.svelte-go3dgf{display:flex;flex-direction:column}.piprow.svelte-go3dgf{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-inline:.25rem}.pip.svelte-go3dgf{display:flex;align-items:center;justify-content:center;width:1rem;height:1rem;pointer-events:all;cursor:pointer;&:after{content:"";width:.5rem;height:.5rem;border-radius:100%}&.output:after{--pulse-color: var(--color-output);background-color:var(--color-output);animation:svelte-go3dgf-pulse 1s ease-out infinite}&.input:after{--pulse-color: var(--color-input);background-color:var(--color-input);animation:svelte-go3dgf-pulse 1s infinite ease-out reverse}}@keyframes svelte-go3dgf-pulse{0%{box-shadow:0 0 oklch(from var(--pulse-color) l c h / .8)}to{box-shadow:0 0 0 .25rem oklch(from var(--pulse-color) l c h / 0)}}.full.svelte-13qno0{position:absolute;inset:0;pointer-events:none}.terrain.svelte-11xczzg{position:absolute;top:0;left:0;width:var(--tile-width);height:var(--tile-height);transform:translate(calc(var(--grid-x) * var(--tile-width) - var(--offset-x)),calc(var(--grid-y) * var(--tile-height) - var(--offset-y)));&[data-type=grass]{background-color:#3f9b0b}&[data-type=soil]{background-color:#573608}pointer-events:none}dialog.svelte-1ylobv7{pointer-events:auto;position:fixed;left:unset;top:4rem;right:2rem;box-shadow:0 0 2rem #00000040;outline:none;border:none;width:18rem}@property --row-gap{syntax: "<length>"; inherits: false; initial-value: 1rem;}.row.svelte-15gpl1s{width:100%;display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--row-gap, 1rem)}@property --pulse-distance{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --pulse-opacity{syntax: "<number>"; inherits: false; initial-value: 1;}@property --pop-distance{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --pop-opacity{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-eun80g{pointer-events:auto;opacity:1;transform:translate(-50%,-50%) scale(1)}dialog.svelte-eun80g{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.75);border:none;box-shadow:0 0 2rem oklch(from var(--shimmer-color) l c h / .5),0 0 1px var(--pulse-distance) oklch(from var(--shimmer-color) calc(l + .05) calc(c + .05) h / var(--pulse-opacity)),0 0 1px var(--pop-distance) oklch(from var(--shimmer-color) l c h / var(--pop-opacity));opacity:0;animation:1s ease-in-out 0s alternate-reverse infinite svelte-eun80g-shimmer-pulse,2s ease-out 1.2s infinite svelte-eun80g-shimmer-pop;transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-eun80g::backdrop{background-color:#0000;backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-eun80g::backdrop{background-color:#00000040;backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-eun80g{opacity:0;transform:translate(-50%,-50%) scale(.75)}dialog[open].svelte-eun80g::backdrop{background-color:#0000;backdrop-filter:blur(0px)}}@keyframes svelte-eun80g-shimmer-pulse{0%{--pulse-distance: 2rem;--pulse-opacity: .25}to{--pulse-distance: 4rem;--pulse-opacity: .35}}@keyframes svelte-eun80g-shimmer-pop{0%{--pop-distance: 0rem;--pop-opacity: 1}10%{--pop-opacity: 1}50%{--pop-distance: 3rem;--pop-opacity: 0}to{--pop-opacity: 0}}article.svelte-t8l7ck{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1rem}header.svelte-t8l7ck{text-align:center}.card.svelte-t8l7ck{width:18rem}@property --modal-scale{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-ta60gp{pointer-events:auto;opacity:1;--modal-scale: 1}dialog.svelte-ta60gp{position:absolute;border:none;box-shadow:0 0 2rem #00000040;opacity:0;transform:scale(var(--modal-scale));--modal-scale: .75;&.fill{inset:4rem;width:auto;height:auto}&.fit{left:50%;top:50%;transform:translate(-50%,-50%) scale(var(--modal-scale))}transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-ta60gp::backdrop{background-color:#0000;backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-ta60gp::backdrop{background-color:#00000040;backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-ta60gp{opacity:0;--modal-scale: .75}dialog[open].svelte-ta60gp::backdrop{background-color:#0000;backdrop-filter:blur(0px)}}.content.svelte-rkzgio{padding:2rem;--card-grid-gap: 2rem}header.svelte-rkzgio{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-rkzgio{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}table.svelte-mterps{border-collapse:collapse;border:1px solid rgb(0 0 0 / .12);font-weight:700}th.svelte-mterps:first-child{text-align:left}thead.svelte-mterps{border-bottom:1px solid rgb(0 0 0 / .12)}tfoot.svelte-mterps{border-top:3px double rgb(0 0 0 / .12);font-size:1.25rem}td.svelte-mterps{text-align:right;font-variant-numeric:tabular-nums}th.svelte-mterps,td.svelte-mterps{padding:.5rem .75rem}.svelte-mterps:where(th:where(.svelte-mterps),td:where(.svelte-mterps)):not(:first-child){border-left:1px solid rgb(0 0 0 / .12)}tr.svelte-mterps:nth-child(2n){background-color:#0000000d}.produced.svelte-mterps{color:oklch(from rgb(23 183 34) .65 c h)}.consumed.svelte-mterps{color:oklch(from rgb(213 61 28) .65 c h)}.content.svelte-1dvzbw0{padding:2rem;--card-grid-gap: 2rem}header.svelte-1dvzbw0{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-1dvzbw0{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}.card-back.svelte-legrwj{width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020}.category.svelte-legrwj{text-transform:capitalize}@property --shimmer-offset{syntax: "<percentage>"; inherits: false; initial-value: 0%;}@property --shimmer-color{syntax: "<color>"; inherits: false; initial-value: rgb(0 0 0);}.shimmer.svelte-y2bo7g{background-image:linear-gradient(to right,var(--shimmer-color) calc(0% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(50% - var(--shimmer-offset)),var(--shimmer-color) calc(100% - var(--shimmer-offset)),oklch(from var(--shimmer-color) calc(l + .15) c calc(h + 15)) calc(150% - var(--shimmer-offset)),var(--shimmer-color) calc(200% - var(--shimmer-offset)));background-repeat:repeat-x;animation:svelte-y2bo7g-shimmer 8s ease-in-out alternate infinite}@keyframes svelte-y2bo7g-shimmer{0%{--shimmer-offset: 0%}to{--shimmer-offset: 100%}}.pack.svelte-1h5lzcn{position:relative;width:100%;aspect-ratio:2.5 / 3.5;box-shadow:0 0 1rem #00000020;display:flex;flex-direction:column;justify-content:space-between;gap:1rem;transition:transform .2s,box-shadow .2s,opacity .1s;cursor:pointer;&:hover,&:focus-visible{transform:scale(1.05);box-shadow:0 0 2rem #5bc8e380;outline:1px solid rgb(91 200 227)}}.price-tag.svelte-1h5lzcn{position:absolute;top:1rem;right:1rem;display:flex;transform-origin:center}.replacement.svelte-1h5lzcn{top:2rem;right:1rem;transform:translate(0) rotate(-10deg)}.price-label.svelte-1h5lzcn{font-size:1.2rem;font-weight:600}s.svelte-1h5lzcn{text-decoration-color:#e61942;text-decoration-thickness:.2rem}.banner.svelte-1h5lzcn,.info.svelte-1h5lzcn{padding:.5rem;border:1px solid rgb(0 0 0 / .12);background-color:#0000000d}@property --tooltip-scale{syntax: "<number>"; inherits: false; initial-value: 1;}dialog[open].svelte-1h5lzcn{display:flex;opacity:1;--tooltip-scale: 1}dialog.svelte-1h5lzcn{position:absolute;pointer-events:none;left:50%;top:50%;border:none;box-shadow:0 0 1rem #00000080;opacity:0;transform:translate(-50%,-50%) scale(var(--tooltip-scale));--tooltip-scale: .75;padding:1rem;transition:opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}@starting-style{dialog[open].svelte-1h5lzcn{opacity:0;--tooltip-scale: .97}}.tooltip.svelte-1h5lzcn{flex-direction:column;gap:1rem;width:max-content;max-width:100%}header.svelte-1h5lzcn{text-align:center;font-size:2rem}.card.svelte-1h5lzcn{width:18rem}.content.svelte-1w43591{padding:2rem;--card-grid-gap: 2rem}header.svelte-1w43591{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid rgb(0 0 0 / .12);padding:2rem}.close.svelte-1w43591{display:flex;align-items:center;justify-content:center;border:1px solid rgb(0 0 0 / .12);background:none;width:2rem;aspect-ratio:1 / 1;font-size:1rem}.area.svelte-og50z2{pointer-events:none;position:relative;width:100%;height:100%;display:grid;grid-template:"status status" auto ". ." 1fr ". menu" auto / 1fr auto}.menu.svelte-og50z2{grid-area:menu;padding:2rem;display:flex;flex-direction:column;gap:1rem}.status.svelte-og50z2{pointer-events:auto;grid-area:status;padding:.4rem;display:flex;flex-direction:row;gap:1rem;justify-content:space-between;background-color:#fffc;backdrop-filter:blur(1rem);border-bottom:1px solid rgb(0 0 0 / .12);font-size:.8rem}.title-area.svelte-og50z2{display:flex;flex-direction:row;gap:1rem}.resource-area.svelte-og50z2{display:flex;flex-direction:row;gap:.5rem}.title.svelte-og50z2{font-weight:600}button.svelte-og50z2,a.button.svelte-og50z2{display:flex;justify-content:center;align-items:center;border-radius:100%;width:4rem;height:4rem;background-color:#000000b3;backdrop-filter:blur(5px);color:#fff;pointer-events:auto;cursor:pointer;border:1px solid rgb(0 0 0 / .12);box-shadow:0 0 .25rem #00000040;font-size:1rem}dialog[open].svelte-1chcjmg{display:flex;opacity:1;transform:translate(-50%,-50%) scale(1)}dialog.svelte-1chcjmg{padding:1.5rem;position:fixed;left:50%;top:50%;transform:translate(-50%,-50%) scale(.75);max-width:60ch;flex-direction:column;gap:1rem;border:none;border-radius:.5rem;box-shadow:0 0 4rem #00000040;opacity:0;transition:backdrop-filter .1s ease-out,opacity .1s ease-out,transform .1s ease-out,display .1s ease-out allow-discrete,overlay .1s ease-out allow-discrete}dialog.svelte-1chcjmg::backdrop{background-color:#0000;backdrop-filter:blur(0px);transition:backdrop-filter .1s,background-color .1s,display .1s allow-discrete,overlay .1s allow-discrete}dialog[open].svelte-1chcjmg::backdrop{background-color:#00000040;backdrop-filter:blur(2px)}@starting-style{dialog[open].svelte-1chcjmg{opacity:0;transform:translate(-50%,-50%) scale(.75)}dialog[open].svelte-1chcjmg::backdrop{background-color:#0000;backdrop-filter:blur(0px)}}article.svelte-1chcjmg{display:flex;flex-direction:column;gap:.5rem}.controls.svelte-1chcjmg{display:flex;gap:1rem;justify-content:flex-end}.info.svelte-1195hbs{font-style:italic;font-weight:600;color:#0006;font-size:.9rem}main.svelte-hy9bcf,div.svelte-hy9bcf{position:absolute;inset:0;width:100vw;height:100vh}.hud.svelte-hy9bcf{pointer-events:none}html{overscroll-behavior:none}
+304
app/.svelte-kit/output/server/chunks/CardGrid.js
··· 1 + import "clsx"; 2 + import { Z as attr_style, Y as attr_class, _ as attr, W as ensure_array_like } from "./index2.js"; 3 + import { e as escape_html } from "./escaping.js"; 4 + const cards = { 5 + "trading-centre": { type: "trading-centre", name: "Trading Centre", category: "trade" }, 6 + "trading-post": { type: "trading-post", name: "Trading Post", category: "trade" }, 7 + "cat-neighbourhood": { 8 + type: "cat-neighbourhood", 9 + name: "Cat Neighbourhood", 10 + category: "residential", 11 + population: [{ quantity: 6, species: "cat" }] 12 + }, 13 + "rabbit-neighbourhood": { 14 + type: "rabbit-neighbourhood", 15 + name: "Rabbit Neighbourhood", 16 + category: "residential", 17 + population: [{ quantity: 6, species: "rabbit" }] 18 + }, 19 + "water-well": { 20 + type: "water-well", 21 + name: "Water Well", 22 + category: "source", 23 + employees: 1, 24 + source: [{ type: "any" }], 25 + outputs: [{ resource: "water", quantity: 10 }] 26 + }, 27 + "wheat-farm": { 28 + type: "wheat-farm", 29 + name: "Wheat Farm", 30 + category: "source", 31 + employees: 4, 32 + source: [{ type: "terrain", terrain: "soil" }], 33 + outputs: [{ resource: "wheat", quantity: 4 }] 34 + }, 35 + "lettuce-farm": { 36 + type: "lettuce-farm", 37 + name: "Lettuce Farm", 38 + category: "source", 39 + employees: 4, 40 + source: [{ type: "terrain", terrain: "soil" }], 41 + outputs: [{ resource: "lettuce", quantity: 4 }] 42 + }, 43 + "tomato-farm": { 44 + type: "tomato-farm", 45 + name: "Tomato Farm", 46 + category: "source", 47 + employees: 4, 48 + source: [{ type: "terrain", terrain: "soil" }], 49 + outputs: [{ resource: "tomato", quantity: 4 }] 50 + }, 51 + "flour-mill": { 52 + type: "flour-mill", 53 + name: "Flour Mill", 54 + category: "production", 55 + employees: 2, 56 + inputs: [{ resource: "wheat", quantity: 1 }], 57 + outputs: [{ resource: "flour", quantity: 5 }] 58 + }, 59 + bakery: { 60 + type: "bakery", 61 + name: "Bakery", 62 + category: "production", 63 + employees: 2, 64 + inputs: [ 65 + { resource: "water", quantity: 1 }, 66 + { resource: "flour", quantity: 4 } 67 + ], 68 + outputs: [{ resource: "bread", quantity: 5 }] 69 + }, 70 + "salad-shop": { 71 + type: "salad-shop", 72 + name: "Salad Shop", 73 + category: "production", 74 + employees: 2, 75 + inputs: [ 76 + { resource: "tomato", quantity: 1 }, 77 + { resource: "lettuce", quantity: 2 } 78 + ], 79 + outputs: [{ resource: "salad", quantity: 3 }] 80 + } 81 + }; 82 + const resources = { 83 + water: { 84 + type: "water", 85 + name: "Water", 86 + value: 0 87 + }, 88 + wheat: { 89 + type: "wheat", 90 + name: "Wheat", 91 + value: 1 92 + }, 93 + lettuce: { 94 + type: "lettuce", 95 + name: "Lettuce", 96 + value: 1 97 + }, 98 + tomato: { 99 + type: "tomato", 100 + name: "Tomato", 101 + value: 1 102 + }, 103 + flour: { 104 + type: "flour", 105 + name: "Flour", 106 + value: 2 107 + }, 108 + bread: { 109 + type: "bread", 110 + name: "Bread", 111 + value: 3 112 + }, 113 + salad: { 114 + type: "salad", 115 + name: "Salad", 116 + value: 3 117 + } 118 + }; 119 + function Shimmer($$renderer, $$props) { 120 + const { style, children } = $$props; 121 + $$renderer.push(`<span${attr_style(style)} class="shimmer svelte-j4afnf">`); 122 + children?.($$renderer); 123 + $$renderer.push(`<!----></span>`); 124 + } 125 + function ResourceRef($$renderer, $$props) { 126 + $$renderer.component(($$renderer2) => { 127 + const { id } = $$props; 128 + const resource = resources[id]; 129 + Shimmer($$renderer2, { 130 + style: "--shimmer-color: var(--color-resource)", 131 + children: ($$renderer3) => { 132 + $$renderer3.push(`<!---->${escape_html(resource.name)}`); 133 + } 134 + }); 135 + }); 136 + } 137 + const species = { 138 + cat: { 139 + type: "cat", 140 + name: "Cat", 141 + namePlural: "Cats", 142 + needs: [{ type: "resource", resource: "bread", quantity: 1 }] 143 + }, 144 + rabbit: { 145 + type: "rabbit", 146 + name: "Rabbit", 147 + namePlural: "Rabbits", 148 + needs: [{ type: "resource", resource: "salad", quantity: 1 }] 149 + } 150 + }; 151 + function SpeciesRef($$renderer, $$props) { 152 + $$renderer.component(($$renderer2) => { 153 + const { id, plural = false } = $$props; 154 + const specie = species[id]; 155 + Shimmer($$renderer2, { 156 + style: "--shimmer-color: var(--color-species)", 157 + children: ($$renderer3) => { 158 + $$renderer3.push(`<!---->${escape_html(plural ? specie.namePlural : specie.name)}`); 159 + } 160 + }); 161 + }); 162 + } 163 + const terrains = { 164 + soil: { 165 + type: "soil", 166 + name: "Soil" 167 + }, 168 + grass: { 169 + type: "grass", 170 + name: "Grass" 171 + } 172 + }; 173 + function TerrainRef($$renderer, $$props) { 174 + $$renderer.component(($$renderer2) => { 175 + const { id } = $$props; 176 + const terrain = terrains[id]; 177 + Shimmer($$renderer2, { 178 + style: "--shimmer-color: var(--color-terrain)", 179 + children: ($$renderer3) => { 180 + $$renderer3.push(`<!---->${escape_html(terrain.name)}`); 181 + } 182 + }); 183 + }); 184 + } 185 + function Card($$renderer, $$props) { 186 + $$renderer.component(($$renderer2) => { 187 + const { card, onSelect, disabled = false } = $$props; 188 + $$renderer2.push(`<div${attr_class("card svelte-1udyrqm", void 0, { "selectable": !disabled && onSelect, "disabled": disabled })} role="button"${attr("tabindex", !disabled && onSelect ? 0 : void 0)}><div class="title svelte-1udyrqm">${escape_html(card.name)} | ${escape_html(card.category)}</div> <div class="image svelte-1udyrqm"></div> <div class="info svelte-1udyrqm">`); 189 + if (card.category === "residential") { 190 + $$renderer2.push("<!--[-->"); 191 + $$renderer2.push(`<!--[-->`); 192 + const each_array = ensure_array_like(card.population); 193 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 194 + let pop = each_array[$$index]; 195 + $$renderer2.push(`<p>Houses ${escape_html(pop.quantity)} `); 196 + SpeciesRef($$renderer2, { id: pop.species, plural: pop.quantity !== 1 }); 197 + $$renderer2.push(`<!----></p>`); 198 + } 199 + $$renderer2.push(`<!--]-->`); 200 + } else { 201 + $$renderer2.push("<!--[!-->"); 202 + if (card.category === "production") { 203 + $$renderer2.push("<!--[-->"); 204 + $$renderer2.push(`<!--[-->`); 205 + const each_array_1 = ensure_array_like(card.inputs); 206 + for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) { 207 + let input = each_array_1[$$index_1]; 208 + $$renderer2.push(`<p>Consumes ${escape_html(input.quantity)} `); 209 + ResourceRef($$renderer2, { id: input.resource }); 210 + $$renderer2.push(`<!----></p>`); 211 + } 212 + $$renderer2.push(`<!--]--> <!--[-->`); 213 + const each_array_2 = ensure_array_like(card.outputs); 214 + for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) { 215 + let output = each_array_2[$$index_2]; 216 + $$renderer2.push(`<p>Produces ${escape_html(output.quantity)} `); 217 + ResourceRef($$renderer2, { id: output.resource }); 218 + $$renderer2.push(`<!----></p>`); 219 + } 220 + $$renderer2.push(`<!--]-->`); 221 + } else { 222 + $$renderer2.push("<!--[!-->"); 223 + if (card.category === "source") { 224 + $$renderer2.push("<!--[-->"); 225 + $$renderer2.push(`<!--[-->`); 226 + const each_array_3 = ensure_array_like(card.source); 227 + for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) { 228 + let source = each_array_3[$$index_3]; 229 + if (source.type === "any") { 230 + $$renderer2.push("<!--[-->"); 231 + $$renderer2.push(`<p>Produces anywhere</p>`); 232 + } else { 233 + $$renderer2.push("<!--[!-->"); 234 + } 235 + $$renderer2.push(`<!--]--> `); 236 + if (source.type === "terrain") { 237 + $$renderer2.push("<!--[-->"); 238 + $$renderer2.push(`<p>Produces on `); 239 + TerrainRef($$renderer2, { id: source.terrain }); 240 + $$renderer2.push(`<!----></p>`); 241 + } else { 242 + $$renderer2.push("<!--[!-->"); 243 + } 244 + $$renderer2.push(`<!--]-->`); 245 + } 246 + $$renderer2.push(`<!--]--> <!--[-->`); 247 + const each_array_4 = ensure_array_like(card.outputs); 248 + for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) { 249 + let output = each_array_4[$$index_4]; 250 + $$renderer2.push(`<p>Yields ${escape_html(output.quantity)} `); 251 + ResourceRef($$renderer2, { id: output.resource }); 252 + $$renderer2.push(`<!----></p>`); 253 + } 254 + $$renderer2.push(`<!--]-->`); 255 + } else { 256 + $$renderer2.push("<!--[!-->"); 257 + } 258 + $$renderer2.push(`<!--]-->`); 259 + } 260 + $$renderer2.push(`<!--]-->`); 261 + } 262 + $$renderer2.push(`<!--]--></div></div>`); 263 + }); 264 + } 265 + function Grid($$renderer, $$props) { 266 + const { items, item } = $$props; 267 + $$renderer.push(`<div class="grid svelte-1hhz0mg"><!--[-->`); 268 + const each_array = ensure_array_like(items); 269 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 270 + let data = each_array[$$index]; 271 + item($$renderer, data); 272 + $$renderer.push(`<!---->`); 273 + } 274 + $$renderer.push(`<!--]--></div>`); 275 + } 276 + function CardGrid($$renderer, $$props) { 277 + const { cards: cards2, card } = $$props; 278 + { 279 + let item = function($$renderer2, data) { 280 + if (card) { 281 + $$renderer2.push("<!--[-->"); 282 + card($$renderer2, data); 283 + $$renderer2.push(`<!---->`); 284 + } else { 285 + $$renderer2.push("<!--[!-->"); 286 + Card($$renderer2, { card: data }); 287 + } 288 + $$renderer2.push(`<!--]-->`); 289 + }; 290 + Grid($$renderer, { items: cards2, item }); 291 + } 292 + } 293 + export { 294 + CardGrid as C, 295 + Grid as G, 296 + ResourceRef as R, 297 + Shimmer as S, 298 + TerrainRef as T, 299 + Card as a, 300 + SpeciesRef as b, 301 + cards as c, 302 + resources as r, 303 + species as s 304 + };
+21
app/.svelte-kit/output/server/chunks/DragWindow.js
··· 1 + import { Z as attr_style, X as bind_props, $ as stringify } from "./index2.js"; 2 + function DragWindow($$renderer, $$props) { 3 + $$renderer.component(($$renderer2) => { 4 + let { 5 + tileWidth = 128, 6 + tileHeight = 128, 7 + children, 8 + offsetX = 0, 9 + offsetY = 0, 10 + clientWidth = 0, 11 + clientHeight = 0 12 + } = $$props; 13 + $$renderer2.push(`<div class="window svelte-1j4berq"${attr_style(`--offset-x: ${stringify(offsetX)}px; --offset-y: ${stringify(offsetY)}px; --tile-width: ${stringify(tileWidth)}px; --tile-height: ${stringify(tileHeight)}px;`)} role="presentation">`); 14 + children?.($$renderer2); 15 + $$renderer2.push(`<!----></div>`); 16 + bind_props($$props, { offsetX, offsetY, clientWidth, clientHeight }); 17 + }); 18 + } 19 + export { 20 + DragWindow as D 21 + };
+33
app/.svelte-kit/output/server/chunks/GridLines.js
··· 1 + import { Y as attr_class, _ as attr, Z as attr_style, $ as stringify } from "./index2.js"; 2 + function DragTile($$renderer, $$props) { 3 + $$renderer.component(($$renderer2) => { 4 + const { x, y, loose = false, onClick, onMove, children } = $$props; 5 + let touchDragging = null; 6 + let draggedX = 0; 7 + let draggedY = 0; 8 + const looseRotation = Math.sign(Math.random() - 0.5) * (Math.round(Math.random() * 10) + 5); 9 + const dragging = touchDragging; 10 + { 11 + $$renderer2.push("<!--[!-->"); 12 + } 13 + $$renderer2.push(`<!--]--> <div${attr_class("griditem tile svelte-1docm9i", void 0, { 14 + "loose": loose, 15 + "dragging": dragging, 16 + "clickable": !!onClick, 17 + "draggable": !!onMove 18 + })}${attr("aria-grabbed", false)}${attr_style(` --loose-x: ${stringify(loose ? x : 0)}px; --loose-y: ${stringify(loose ? y : 0)}px; --grid-x: ${stringify(loose ? 0 : x)}; --grid-y: ${stringify(loose ? 0 : y)}; --drag-x: ${stringify(draggedX)}px; --drag-y: ${stringify(draggedY)}px; --loose-rotation: ${stringify(loose && !dragging ? looseRotation : 0)}deg; `)} role="presentation">`); 19 + children?.($$renderer2); 20 + $$renderer2.push(`<!----></div>`); 21 + }); 22 + } 23 + function GridLines($$renderer, $$props) { 24 + const { tileWidth, tileHeight } = $$props; 25 + $$renderer.push(`<div class="gridlines svelte-2yd5bj"${attr_style("", { 26 + "--tile-width": tileWidth !== void 0 ? `${tileWidth}px` : void 0, 27 + "--tile-height": tileHeight !== void 0 ? `${tileHeight}px` : void 0 28 + })}></div>`); 29 + } 30 + export { 31 + DragTile as D, 32 + GridLines as G 33 + };
+29
app/.svelte-kit/output/server/chunks/client.js
··· 1 + import "clsx"; 2 + import "@sveltejs/kit/internal"; 3 + import "./exports.js"; 4 + import "./utils.js"; 5 + import { w as writable } from "./index.js"; 6 + import "@sveltejs/kit/internal/server"; 7 + import "./state.svelte.js"; 8 + function create_updated_store() { 9 + const { set, subscribe } = writable(false); 10 + { 11 + return { 12 + subscribe, 13 + // eslint-disable-next-line @typescript-eslint/require-await 14 + check: async () => false 15 + }; 16 + } 17 + } 18 + const stores = { 19 + updated: /* @__PURE__ */ create_updated_store() 20 + }; 21 + function goto(url, opts = {}) { 22 + { 23 + throw new Error("Cannot call goto(...) on the server"); 24 + } 25 + } 26 + export { 27 + goto as g, 28 + stores as s 29 + };
+53
app/.svelte-kit/output/server/chunks/context.js
··· 1 + function lifecycle_outside_component(name) { 2 + { 3 + throw new Error(`https://svelte.dev/e/lifecycle_outside_component`); 4 + } 5 + } 6 + var ssr_context = null; 7 + function set_ssr_context(v) { 8 + ssr_context = v; 9 + } 10 + function getContext(key) { 11 + const context_map = get_or_init_context_map(); 12 + const result = ( 13 + /** @type {T} */ 14 + context_map.get(key) 15 + ); 16 + return result; 17 + } 18 + function setContext(key, context) { 19 + get_or_init_context_map().set(key, context); 20 + return context; 21 + } 22 + function get_or_init_context_map(name) { 23 + if (ssr_context === null) { 24 + lifecycle_outside_component(); 25 + } 26 + return ssr_context.c ??= new Map(get_parent_context(ssr_context) || void 0); 27 + } 28 + function push(fn) { 29 + ssr_context = { p: ssr_context, c: null, r: null }; 30 + } 31 + function pop() { 32 + ssr_context = /** @type {SSRContext} */ 33 + ssr_context.p; 34 + } 35 + function get_parent_context(ssr_context2) { 36 + let parent = ssr_context2.p; 37 + while (parent !== null) { 38 + const context_map = parent.c; 39 + if (context_map !== null) { 40 + return context_map; 41 + } 42 + parent = parent.p; 43 + } 44 + return null; 45 + } 46 + export { 47 + set_ssr_context as a, 48 + ssr_context as b, 49 + pop as c, 50 + getContext as g, 51 + push as p, 52 + setContext as s 53 + };
+34
app/.svelte-kit/output/server/chunks/environment.js
··· 1 + let base = ""; 2 + let assets = base; 3 + const app_dir = "_app"; 4 + const relative = true; 5 + const initial = { base, assets }; 6 + function override(paths) { 7 + base = paths.base; 8 + assets = paths.assets; 9 + } 10 + function reset() { 11 + base = initial.base; 12 + assets = initial.assets; 13 + } 14 + function set_assets(path) { 15 + assets = initial.assets = path; 16 + } 17 + let prerendering = false; 18 + function set_building() { 19 + } 20 + function set_prerendering() { 21 + prerendering = true; 22 + } 23 + export { 24 + assets as a, 25 + base as b, 26 + app_dir as c, 27 + reset as d, 28 + set_building as e, 29 + set_prerendering as f, 30 + override as o, 31 + prerendering as p, 32 + relative as r, 33 + set_assets as s 34 + };
+68
app/.svelte-kit/output/server/chunks/escaping.js
··· 1 + var is_array = Array.isArray; 2 + var index_of = Array.prototype.indexOf; 3 + var array_from = Array.from; 4 + var define_property = Object.defineProperty; 5 + var get_descriptor = Object.getOwnPropertyDescriptor; 6 + var object_prototype = Object.prototype; 7 + var array_prototype = Array.prototype; 8 + var get_prototype_of = Object.getPrototypeOf; 9 + var is_extensible = Object.isExtensible; 10 + const noop = () => { 11 + }; 12 + function run_all(arr) { 13 + for (var i = 0; i < arr.length; i++) { 14 + arr[i](); 15 + } 16 + } 17 + function deferred() { 18 + var resolve; 19 + var reject; 20 + var promise = new Promise((res, rej) => { 21 + resolve = res; 22 + reject = rej; 23 + }); 24 + return { promise, resolve, reject }; 25 + } 26 + function equals(value) { 27 + return value === this.v; 28 + } 29 + function safe_not_equal(a, b) { 30 + return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function"; 31 + } 32 + function safe_equals(value) { 33 + return !safe_not_equal(value, this.v); 34 + } 35 + const ATTR_REGEX = /[&"<]/g; 36 + const CONTENT_REGEX = /[&<]/g; 37 + function escape_html(value, is_attr) { 38 + const str = String(value ?? ""); 39 + const pattern = is_attr ? ATTR_REGEX : CONTENT_REGEX; 40 + pattern.lastIndex = 0; 41 + let escaped = ""; 42 + let last = 0; 43 + while (pattern.test(str)) { 44 + const i = pattern.lastIndex - 1; 45 + const ch = str[i]; 46 + escaped += str.substring(last, i) + (ch === "&" ? "&amp;" : ch === '"' ? "&quot;" : "&lt;"); 47 + last = i + 1; 48 + } 49 + return escaped + str.substring(last); 50 + } 51 + export { 52 + array_from as a, 53 + deferred as b, 54 + safe_equals as c, 55 + define_property as d, 56 + escape_html as e, 57 + equals as f, 58 + array_prototype as g, 59 + get_descriptor as h, 60 + get_prototype_of as i, 61 + is_array as j, 62 + is_extensible as k, 63 + index_of as l, 64 + noop as n, 65 + object_prototype as o, 66 + run_all as r, 67 + safe_not_equal as s 68 + };
+174
app/.svelte-kit/output/server/chunks/exports.js
··· 1 + const SCHEME = /^[a-z][a-z\d+\-.]+:/i; 2 + const internal = new URL("sveltekit-internal://"); 3 + function resolve(base, path) { 4 + if (path[0] === "/" && path[1] === "/") return path; 5 + let url = new URL(base, internal); 6 + url = new URL(path, url); 7 + return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href; 8 + } 9 + function normalize_path(path, trailing_slash) { 10 + if (path === "/" || trailing_slash === "ignore") return path; 11 + if (trailing_slash === "never") { 12 + return path.endsWith("/") ? path.slice(0, -1) : path; 13 + } else if (trailing_slash === "always" && !path.endsWith("/")) { 14 + return path + "/"; 15 + } 16 + return path; 17 + } 18 + function decode_pathname(pathname) { 19 + return pathname.split("%25").map(decodeURI).join("%25"); 20 + } 21 + function decode_params(params) { 22 + for (const key in params) { 23 + params[key] = decodeURIComponent(params[key]); 24 + } 25 + return params; 26 + } 27 + function make_trackable(url, callback, search_params_callback, allow_hash = false) { 28 + const tracked = new URL(url); 29 + Object.defineProperty(tracked, "searchParams", { 30 + value: new Proxy(tracked.searchParams, { 31 + get(obj, key) { 32 + if (key === "get" || key === "getAll" || key === "has") { 33 + return (param) => { 34 + search_params_callback(param); 35 + return obj[key](param); 36 + }; 37 + } 38 + callback(); 39 + const value = Reflect.get(obj, key); 40 + return typeof value === "function" ? value.bind(obj) : value; 41 + } 42 + }), 43 + enumerable: true, 44 + configurable: true 45 + }); 46 + const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"]; 47 + if (allow_hash) tracked_url_properties.push("hash"); 48 + for (const property of tracked_url_properties) { 49 + Object.defineProperty(tracked, property, { 50 + get() { 51 + callback(); 52 + return url[property]; 53 + }, 54 + enumerable: true, 55 + configurable: true 56 + }); 57 + } 58 + { 59 + tracked[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { 60 + return inspect(url, opts); 61 + }; 62 + tracked.searchParams[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { 63 + return inspect(url.searchParams, opts); 64 + }; 65 + } 66 + if (!allow_hash) { 67 + disable_hash(tracked); 68 + } 69 + return tracked; 70 + } 71 + function disable_hash(url) { 72 + allow_nodejs_console_log(url); 73 + Object.defineProperty(url, "hash", { 74 + get() { 75 + throw new Error( 76 + "Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead" 77 + ); 78 + } 79 + }); 80 + } 81 + function disable_search(url) { 82 + allow_nodejs_console_log(url); 83 + for (const property of ["search", "searchParams"]) { 84 + Object.defineProperty(url, property, { 85 + get() { 86 + throw new Error(`Cannot access url.${property} on a page with prerendering enabled`); 87 + } 88 + }); 89 + } 90 + } 91 + function allow_nodejs_console_log(url) { 92 + { 93 + url[/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => { 94 + return inspect(new URL(url), opts); 95 + }; 96 + } 97 + } 98 + function validator(expected) { 99 + function validate(module, file) { 100 + if (!module) return; 101 + for (const key in module) { 102 + if (key[0] === "_" || expected.has(key)) continue; 103 + const values = [...expected.values()]; 104 + const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`; 105 + throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`); 106 + } 107 + } 108 + return validate; 109 + } 110 + function hint_for_supported_files(key, ext = ".js") { 111 + const supported_files = []; 112 + if (valid_layout_exports.has(key)) { 113 + supported_files.push(`+layout${ext}`); 114 + } 115 + if (valid_page_exports.has(key)) { 116 + supported_files.push(`+page${ext}`); 117 + } 118 + if (valid_layout_server_exports.has(key)) { 119 + supported_files.push(`+layout.server${ext}`); 120 + } 121 + if (valid_page_server_exports.has(key)) { 122 + supported_files.push(`+page.server${ext}`); 123 + } 124 + if (valid_server_exports.has(key)) { 125 + supported_files.push(`+server${ext}`); 126 + } 127 + if (supported_files.length > 0) { 128 + return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`; 129 + } 130 + } 131 + const valid_layout_exports = /* @__PURE__ */ new Set([ 132 + "load", 133 + "prerender", 134 + "csr", 135 + "ssr", 136 + "trailingSlash", 137 + "config" 138 + ]); 139 + const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]); 140 + const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]); 141 + const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]); 142 + const valid_server_exports = /* @__PURE__ */ new Set([ 143 + "GET", 144 + "POST", 145 + "PATCH", 146 + "PUT", 147 + "DELETE", 148 + "OPTIONS", 149 + "HEAD", 150 + "fallback", 151 + "prerender", 152 + "trailingSlash", 153 + "config", 154 + "entries" 155 + ]); 156 + const validate_layout_exports = validator(valid_layout_exports); 157 + const validate_page_exports = validator(valid_page_exports); 158 + const validate_layout_server_exports = validator(valid_layout_server_exports); 159 + const validate_page_server_exports = validator(valid_page_server_exports); 160 + const validate_server_exports = validator(valid_server_exports); 161 + export { 162 + SCHEME as S, 163 + decode_params as a, 164 + validate_layout_exports as b, 165 + validate_page_server_exports as c, 166 + disable_search as d, 167 + validate_page_exports as e, 168 + decode_pathname as f, 169 + validate_server_exports as g, 170 + make_trackable as m, 171 + normalize_path as n, 172 + resolve as r, 173 + validate_layout_server_exports as v 174 + };
+4
app/.svelte-kit/output/server/chunks/false.js
··· 1 + const DEV = false; 2 + export { 3 + DEV as D 4 + };
+4
app/.svelte-kit/output/server/chunks/index-server.js
··· 1 + const SvelteMap = globalThis.Map; 2 + export { 3 + SvelteMap as S 4 + };
+59
app/.svelte-kit/output/server/chunks/index.js
··· 1 + import { n as noop, s as safe_not_equal } from "./escaping.js"; 2 + import "clsx"; 3 + const subscriber_queue = []; 4 + function readable(value, start) { 5 + return { 6 + subscribe: writable(value, start).subscribe 7 + }; 8 + } 9 + function writable(value, start = noop) { 10 + let stop = null; 11 + const subscribers = /* @__PURE__ */ new Set(); 12 + function set(new_value) { 13 + if (safe_not_equal(value, new_value)) { 14 + value = new_value; 15 + if (stop) { 16 + const run_queue = !subscriber_queue.length; 17 + for (const subscriber of subscribers) { 18 + subscriber[1](); 19 + subscriber_queue.push(subscriber, value); 20 + } 21 + if (run_queue) { 22 + for (let i = 0; i < subscriber_queue.length; i += 2) { 23 + subscriber_queue[i][0](subscriber_queue[i + 1]); 24 + } 25 + subscriber_queue.length = 0; 26 + } 27 + } 28 + } 29 + } 30 + function update(fn) { 31 + set(fn( 32 + /** @type {T} */ 33 + value 34 + )); 35 + } 36 + function subscribe(run, invalidate = noop) { 37 + const subscriber = [run, invalidate]; 38 + subscribers.add(subscriber); 39 + if (subscribers.size === 1) { 40 + stop = start(set, update) || noop; 41 + } 42 + run( 43 + /** @type {T} */ 44 + value 45 + ); 46 + return () => { 47 + subscribers.delete(subscriber); 48 + if (subscribers.size === 0 && stop) { 49 + stop(); 50 + stop = null; 51 + } 52 + }; 53 + } 54 + return { set, update, subscribe }; 55 + } 56 + export { 57 + readable as r, 58 + writable as w 59 + };
+2715
app/.svelte-kit/output/server/chunks/index2.js
··· 1 + import { r as run_all, b as deferred, c as safe_equals, f as equals, o as object_prototype, g as array_prototype, h as get_descriptor, i as get_prototype_of, j as is_array, k as is_extensible, l as index_of, e as escape_html, n as noop } from "./escaping.js"; 2 + import { clsx as clsx$1 } from "clsx"; 3 + import { D as DEV } from "./false.js"; 4 + import { a as set_ssr_context, b as ssr_context, p as push$1, c as pop$1 } from "./context.js"; 5 + const DERIVED = 1 << 1; 6 + const EFFECT = 1 << 2; 7 + const RENDER_EFFECT = 1 << 3; 8 + const MANAGED_EFFECT = 1 << 24; 9 + const BLOCK_EFFECT = 1 << 4; 10 + const BRANCH_EFFECT = 1 << 5; 11 + const ROOT_EFFECT = 1 << 6; 12 + const BOUNDARY_EFFECT = 1 << 7; 13 + const CONNECTED = 1 << 9; 14 + const CLEAN = 1 << 10; 15 + const DIRTY = 1 << 11; 16 + const MAYBE_DIRTY = 1 << 12; 17 + const INERT = 1 << 13; 18 + const DESTROYED = 1 << 14; 19 + const EFFECT_RAN = 1 << 15; 20 + const EFFECT_TRANSPARENT = 1 << 16; 21 + const EAGER_EFFECT = 1 << 17; 22 + const HEAD_EFFECT = 1 << 18; 23 + const EFFECT_PRESERVED = 1 << 19; 24 + const USER_EFFECT = 1 << 20; 25 + const WAS_MARKED = 1 << 15; 26 + const REACTION_IS_UPDATING = 1 << 21; 27 + const ASYNC = 1 << 22; 28 + const ERROR_VALUE = 1 << 23; 29 + const STATE_SYMBOL = /* @__PURE__ */ Symbol("$state"); 30 + const LEGACY_PROPS = /* @__PURE__ */ Symbol("legacy props"); 31 + const STALE_REACTION = new class StaleReactionError extends Error { 32 + name = "StaleReactionError"; 33 + message = "The reaction that called `getAbortSignal()` was re-run or destroyed"; 34 + }(); 35 + const COMMENT_NODE = 8; 36 + function effect_update_depth_exceeded() { 37 + { 38 + throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`); 39 + } 40 + } 41 + function hydration_failed() { 42 + { 43 + throw new Error(`https://svelte.dev/e/hydration_failed`); 44 + } 45 + } 46 + function state_descriptors_fixed() { 47 + { 48 + throw new Error(`https://svelte.dev/e/state_descriptors_fixed`); 49 + } 50 + } 51 + function state_prototype_fixed() { 52 + { 53 + throw new Error(`https://svelte.dev/e/state_prototype_fixed`); 54 + } 55 + } 56 + function state_unsafe_mutation() { 57 + { 58 + throw new Error(`https://svelte.dev/e/state_unsafe_mutation`); 59 + } 60 + } 61 + function svelte_boundary_reset_onerror() { 62 + { 63 + throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`); 64 + } 65 + } 66 + const HYDRATION_START = "["; 67 + const HYDRATION_START_ELSE = "[!"; 68 + const HYDRATION_END = "]"; 69 + const HYDRATION_ERROR = {}; 70 + const ELEMENT_IS_NAMESPACED = 1; 71 + const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1; 72 + const ELEMENT_IS_INPUT = 1 << 2; 73 + const UNINITIALIZED = /* @__PURE__ */ Symbol(); 74 + let tracing_mode_flag = false; 75 + let component_context = null; 76 + function set_component_context(context) { 77 + component_context = context; 78 + } 79 + function push(props, runes = false, fn) { 80 + component_context = { 81 + p: component_context, 82 + i: false, 83 + c: null, 84 + e: null, 85 + s: props, 86 + x: null, 87 + l: null 88 + }; 89 + } 90 + function pop(component) { 91 + var context = ( 92 + /** @type {ComponentContext} */ 93 + component_context 94 + ); 95 + var effects = context.e; 96 + if (effects !== null) { 97 + context.e = null; 98 + for (var fn of effects) { 99 + create_user_effect(fn); 100 + } 101 + } 102 + context.i = true; 103 + component_context = context.p; 104 + return ( 105 + /** @type {T} */ 106 + {} 107 + ); 108 + } 109 + function is_runes() { 110 + return true; 111 + } 112 + let micro_tasks = []; 113 + function run_micro_tasks() { 114 + var tasks = micro_tasks; 115 + micro_tasks = []; 116 + run_all(tasks); 117 + } 118 + function queue_micro_task(fn) { 119 + if (micro_tasks.length === 0 && !is_flushing_sync) { 120 + var tasks = micro_tasks; 121 + queueMicrotask(() => { 122 + if (tasks === micro_tasks) run_micro_tasks(); 123 + }); 124 + } 125 + micro_tasks.push(fn); 126 + } 127 + function flush_tasks() { 128 + while (micro_tasks.length > 0) { 129 + run_micro_tasks(); 130 + } 131 + } 132 + function handle_error(error) { 133 + var effect = active_effect; 134 + if (effect === null) { 135 + active_reaction.f |= ERROR_VALUE; 136 + return error; 137 + } 138 + if ((effect.f & EFFECT_RAN) === 0) { 139 + if ((effect.f & BOUNDARY_EFFECT) === 0) { 140 + throw error; 141 + } 142 + effect.b.error(error); 143 + } else { 144 + invoke_error_boundary(error, effect); 145 + } 146 + } 147 + function invoke_error_boundary(error, effect) { 148 + while (effect !== null) { 149 + if ((effect.f & BOUNDARY_EFFECT) !== 0) { 150 + try { 151 + effect.b.error(error); 152 + return; 153 + } catch (e) { 154 + error = e; 155 + } 156 + } 157 + effect = effect.parent; 158 + } 159 + throw error; 160 + } 161 + const batches = /* @__PURE__ */ new Set(); 162 + let current_batch = null; 163 + let batch_values = null; 164 + let queued_root_effects = []; 165 + let last_scheduled_effect = null; 166 + let is_flushing = false; 167 + let is_flushing_sync = false; 168 + class Batch { 169 + committed = false; 170 + /** 171 + * The current values of any sources that are updated in this batch 172 + * They keys of this map are identical to `this.#previous` 173 + * @type {Map<Source, any>} 174 + */ 175 + current = /* @__PURE__ */ new Map(); 176 + /** 177 + * The values of any sources that are updated in this batch _before_ those updates took place. 178 + * They keys of this map are identical to `this.#current` 179 + * @type {Map<Source, any>} 180 + */ 181 + previous = /* @__PURE__ */ new Map(); 182 + /** 183 + * When the batch is committed (and the DOM is updated), we need to remove old branches 184 + * and append new ones by calling the functions added inside (if/each/key/etc) blocks 185 + * @type {Set<() => void>} 186 + */ 187 + #commit_callbacks = /* @__PURE__ */ new Set(); 188 + /** 189 + * If a fork is discarded, we need to destroy any effects that are no longer needed 190 + * @type {Set<(batch: Batch) => void>} 191 + */ 192 + #discard_callbacks = /* @__PURE__ */ new Set(); 193 + /** 194 + * The number of async effects that are currently in flight 195 + */ 196 + #pending = 0; 197 + /** 198 + * The number of async effects that are currently in flight, _not_ inside a pending boundary 199 + */ 200 + #blocking_pending = 0; 201 + /** 202 + * A deferred that resolves when the batch is committed, used with `settled()` 203 + * TODO replace with Promise.withResolvers once supported widely enough 204 + * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null} 205 + */ 206 + #deferred = null; 207 + /** 208 + * Deferred effects (which run after async work has completed) that are DIRTY 209 + * @type {Set<Effect>} 210 + */ 211 + #dirty_effects = /* @__PURE__ */ new Set(); 212 + /** 213 + * Deferred effects that are MAYBE_DIRTY 214 + * @type {Set<Effect>} 215 + */ 216 + #maybe_dirty_effects = /* @__PURE__ */ new Set(); 217 + /** 218 + * A set of branches that still exist, but will be destroyed when this batch 219 + * is committed — we skip over these during `process` 220 + * @type {Set<Effect>} 221 + */ 222 + skipped_effects = /* @__PURE__ */ new Set(); 223 + is_fork = false; 224 + is_deferred() { 225 + return this.is_fork || this.#blocking_pending > 0; 226 + } 227 + /** 228 + * 229 + * @param {Effect[]} root_effects 230 + */ 231 + process(root_effects) { 232 + queued_root_effects = []; 233 + this.apply(); 234 + var target = { 235 + parent: null, 236 + effect: null, 237 + effects: [], 238 + render_effects: [] 239 + }; 240 + for (const root of root_effects) { 241 + this.#traverse_effect_tree(root, target); 242 + } 243 + if (!this.is_fork) { 244 + this.#resolve(); 245 + } 246 + if (this.is_deferred()) { 247 + this.#defer_effects(target.effects); 248 + this.#defer_effects(target.render_effects); 249 + } else { 250 + current_batch = null; 251 + flush_queued_effects(target.render_effects); 252 + flush_queued_effects(target.effects); 253 + this.#deferred?.resolve(); 254 + } 255 + batch_values = null; 256 + } 257 + /** 258 + * Traverse the effect tree, executing effects or stashing 259 + * them for later execution as appropriate 260 + * @param {Effect} root 261 + * @param {EffectTarget} target 262 + */ 263 + #traverse_effect_tree(root, target) { 264 + root.f ^= CLEAN; 265 + var effect = root.first; 266 + while (effect !== null) { 267 + var flags = effect.f; 268 + var is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0; 269 + var is_skippable_branch = is_branch && (flags & CLEAN) !== 0; 270 + var skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect); 271 + if ((effect.f & BOUNDARY_EFFECT) !== 0 && effect.b?.is_pending()) { 272 + target = { 273 + parent: target, 274 + effect, 275 + effects: [], 276 + render_effects: [] 277 + }; 278 + } 279 + if (!skip && effect.fn !== null) { 280 + if (is_branch) { 281 + effect.f ^= CLEAN; 282 + } else if ((flags & EFFECT) !== 0) { 283 + target.effects.push(effect); 284 + } else if (is_dirty(effect)) { 285 + if ((effect.f & BLOCK_EFFECT) !== 0) this.#dirty_effects.add(effect); 286 + update_effect(effect); 287 + } 288 + var child = effect.first; 289 + if (child !== null) { 290 + effect = child; 291 + continue; 292 + } 293 + } 294 + var parent = effect.parent; 295 + effect = effect.next; 296 + while (effect === null && parent !== null) { 297 + if (parent === target.effect) { 298 + this.#defer_effects(target.effects); 299 + this.#defer_effects(target.render_effects); 300 + target = /** @type {EffectTarget} */ 301 + target.parent; 302 + } 303 + effect = parent.next; 304 + parent = parent.parent; 305 + } 306 + } 307 + } 308 + /** 309 + * @param {Effect[]} effects 310 + */ 311 + #defer_effects(effects) { 312 + for (const e of effects) { 313 + if ((e.f & DIRTY) !== 0) { 314 + this.#dirty_effects.add(e); 315 + } else if ((e.f & MAYBE_DIRTY) !== 0) { 316 + this.#maybe_dirty_effects.add(e); 317 + } 318 + this.#clear_marked(e.deps); 319 + set_signal_status(e, CLEAN); 320 + } 321 + } 322 + /** 323 + * @param {Value[] | null} deps 324 + */ 325 + #clear_marked(deps) { 326 + if (deps === null) return; 327 + for (const dep of deps) { 328 + if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) { 329 + continue; 330 + } 331 + dep.f ^= WAS_MARKED; 332 + this.#clear_marked( 333 + /** @type {Derived} */ 334 + dep.deps 335 + ); 336 + } 337 + } 338 + /** 339 + * Associate a change to a given source with the current 340 + * batch, noting its previous and current values 341 + * @param {Source} source 342 + * @param {any} value 343 + */ 344 + capture(source2, value) { 345 + if (!this.previous.has(source2)) { 346 + this.previous.set(source2, value); 347 + } 348 + if ((source2.f & ERROR_VALUE) === 0) { 349 + this.current.set(source2, source2.v); 350 + batch_values?.set(source2, source2.v); 351 + } 352 + } 353 + activate() { 354 + current_batch = this; 355 + this.apply(); 356 + } 357 + deactivate() { 358 + if (current_batch !== this) return; 359 + current_batch = null; 360 + batch_values = null; 361 + } 362 + flush() { 363 + this.activate(); 364 + if (queued_root_effects.length > 0) { 365 + flush_effects(); 366 + if (current_batch !== null && current_batch !== this) { 367 + return; 368 + } 369 + } else if (this.#pending === 0) { 370 + this.process([]); 371 + } 372 + this.deactivate(); 373 + } 374 + discard() { 375 + for (const fn of this.#discard_callbacks) fn(this); 376 + this.#discard_callbacks.clear(); 377 + } 378 + #resolve() { 379 + if (this.#blocking_pending === 0) { 380 + for (const fn of this.#commit_callbacks) fn(); 381 + this.#commit_callbacks.clear(); 382 + } 383 + if (this.#pending === 0) { 384 + this.#commit(); 385 + } 386 + } 387 + #commit() { 388 + if (batches.size > 1) { 389 + this.previous.clear(); 390 + var previous_batch_values = batch_values; 391 + var is_earlier = true; 392 + var dummy_target = { 393 + parent: null, 394 + effect: null, 395 + effects: [], 396 + render_effects: [] 397 + }; 398 + for (const batch of batches) { 399 + if (batch === this) { 400 + is_earlier = false; 401 + continue; 402 + } 403 + const sources = []; 404 + for (const [source2, value] of this.current) { 405 + if (batch.current.has(source2)) { 406 + if (is_earlier && value !== batch.current.get(source2)) { 407 + batch.current.set(source2, value); 408 + } else { 409 + continue; 410 + } 411 + } 412 + sources.push(source2); 413 + } 414 + if (sources.length === 0) { 415 + continue; 416 + } 417 + const others = [...batch.current.keys()].filter((s) => !this.current.has(s)); 418 + if (others.length > 0) { 419 + var prev_queued_root_effects = queued_root_effects; 420 + queued_root_effects = []; 421 + const marked = /* @__PURE__ */ new Set(); 422 + const checked = /* @__PURE__ */ new Map(); 423 + for (const source2 of sources) { 424 + mark_effects(source2, others, marked, checked); 425 + } 426 + if (queued_root_effects.length > 0) { 427 + current_batch = batch; 428 + batch.apply(); 429 + for (const root of queued_root_effects) { 430 + batch.#traverse_effect_tree(root, dummy_target); 431 + } 432 + batch.deactivate(); 433 + } 434 + queued_root_effects = prev_queued_root_effects; 435 + } 436 + } 437 + current_batch = null; 438 + batch_values = previous_batch_values; 439 + } 440 + this.committed = true; 441 + batches.delete(this); 442 + } 443 + /** 444 + * 445 + * @param {boolean} blocking 446 + */ 447 + increment(blocking) { 448 + this.#pending += 1; 449 + if (blocking) this.#blocking_pending += 1; 450 + } 451 + /** 452 + * 453 + * @param {boolean} blocking 454 + */ 455 + decrement(blocking) { 456 + this.#pending -= 1; 457 + if (blocking) this.#blocking_pending -= 1; 458 + this.revive(); 459 + } 460 + revive() { 461 + for (const e of this.#dirty_effects) { 462 + this.#maybe_dirty_effects.delete(e); 463 + set_signal_status(e, DIRTY); 464 + schedule_effect(e); 465 + } 466 + for (const e of this.#maybe_dirty_effects) { 467 + set_signal_status(e, MAYBE_DIRTY); 468 + schedule_effect(e); 469 + } 470 + this.flush(); 471 + } 472 + /** @param {() => void} fn */ 473 + oncommit(fn) { 474 + this.#commit_callbacks.add(fn); 475 + } 476 + /** @param {(batch: Batch) => void} fn */ 477 + ondiscard(fn) { 478 + this.#discard_callbacks.add(fn); 479 + } 480 + settled() { 481 + return (this.#deferred ??= deferred()).promise; 482 + } 483 + static ensure() { 484 + if (current_batch === null) { 485 + const batch = current_batch = new Batch(); 486 + batches.add(current_batch); 487 + if (!is_flushing_sync) { 488 + Batch.enqueue(() => { 489 + if (current_batch !== batch) { 490 + return; 491 + } 492 + batch.flush(); 493 + }); 494 + } 495 + } 496 + return current_batch; 497 + } 498 + /** @param {() => void} task */ 499 + static enqueue(task) { 500 + queue_micro_task(task); 501 + } 502 + apply() { 503 + return; 504 + } 505 + } 506 + function flushSync(fn) { 507 + var was_flushing_sync = is_flushing_sync; 508 + is_flushing_sync = true; 509 + try { 510 + var result; 511 + if (fn) ; 512 + while (true) { 513 + flush_tasks(); 514 + if (queued_root_effects.length === 0) { 515 + current_batch?.flush(); 516 + if (queued_root_effects.length === 0) { 517 + last_scheduled_effect = null; 518 + return ( 519 + /** @type {T} */ 520 + result 521 + ); 522 + } 523 + } 524 + flush_effects(); 525 + } 526 + } finally { 527 + is_flushing_sync = was_flushing_sync; 528 + } 529 + } 530 + function flush_effects() { 531 + var was_updating_effect = is_updating_effect; 532 + is_flushing = true; 533 + var source_stacks = null; 534 + try { 535 + var flush_count = 0; 536 + set_is_updating_effect(true); 537 + while (queued_root_effects.length > 0) { 538 + var batch = Batch.ensure(); 539 + if (flush_count++ > 1e3) { 540 + var updates, entry; 541 + if (DEV) ; 542 + infinite_loop_guard(); 543 + } 544 + batch.process(queued_root_effects); 545 + old_values.clear(); 546 + if (DEV) ; 547 + } 548 + } finally { 549 + is_flushing = false; 550 + set_is_updating_effect(was_updating_effect); 551 + last_scheduled_effect = null; 552 + } 553 + } 554 + function infinite_loop_guard() { 555 + try { 556 + effect_update_depth_exceeded(); 557 + } catch (error) { 558 + invoke_error_boundary(error, last_scheduled_effect); 559 + } 560 + } 561 + let eager_block_effects = null; 562 + function flush_queued_effects(effects) { 563 + var length = effects.length; 564 + if (length === 0) return; 565 + var i = 0; 566 + while (i < length) { 567 + var effect = effects[i++]; 568 + if ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) { 569 + eager_block_effects = /* @__PURE__ */ new Set(); 570 + update_effect(effect); 571 + if (effect.deps === null && effect.first === null && effect.nodes === null) { 572 + if (effect.teardown === null && effect.ac === null) { 573 + unlink_effect(effect); 574 + } else { 575 + effect.fn = null; 576 + } 577 + } 578 + if (eager_block_effects?.size > 0) { 579 + old_values.clear(); 580 + for (const e of eager_block_effects) { 581 + if ((e.f & (DESTROYED | INERT)) !== 0) continue; 582 + const ordered_effects = [e]; 583 + let ancestor = e.parent; 584 + while (ancestor !== null) { 585 + if (eager_block_effects.has(ancestor)) { 586 + eager_block_effects.delete(ancestor); 587 + ordered_effects.push(ancestor); 588 + } 589 + ancestor = ancestor.parent; 590 + } 591 + for (let j = ordered_effects.length - 1; j >= 0; j--) { 592 + const e2 = ordered_effects[j]; 593 + if ((e2.f & (DESTROYED | INERT)) !== 0) continue; 594 + update_effect(e2); 595 + } 596 + } 597 + eager_block_effects.clear(); 598 + } 599 + } 600 + } 601 + eager_block_effects = null; 602 + } 603 + function mark_effects(value, sources, marked, checked) { 604 + if (marked.has(value)) return; 605 + marked.add(value); 606 + if (value.reactions !== null) { 607 + for (const reaction of value.reactions) { 608 + const flags = reaction.f; 609 + if ((flags & DERIVED) !== 0) { 610 + mark_effects( 611 + /** @type {Derived} */ 612 + reaction, 613 + sources, 614 + marked, 615 + checked 616 + ); 617 + } else if ((flags & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags & DIRTY) === 0 && depends_on(reaction, sources, checked)) { 618 + set_signal_status(reaction, DIRTY); 619 + schedule_effect( 620 + /** @type {Effect} */ 621 + reaction 622 + ); 623 + } 624 + } 625 + } 626 + } 627 + function depends_on(reaction, sources, checked) { 628 + const depends = checked.get(reaction); 629 + if (depends !== void 0) return depends; 630 + if (reaction.deps !== null) { 631 + for (const dep of reaction.deps) { 632 + if (sources.includes(dep)) { 633 + return true; 634 + } 635 + if ((dep.f & DERIVED) !== 0 && depends_on( 636 + /** @type {Derived} */ 637 + dep, 638 + sources, 639 + checked 640 + )) { 641 + checked.set( 642 + /** @type {Derived} */ 643 + dep, 644 + true 645 + ); 646 + return true; 647 + } 648 + } 649 + } 650 + checked.set(reaction, false); 651 + return false; 652 + } 653 + function schedule_effect(signal) { 654 + var effect = last_scheduled_effect = signal; 655 + while (effect.parent !== null) { 656 + effect = effect.parent; 657 + var flags = effect.f; 658 + if (is_flushing && effect === active_effect && (flags & BLOCK_EFFECT) !== 0 && (flags & HEAD_EFFECT) === 0) { 659 + return; 660 + } 661 + if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) { 662 + if ((flags & CLEAN) === 0) return; 663 + effect.f ^= CLEAN; 664 + } 665 + } 666 + queued_root_effects.push(effect); 667 + } 668 + function destroy_derived_effects(derived) { 669 + var effects = derived.effects; 670 + if (effects !== null) { 671 + derived.effects = null; 672 + for (var i = 0; i < effects.length; i += 1) { 673 + destroy_effect( 674 + /** @type {Effect} */ 675 + effects[i] 676 + ); 677 + } 678 + } 679 + } 680 + function get_derived_parent_effect(derived) { 681 + var parent = derived.parent; 682 + while (parent !== null) { 683 + if ((parent.f & DERIVED) === 0) { 684 + return (parent.f & DESTROYED) === 0 ? ( 685 + /** @type {Effect} */ 686 + parent 687 + ) : null; 688 + } 689 + parent = parent.parent; 690 + } 691 + return null; 692 + } 693 + function execute_derived(derived) { 694 + var value; 695 + var prev_active_effect = active_effect; 696 + set_active_effect(get_derived_parent_effect(derived)); 697 + { 698 + try { 699 + derived.f &= ~WAS_MARKED; 700 + destroy_derived_effects(derived); 701 + value = update_reaction(derived); 702 + } finally { 703 + set_active_effect(prev_active_effect); 704 + } 705 + } 706 + return value; 707 + } 708 + function update_derived(derived) { 709 + var value = execute_derived(derived); 710 + if (!derived.equals(value)) { 711 + if (!current_batch?.is_fork) { 712 + derived.v = value; 713 + } 714 + derived.wv = increment_write_version(); 715 + } 716 + if (is_destroying_effect) { 717 + return; 718 + } 719 + if (batch_values !== null) { 720 + if (effect_tracking() || current_batch?.is_fork) { 721 + batch_values.set(derived, value); 722 + } 723 + } else { 724 + var status = (derived.f & CONNECTED) === 0 ? MAYBE_DIRTY : CLEAN; 725 + set_signal_status(derived, status); 726 + } 727 + } 728 + let eager_effects = /* @__PURE__ */ new Set(); 729 + const old_values = /* @__PURE__ */ new Map(); 730 + let eager_effects_deferred = false; 731 + function source(v, stack) { 732 + var signal = { 733 + f: 0, 734 + // TODO ideally we could skip this altogether, but it causes type errors 735 + v, 736 + reactions: null, 737 + equals, 738 + rv: 0, 739 + wv: 0 740 + }; 741 + return signal; 742 + } 743 + // @__NO_SIDE_EFFECTS__ 744 + function state(v, stack) { 745 + const s = source(v); 746 + push_reaction_value(s); 747 + return s; 748 + } 749 + // @__NO_SIDE_EFFECTS__ 750 + function mutable_source(initial_value, immutable = false, trackable = true) { 751 + const s = source(initial_value); 752 + if (!immutable) { 753 + s.equals = safe_equals; 754 + } 755 + return s; 756 + } 757 + function set(source2, value, should_proxy = false) { 758 + if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check 759 + // to ensure we error if state is set inside an inspect effect 760 + (!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && !current_sources?.includes(source2)) { 761 + state_unsafe_mutation(); 762 + } 763 + let new_value = should_proxy ? proxy(value) : value; 764 + return internal_set(source2, new_value); 765 + } 766 + function internal_set(source2, value) { 767 + if (!source2.equals(value)) { 768 + var old_value = source2.v; 769 + if (is_destroying_effect) { 770 + old_values.set(source2, value); 771 + } else { 772 + old_values.set(source2, old_value); 773 + } 774 + source2.v = value; 775 + var batch = Batch.ensure(); 776 + batch.capture(source2, old_value); 777 + if ((source2.f & DERIVED) !== 0) { 778 + if ((source2.f & DIRTY) !== 0) { 779 + execute_derived( 780 + /** @type {Derived} */ 781 + source2 782 + ); 783 + } 784 + set_signal_status(source2, (source2.f & CONNECTED) !== 0 ? CLEAN : MAYBE_DIRTY); 785 + } 786 + source2.wv = increment_write_version(); 787 + mark_reactions(source2, DIRTY); 788 + if (active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) { 789 + if (untracked_writes === null) { 790 + set_untracked_writes([source2]); 791 + } else { 792 + untracked_writes.push(source2); 793 + } 794 + } 795 + if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) { 796 + flush_eager_effects(); 797 + } 798 + } 799 + return value; 800 + } 801 + function flush_eager_effects() { 802 + eager_effects_deferred = false; 803 + var prev_is_updating_effect = is_updating_effect; 804 + set_is_updating_effect(true); 805 + const inspects = Array.from(eager_effects); 806 + try { 807 + for (const effect of inspects) { 808 + if ((effect.f & CLEAN) !== 0) { 809 + set_signal_status(effect, MAYBE_DIRTY); 810 + } 811 + if (is_dirty(effect)) { 812 + update_effect(effect); 813 + } 814 + } 815 + } finally { 816 + set_is_updating_effect(prev_is_updating_effect); 817 + } 818 + eager_effects.clear(); 819 + } 820 + function increment(source2) { 821 + set(source2, source2.v + 1); 822 + } 823 + function mark_reactions(signal, status) { 824 + var reactions = signal.reactions; 825 + if (reactions === null) return; 826 + var length = reactions.length; 827 + for (var i = 0; i < length; i++) { 828 + var reaction = reactions[i]; 829 + var flags = reaction.f; 830 + var not_dirty = (flags & DIRTY) === 0; 831 + if (not_dirty) { 832 + set_signal_status(reaction, status); 833 + } 834 + if ((flags & DERIVED) !== 0) { 835 + var derived = ( 836 + /** @type {Derived} */ 837 + reaction 838 + ); 839 + batch_values?.delete(derived); 840 + if ((flags & WAS_MARKED) === 0) { 841 + if (flags & CONNECTED) { 842 + reaction.f |= WAS_MARKED; 843 + } 844 + mark_reactions(derived, MAYBE_DIRTY); 845 + } 846 + } else if (not_dirty) { 847 + if ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) { 848 + eager_block_effects.add( 849 + /** @type {Effect} */ 850 + reaction 851 + ); 852 + } 853 + schedule_effect( 854 + /** @type {Effect} */ 855 + reaction 856 + ); 857 + } 858 + } 859 + } 860 + function proxy(value) { 861 + if (typeof value !== "object" || value === null || STATE_SYMBOL in value) { 862 + return value; 863 + } 864 + const prototype = get_prototype_of(value); 865 + if (prototype !== object_prototype && prototype !== array_prototype) { 866 + return value; 867 + } 868 + var sources = /* @__PURE__ */ new Map(); 869 + var is_proxied_array = is_array(value); 870 + var version = /* @__PURE__ */ state(0); 871 + var parent_version = update_version; 872 + var with_parent = (fn) => { 873 + if (update_version === parent_version) { 874 + return fn(); 875 + } 876 + var reaction = active_reaction; 877 + var version2 = update_version; 878 + set_active_reaction(null); 879 + set_update_version(parent_version); 880 + var result = fn(); 881 + set_active_reaction(reaction); 882 + set_update_version(version2); 883 + return result; 884 + }; 885 + if (is_proxied_array) { 886 + sources.set("length", /* @__PURE__ */ state( 887 + /** @type {any[]} */ 888 + value.length 889 + )); 890 + } 891 + return new Proxy( 892 + /** @type {any} */ 893 + value, 894 + { 895 + defineProperty(_, prop, descriptor) { 896 + if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) { 897 + state_descriptors_fixed(); 898 + } 899 + var s = sources.get(prop); 900 + if (s === void 0) { 901 + s = with_parent(() => { 902 + var s2 = /* @__PURE__ */ state(descriptor.value); 903 + sources.set(prop, s2); 904 + return s2; 905 + }); 906 + } else { 907 + set(s, descriptor.value, true); 908 + } 909 + return true; 910 + }, 911 + deleteProperty(target, prop) { 912 + var s = sources.get(prop); 913 + if (s === void 0) { 914 + if (prop in target) { 915 + const s2 = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); 916 + sources.set(prop, s2); 917 + increment(version); 918 + } 919 + } else { 920 + set(s, UNINITIALIZED); 921 + increment(version); 922 + } 923 + return true; 924 + }, 925 + get(target, prop, receiver) { 926 + if (prop === STATE_SYMBOL) { 927 + return value; 928 + } 929 + var s = sources.get(prop); 930 + var exists = prop in target; 931 + if (s === void 0 && (!exists || get_descriptor(target, prop)?.writable)) { 932 + s = with_parent(() => { 933 + var p = proxy(exists ? target[prop] : UNINITIALIZED); 934 + var s2 = /* @__PURE__ */ state(p); 935 + return s2; 936 + }); 937 + sources.set(prop, s); 938 + } 939 + if (s !== void 0) { 940 + var v = get(s); 941 + return v === UNINITIALIZED ? void 0 : v; 942 + } 943 + return Reflect.get(target, prop, receiver); 944 + }, 945 + getOwnPropertyDescriptor(target, prop) { 946 + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); 947 + if (descriptor && "value" in descriptor) { 948 + var s = sources.get(prop); 949 + if (s) descriptor.value = get(s); 950 + } else if (descriptor === void 0) { 951 + var source2 = sources.get(prop); 952 + var value2 = source2?.v; 953 + if (source2 !== void 0 && value2 !== UNINITIALIZED) { 954 + return { 955 + enumerable: true, 956 + configurable: true, 957 + value: value2, 958 + writable: true 959 + }; 960 + } 961 + } 962 + return descriptor; 963 + }, 964 + has(target, prop) { 965 + if (prop === STATE_SYMBOL) { 966 + return true; 967 + } 968 + var s = sources.get(prop); 969 + var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop); 970 + if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop)?.writable)) { 971 + if (s === void 0) { 972 + s = with_parent(() => { 973 + var p = has ? proxy(target[prop]) : UNINITIALIZED; 974 + var s2 = /* @__PURE__ */ state(p); 975 + return s2; 976 + }); 977 + sources.set(prop, s); 978 + } 979 + var value2 = get(s); 980 + if (value2 === UNINITIALIZED) { 981 + return false; 982 + } 983 + } 984 + return has; 985 + }, 986 + set(target, prop, value2, receiver) { 987 + var s = sources.get(prop); 988 + var has = prop in target; 989 + if (is_proxied_array && prop === "length") { 990 + for (var i = value2; i < /** @type {Source<number>} */ 991 + s.v; i += 1) { 992 + var other_s = sources.get(i + ""); 993 + if (other_s !== void 0) { 994 + set(other_s, UNINITIALIZED); 995 + } else if (i in target) { 996 + other_s = with_parent(() => /* @__PURE__ */ state(UNINITIALIZED)); 997 + sources.set(i + "", other_s); 998 + } 999 + } 1000 + } 1001 + if (s === void 0) { 1002 + if (!has || get_descriptor(target, prop)?.writable) { 1003 + s = with_parent(() => /* @__PURE__ */ state(void 0)); 1004 + set(s, proxy(value2)); 1005 + sources.set(prop, s); 1006 + } 1007 + } else { 1008 + has = s.v !== UNINITIALIZED; 1009 + var p = with_parent(() => proxy(value2)); 1010 + set(s, p); 1011 + } 1012 + var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); 1013 + if (descriptor?.set) { 1014 + descriptor.set.call(receiver, value2); 1015 + } 1016 + if (!has) { 1017 + if (is_proxied_array && typeof prop === "string") { 1018 + var ls = ( 1019 + /** @type {Source<number>} */ 1020 + sources.get("length") 1021 + ); 1022 + var n = Number(prop); 1023 + if (Number.isInteger(n) && n >= ls.v) { 1024 + set(ls, n + 1); 1025 + } 1026 + } 1027 + increment(version); 1028 + } 1029 + return true; 1030 + }, 1031 + ownKeys(target) { 1032 + get(version); 1033 + var own_keys = Reflect.ownKeys(target).filter((key2) => { 1034 + var source3 = sources.get(key2); 1035 + return source3 === void 0 || source3.v !== UNINITIALIZED; 1036 + }); 1037 + for (var [key, source2] of sources) { 1038 + if (source2.v !== UNINITIALIZED && !(key in target)) { 1039 + own_keys.push(key); 1040 + } 1041 + } 1042 + return own_keys; 1043 + }, 1044 + setPrototypeOf() { 1045 + state_prototype_fixed(); 1046 + } 1047 + } 1048 + ); 1049 + } 1050 + var $window; 1051 + var first_child_getter; 1052 + var next_sibling_getter; 1053 + function init_operations() { 1054 + if ($window !== void 0) { 1055 + return; 1056 + } 1057 + $window = window; 1058 + var element_prototype = Element.prototype; 1059 + var node_prototype = Node.prototype; 1060 + var text_prototype = Text.prototype; 1061 + first_child_getter = get_descriptor(node_prototype, "firstChild").get; 1062 + next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get; 1063 + if (is_extensible(element_prototype)) { 1064 + element_prototype.__click = void 0; 1065 + element_prototype.__className = void 0; 1066 + element_prototype.__attributes = null; 1067 + element_prototype.__style = void 0; 1068 + element_prototype.__e = void 0; 1069 + } 1070 + if (is_extensible(text_prototype)) { 1071 + text_prototype.__t = void 0; 1072 + } 1073 + } 1074 + function create_text(value = "") { 1075 + return document.createTextNode(value); 1076 + } 1077 + // @__NO_SIDE_EFFECTS__ 1078 + function get_first_child(node) { 1079 + return ( 1080 + /** @type {TemplateNode | null} */ 1081 + first_child_getter.call(node) 1082 + ); 1083 + } 1084 + // @__NO_SIDE_EFFECTS__ 1085 + function get_next_sibling(node) { 1086 + return ( 1087 + /** @type {TemplateNode | null} */ 1088 + next_sibling_getter.call(node) 1089 + ); 1090 + } 1091 + function clear_text_content(node) { 1092 + node.textContent = ""; 1093 + } 1094 + function without_reactive_context(fn) { 1095 + var previous_reaction = active_reaction; 1096 + var previous_effect = active_effect; 1097 + set_active_reaction(null); 1098 + set_active_effect(null); 1099 + try { 1100 + return fn(); 1101 + } finally { 1102 + set_active_reaction(previous_reaction); 1103 + set_active_effect(previous_effect); 1104 + } 1105 + } 1106 + function push_effect(effect, parent_effect) { 1107 + var parent_last = parent_effect.last; 1108 + if (parent_last === null) { 1109 + parent_effect.last = parent_effect.first = effect; 1110 + } else { 1111 + parent_last.next = effect; 1112 + effect.prev = parent_last; 1113 + parent_effect.last = effect; 1114 + } 1115 + } 1116 + function create_effect(type, fn, sync) { 1117 + var parent = active_effect; 1118 + if (parent !== null && (parent.f & INERT) !== 0) { 1119 + type |= INERT; 1120 + } 1121 + var effect = { 1122 + ctx: component_context, 1123 + deps: null, 1124 + nodes: null, 1125 + f: type | DIRTY | CONNECTED, 1126 + first: null, 1127 + fn, 1128 + last: null, 1129 + next: null, 1130 + parent, 1131 + b: parent && parent.b, 1132 + prev: null, 1133 + teardown: null, 1134 + wv: 0, 1135 + ac: null 1136 + }; 1137 + if (sync) { 1138 + try { 1139 + update_effect(effect); 1140 + effect.f |= EFFECT_RAN; 1141 + } catch (e2) { 1142 + destroy_effect(effect); 1143 + throw e2; 1144 + } 1145 + } else if (fn !== null) { 1146 + schedule_effect(effect); 1147 + } 1148 + var e = effect; 1149 + if (sync && e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child 1150 + (e.f & EFFECT_PRESERVED) === 0) { 1151 + e = e.first; 1152 + if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) { 1153 + e.f |= EFFECT_TRANSPARENT; 1154 + } 1155 + } 1156 + if (e !== null) { 1157 + e.parent = parent; 1158 + if (parent !== null) { 1159 + push_effect(e, parent); 1160 + } 1161 + if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) { 1162 + var derived = ( 1163 + /** @type {Derived} */ 1164 + active_reaction 1165 + ); 1166 + (derived.effects ??= []).push(e); 1167 + } 1168 + } 1169 + return effect; 1170 + } 1171 + function effect_tracking() { 1172 + return active_reaction !== null && !untracking; 1173 + } 1174 + function create_user_effect(fn) { 1175 + return create_effect(EFFECT | USER_EFFECT, fn, false); 1176 + } 1177 + function component_root(fn) { 1178 + Batch.ensure(); 1179 + const effect = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true); 1180 + return (options = {}) => { 1181 + return new Promise((fulfil) => { 1182 + if (options.outro) { 1183 + pause_effect(effect, () => { 1184 + destroy_effect(effect); 1185 + fulfil(void 0); 1186 + }); 1187 + } else { 1188 + destroy_effect(effect); 1189 + fulfil(void 0); 1190 + } 1191 + }); 1192 + }; 1193 + } 1194 + function render_effect(fn, flags = 0) { 1195 + return create_effect(RENDER_EFFECT | flags, fn, true); 1196 + } 1197 + function block(fn, flags = 0) { 1198 + var effect = create_effect(BLOCK_EFFECT | flags, fn, true); 1199 + return effect; 1200 + } 1201 + function branch(fn) { 1202 + return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true); 1203 + } 1204 + function execute_effect_teardown(effect) { 1205 + var teardown = effect.teardown; 1206 + if (teardown !== null) { 1207 + const previously_destroying_effect = is_destroying_effect; 1208 + const previous_reaction = active_reaction; 1209 + set_is_destroying_effect(true); 1210 + set_active_reaction(null); 1211 + try { 1212 + teardown.call(null); 1213 + } finally { 1214 + set_is_destroying_effect(previously_destroying_effect); 1215 + set_active_reaction(previous_reaction); 1216 + } 1217 + } 1218 + } 1219 + function destroy_effect_children(signal, remove_dom = false) { 1220 + var effect = signal.first; 1221 + signal.first = signal.last = null; 1222 + while (effect !== null) { 1223 + const controller2 = effect.ac; 1224 + if (controller2 !== null) { 1225 + without_reactive_context(() => { 1226 + controller2.abort(STALE_REACTION); 1227 + }); 1228 + } 1229 + var next = effect.next; 1230 + if ((effect.f & ROOT_EFFECT) !== 0) { 1231 + effect.parent = null; 1232 + } else { 1233 + destroy_effect(effect, remove_dom); 1234 + } 1235 + effect = next; 1236 + } 1237 + } 1238 + function destroy_block_effect_children(signal) { 1239 + var effect = signal.first; 1240 + while (effect !== null) { 1241 + var next = effect.next; 1242 + if ((effect.f & BRANCH_EFFECT) === 0) { 1243 + destroy_effect(effect); 1244 + } 1245 + effect = next; 1246 + } 1247 + } 1248 + function destroy_effect(effect, remove_dom = true) { 1249 + var removed = false; 1250 + if ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes !== null && effect.nodes.end !== null) { 1251 + remove_effect_dom( 1252 + effect.nodes.start, 1253 + /** @type {TemplateNode} */ 1254 + effect.nodes.end 1255 + ); 1256 + removed = true; 1257 + } 1258 + destroy_effect_children(effect, remove_dom && !removed); 1259 + remove_reactions(effect, 0); 1260 + set_signal_status(effect, DESTROYED); 1261 + var transitions = effect.nodes && effect.nodes.t; 1262 + if (transitions !== null) { 1263 + for (const transition of transitions) { 1264 + transition.stop(); 1265 + } 1266 + } 1267 + execute_effect_teardown(effect); 1268 + var parent = effect.parent; 1269 + if (parent !== null && parent.first !== null) { 1270 + unlink_effect(effect); 1271 + } 1272 + effect.next = effect.prev = effect.teardown = effect.ctx = effect.deps = effect.fn = effect.nodes = effect.ac = null; 1273 + } 1274 + function remove_effect_dom(node, end) { 1275 + while (node !== null) { 1276 + var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node); 1277 + node.remove(); 1278 + node = next; 1279 + } 1280 + } 1281 + function unlink_effect(effect) { 1282 + var parent = effect.parent; 1283 + var prev = effect.prev; 1284 + var next = effect.next; 1285 + if (prev !== null) prev.next = next; 1286 + if (next !== null) next.prev = prev; 1287 + if (parent !== null) { 1288 + if (parent.first === effect) parent.first = next; 1289 + if (parent.last === effect) parent.last = prev; 1290 + } 1291 + } 1292 + function pause_effect(effect, callback, destroy = true) { 1293 + var transitions = []; 1294 + pause_children(effect, transitions, true); 1295 + var fn = () => { 1296 + if (destroy) destroy_effect(effect); 1297 + if (callback) callback(); 1298 + }; 1299 + var remaining = transitions.length; 1300 + if (remaining > 0) { 1301 + var check = () => --remaining || fn(); 1302 + for (var transition of transitions) { 1303 + transition.out(check); 1304 + } 1305 + } else { 1306 + fn(); 1307 + } 1308 + } 1309 + function pause_children(effect, transitions, local) { 1310 + if ((effect.f & INERT) !== 0) return; 1311 + effect.f ^= INERT; 1312 + var t = effect.nodes && effect.nodes.t; 1313 + if (t !== null) { 1314 + for (const transition of t) { 1315 + if (transition.is_global || local) { 1316 + transitions.push(transition); 1317 + } 1318 + } 1319 + } 1320 + var child = effect.first; 1321 + while (child !== null) { 1322 + var sibling = child.next; 1323 + var transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent, 1324 + // it means the parent block effect was pruned. In that case, 1325 + // transparency information was transferred to the branch effect. 1326 + (child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0; 1327 + pause_children(child, transitions, transparent ? local : false); 1328 + child = sibling; 1329 + } 1330 + } 1331 + function move_effect(effect, fragment) { 1332 + if (!effect.nodes) return; 1333 + var node = effect.nodes.start; 1334 + var end = effect.nodes.end; 1335 + while (node !== null) { 1336 + var next = node === end ? null : /* @__PURE__ */ get_next_sibling(node); 1337 + fragment.append(node); 1338 + node = next; 1339 + } 1340 + } 1341 + let is_updating_effect = false; 1342 + function set_is_updating_effect(value) { 1343 + is_updating_effect = value; 1344 + } 1345 + let is_destroying_effect = false; 1346 + function set_is_destroying_effect(value) { 1347 + is_destroying_effect = value; 1348 + } 1349 + let active_reaction = null; 1350 + let untracking = false; 1351 + function set_active_reaction(reaction) { 1352 + active_reaction = reaction; 1353 + } 1354 + let active_effect = null; 1355 + function set_active_effect(effect) { 1356 + active_effect = effect; 1357 + } 1358 + let current_sources = null; 1359 + function push_reaction_value(value) { 1360 + if (active_reaction !== null && true) { 1361 + if (current_sources === null) { 1362 + current_sources = [value]; 1363 + } else { 1364 + current_sources.push(value); 1365 + } 1366 + } 1367 + } 1368 + let new_deps = null; 1369 + let skipped_deps = 0; 1370 + let untracked_writes = null; 1371 + function set_untracked_writes(value) { 1372 + untracked_writes = value; 1373 + } 1374 + let write_version = 1; 1375 + let read_version = 0; 1376 + let update_version = read_version; 1377 + function set_update_version(value) { 1378 + update_version = value; 1379 + } 1380 + function increment_write_version() { 1381 + return ++write_version; 1382 + } 1383 + function is_dirty(reaction) { 1384 + var flags = reaction.f; 1385 + if ((flags & DIRTY) !== 0) { 1386 + return true; 1387 + } 1388 + if (flags & DERIVED) { 1389 + reaction.f &= ~WAS_MARKED; 1390 + } 1391 + if ((flags & MAYBE_DIRTY) !== 0) { 1392 + var dependencies = reaction.deps; 1393 + if (dependencies !== null) { 1394 + var length = dependencies.length; 1395 + for (var i = 0; i < length; i++) { 1396 + var dependency = dependencies[i]; 1397 + if (is_dirty( 1398 + /** @type {Derived} */ 1399 + dependency 1400 + )) { 1401 + update_derived( 1402 + /** @type {Derived} */ 1403 + dependency 1404 + ); 1405 + } 1406 + if (dependency.wv > reaction.wv) { 1407 + return true; 1408 + } 1409 + } 1410 + } 1411 + if ((flags & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that 1412 + // traversal of the graph in the other batches still happens 1413 + batch_values === null) { 1414 + set_signal_status(reaction, CLEAN); 1415 + } 1416 + } 1417 + return false; 1418 + } 1419 + function schedule_possible_effect_self_invalidation(signal, effect, root = true) { 1420 + var reactions = signal.reactions; 1421 + if (reactions === null) return; 1422 + if (current_sources?.includes(signal)) { 1423 + return; 1424 + } 1425 + for (var i = 0; i < reactions.length; i++) { 1426 + var reaction = reactions[i]; 1427 + if ((reaction.f & DERIVED) !== 0) { 1428 + schedule_possible_effect_self_invalidation( 1429 + /** @type {Derived} */ 1430 + reaction, 1431 + effect, 1432 + false 1433 + ); 1434 + } else if (effect === reaction) { 1435 + if (root) { 1436 + set_signal_status(reaction, DIRTY); 1437 + } else if ((reaction.f & CLEAN) !== 0) { 1438 + set_signal_status(reaction, MAYBE_DIRTY); 1439 + } 1440 + schedule_effect( 1441 + /** @type {Effect} */ 1442 + reaction 1443 + ); 1444 + } 1445 + } 1446 + } 1447 + function update_reaction(reaction) { 1448 + var previous_deps = new_deps; 1449 + var previous_skipped_deps = skipped_deps; 1450 + var previous_untracked_writes = untracked_writes; 1451 + var previous_reaction = active_reaction; 1452 + var previous_sources = current_sources; 1453 + var previous_component_context = component_context; 1454 + var previous_untracking = untracking; 1455 + var previous_update_version = update_version; 1456 + var flags = reaction.f; 1457 + new_deps = /** @type {null | Value[]} */ 1458 + null; 1459 + skipped_deps = 0; 1460 + untracked_writes = null; 1461 + active_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null; 1462 + current_sources = null; 1463 + set_component_context(reaction.ctx); 1464 + untracking = false; 1465 + update_version = ++read_version; 1466 + if (reaction.ac !== null) { 1467 + without_reactive_context(() => { 1468 + reaction.ac.abort(STALE_REACTION); 1469 + }); 1470 + reaction.ac = null; 1471 + } 1472 + try { 1473 + reaction.f |= REACTION_IS_UPDATING; 1474 + var fn = ( 1475 + /** @type {Function} */ 1476 + reaction.fn 1477 + ); 1478 + var result = fn(); 1479 + var deps = reaction.deps; 1480 + if (new_deps !== null) { 1481 + var i; 1482 + remove_reactions(reaction, skipped_deps); 1483 + if (deps !== null && skipped_deps > 0) { 1484 + deps.length = skipped_deps + new_deps.length; 1485 + for (i = 0; i < new_deps.length; i++) { 1486 + deps[skipped_deps + i] = new_deps[i]; 1487 + } 1488 + } else { 1489 + reaction.deps = deps = new_deps; 1490 + } 1491 + if (effect_tracking() && (reaction.f & CONNECTED) !== 0) { 1492 + for (i = skipped_deps; i < deps.length; i++) { 1493 + (deps[i].reactions ??= []).push(reaction); 1494 + } 1495 + } 1496 + } else if (deps !== null && skipped_deps < deps.length) { 1497 + remove_reactions(reaction, skipped_deps); 1498 + deps.length = skipped_deps; 1499 + } 1500 + if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) { 1501 + for (i = 0; i < /** @type {Source[]} */ 1502 + untracked_writes.length; i++) { 1503 + schedule_possible_effect_self_invalidation( 1504 + untracked_writes[i], 1505 + /** @type {Effect} */ 1506 + reaction 1507 + ); 1508 + } 1509 + } 1510 + if (previous_reaction !== null && previous_reaction !== reaction) { 1511 + read_version++; 1512 + if (untracked_writes !== null) { 1513 + if (previous_untracked_writes === null) { 1514 + previous_untracked_writes = untracked_writes; 1515 + } else { 1516 + previous_untracked_writes.push(.../** @type {Source[]} */ 1517 + untracked_writes); 1518 + } 1519 + } 1520 + } 1521 + if ((reaction.f & ERROR_VALUE) !== 0) { 1522 + reaction.f ^= ERROR_VALUE; 1523 + } 1524 + return result; 1525 + } catch (error) { 1526 + return handle_error(error); 1527 + } finally { 1528 + reaction.f ^= REACTION_IS_UPDATING; 1529 + new_deps = previous_deps; 1530 + skipped_deps = previous_skipped_deps; 1531 + untracked_writes = previous_untracked_writes; 1532 + active_reaction = previous_reaction; 1533 + current_sources = previous_sources; 1534 + set_component_context(previous_component_context); 1535 + untracking = previous_untracking; 1536 + update_version = previous_update_version; 1537 + } 1538 + } 1539 + function remove_reaction(signal, dependency) { 1540 + let reactions = dependency.reactions; 1541 + if (reactions !== null) { 1542 + var index = index_of.call(reactions, signal); 1543 + if (index !== -1) { 1544 + var new_length = reactions.length - 1; 1545 + if (new_length === 0) { 1546 + reactions = dependency.reactions = null; 1547 + } else { 1548 + reactions[index] = reactions[new_length]; 1549 + reactions.pop(); 1550 + } 1551 + } 1552 + } 1553 + if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear 1554 + // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps` 1555 + // allows us to skip the expensive work of disconnecting and immediately reconnecting it 1556 + (new_deps === null || !new_deps.includes(dependency))) { 1557 + set_signal_status(dependency, MAYBE_DIRTY); 1558 + if ((dependency.f & CONNECTED) !== 0) { 1559 + dependency.f ^= CONNECTED; 1560 + dependency.f &= ~WAS_MARKED; 1561 + } 1562 + destroy_derived_effects( 1563 + /** @type {Derived} **/ 1564 + dependency 1565 + ); 1566 + remove_reactions( 1567 + /** @type {Derived} **/ 1568 + dependency, 1569 + 0 1570 + ); 1571 + } 1572 + } 1573 + function remove_reactions(signal, start_index) { 1574 + var dependencies = signal.deps; 1575 + if (dependencies === null) return; 1576 + for (var i = start_index; i < dependencies.length; i++) { 1577 + remove_reaction(signal, dependencies[i]); 1578 + } 1579 + } 1580 + function update_effect(effect) { 1581 + var flags = effect.f; 1582 + if ((flags & DESTROYED) !== 0) { 1583 + return; 1584 + } 1585 + set_signal_status(effect, CLEAN); 1586 + var previous_effect = active_effect; 1587 + var was_updating_effect = is_updating_effect; 1588 + active_effect = effect; 1589 + is_updating_effect = true; 1590 + try { 1591 + if ((flags & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) { 1592 + destroy_block_effect_children(effect); 1593 + } else { 1594 + destroy_effect_children(effect); 1595 + } 1596 + execute_effect_teardown(effect); 1597 + var teardown = update_reaction(effect); 1598 + effect.teardown = typeof teardown === "function" ? teardown : null; 1599 + effect.wv = write_version; 1600 + var dep; 1601 + if (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) ; 1602 + } finally { 1603 + is_updating_effect = was_updating_effect; 1604 + active_effect = previous_effect; 1605 + } 1606 + } 1607 + function get(signal) { 1608 + var flags = signal.f; 1609 + var is_derived = (flags & DERIVED) !== 0; 1610 + if (active_reaction !== null && !untracking) { 1611 + var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0; 1612 + if (!destroyed && !current_sources?.includes(signal)) { 1613 + var deps = active_reaction.deps; 1614 + if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) { 1615 + if (signal.rv < read_version) { 1616 + signal.rv = read_version; 1617 + if (new_deps === null && deps !== null && deps[skipped_deps] === signal) { 1618 + skipped_deps++; 1619 + } else if (new_deps === null) { 1620 + new_deps = [signal]; 1621 + } else if (!new_deps.includes(signal)) { 1622 + new_deps.push(signal); 1623 + } 1624 + } 1625 + } else { 1626 + (active_reaction.deps ??= []).push(signal); 1627 + var reactions = signal.reactions; 1628 + if (reactions === null) { 1629 + signal.reactions = [active_reaction]; 1630 + } else if (!reactions.includes(active_reaction)) { 1631 + reactions.push(active_reaction); 1632 + } 1633 + } 1634 + } 1635 + } 1636 + if (is_destroying_effect) { 1637 + if (old_values.has(signal)) { 1638 + return old_values.get(signal); 1639 + } 1640 + if (is_derived) { 1641 + var derived = ( 1642 + /** @type {Derived} */ 1643 + signal 1644 + ); 1645 + var value = derived.v; 1646 + if ((derived.f & CLEAN) === 0 && derived.reactions !== null || depends_on_old_values(derived)) { 1647 + value = execute_derived(derived); 1648 + } 1649 + old_values.set(derived, value); 1650 + return value; 1651 + } 1652 + } else if (is_derived && (!batch_values?.has(signal) || current_batch?.is_fork && !effect_tracking())) { 1653 + derived = /** @type {Derived} */ 1654 + signal; 1655 + if (is_dirty(derived)) { 1656 + update_derived(derived); 1657 + } 1658 + if (is_updating_effect && effect_tracking() && (derived.f & CONNECTED) === 0) { 1659 + reconnect(derived); 1660 + } 1661 + } 1662 + if (batch_values?.has(signal)) { 1663 + return batch_values.get(signal); 1664 + } 1665 + if ((signal.f & ERROR_VALUE) !== 0) { 1666 + throw signal.v; 1667 + } 1668 + return signal.v; 1669 + } 1670 + function reconnect(derived) { 1671 + if (derived.deps === null) return; 1672 + derived.f ^= CONNECTED; 1673 + for (const dep of derived.deps) { 1674 + (dep.reactions ??= []).push(derived); 1675 + if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) { 1676 + reconnect( 1677 + /** @type {Derived} */ 1678 + dep 1679 + ); 1680 + } 1681 + } 1682 + } 1683 + function depends_on_old_values(derived) { 1684 + if (derived.v === UNINITIALIZED) return true; 1685 + if (derived.deps === null) return false; 1686 + for (const dep of derived.deps) { 1687 + if (old_values.has(dep)) { 1688 + return true; 1689 + } 1690 + if ((dep.f & DERIVED) !== 0 && depends_on_old_values( 1691 + /** @type {Derived} */ 1692 + dep 1693 + )) { 1694 + return true; 1695 + } 1696 + } 1697 + return false; 1698 + } 1699 + function untrack(fn) { 1700 + var previous_untracking = untracking; 1701 + try { 1702 + untracking = true; 1703 + return fn(); 1704 + } finally { 1705 + untracking = previous_untracking; 1706 + } 1707 + } 1708 + const STATUS_MASK = -7169; 1709 + function set_signal_status(signal, status) { 1710 + signal.f = signal.f & STATUS_MASK | status; 1711 + } 1712 + const DOM_BOOLEAN_ATTRIBUTES = [ 1713 + "allowfullscreen", 1714 + "async", 1715 + "autofocus", 1716 + "autoplay", 1717 + "checked", 1718 + "controls", 1719 + "default", 1720 + "disabled", 1721 + "formnovalidate", 1722 + "indeterminate", 1723 + "inert", 1724 + "ismap", 1725 + "loop", 1726 + "multiple", 1727 + "muted", 1728 + "nomodule", 1729 + "novalidate", 1730 + "open", 1731 + "playsinline", 1732 + "readonly", 1733 + "required", 1734 + "reversed", 1735 + "seamless", 1736 + "selected", 1737 + "webkitdirectory", 1738 + "defer", 1739 + "disablepictureinpicture", 1740 + "disableremoteplayback" 1741 + ]; 1742 + function is_boolean_attribute(name) { 1743 + return DOM_BOOLEAN_ATTRIBUTES.includes(name); 1744 + } 1745 + const PASSIVE_EVENTS = ["touchstart", "touchmove"]; 1746 + function is_passive_event(name) { 1747 + return PASSIVE_EVENTS.includes(name); 1748 + } 1749 + const replacements = { 1750 + translate: /* @__PURE__ */ new Map([ 1751 + [true, "yes"], 1752 + [false, "no"] 1753 + ]) 1754 + }; 1755 + function attr(name, value, is_boolean = false) { 1756 + if (name === "hidden" && value !== "until-found") { 1757 + is_boolean = true; 1758 + } 1759 + if (value == null || !value && is_boolean) return ""; 1760 + const normalized = name in replacements && replacements[name].get(value) || value; 1761 + const assignment = is_boolean ? "" : `="${escape_html(normalized, true)}"`; 1762 + return ` ${name}${assignment}`; 1763 + } 1764 + function clsx(value) { 1765 + if (typeof value === "object") { 1766 + return clsx$1(value); 1767 + } else { 1768 + return value ?? ""; 1769 + } 1770 + } 1771 + const whitespace = [..." \n\r\f \v\uFEFF"]; 1772 + function to_class(value, hash, directives) { 1773 + var classname = value == null ? "" : "" + value; 1774 + if (hash) { 1775 + classname = classname ? classname + " " + hash : hash; 1776 + } 1777 + if (directives) { 1778 + for (var key in directives) { 1779 + if (directives[key]) { 1780 + classname = classname ? classname + " " + key : key; 1781 + } else if (classname.length) { 1782 + var len = key.length; 1783 + var a = 0; 1784 + while ((a = classname.indexOf(key, a)) >= 0) { 1785 + var b = a + len; 1786 + if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) { 1787 + classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1); 1788 + } else { 1789 + a = b; 1790 + } 1791 + } 1792 + } 1793 + } 1794 + } 1795 + return classname === "" ? null : classname; 1796 + } 1797 + function append_styles(styles, important = false) { 1798 + var separator = important ? " !important;" : ";"; 1799 + var css = ""; 1800 + for (var key in styles) { 1801 + var value = styles[key]; 1802 + if (value != null && value !== "") { 1803 + css += " " + key + ": " + value + separator; 1804 + } 1805 + } 1806 + return css; 1807 + } 1808 + function to_css_name(name) { 1809 + if (name[0] !== "-" || name[1] !== "-") { 1810 + return name.toLowerCase(); 1811 + } 1812 + return name; 1813 + } 1814 + function to_style(value, styles) { 1815 + if (styles) { 1816 + var new_style = ""; 1817 + var normal_styles; 1818 + var important_styles; 1819 + if (Array.isArray(styles)) { 1820 + normal_styles = styles[0]; 1821 + important_styles = styles[1]; 1822 + } else { 1823 + normal_styles = styles; 1824 + } 1825 + if (value) { 1826 + value = String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g, "").trim(); 1827 + var in_str = false; 1828 + var in_apo = 0; 1829 + var in_comment = false; 1830 + var reserved_names = []; 1831 + if (normal_styles) { 1832 + reserved_names.push(...Object.keys(normal_styles).map(to_css_name)); 1833 + } 1834 + if (important_styles) { 1835 + reserved_names.push(...Object.keys(important_styles).map(to_css_name)); 1836 + } 1837 + var start_index = 0; 1838 + var name_index = -1; 1839 + const len = value.length; 1840 + for (var i = 0; i < len; i++) { 1841 + var c = value[i]; 1842 + if (in_comment) { 1843 + if (c === "/" && value[i - 1] === "*") { 1844 + in_comment = false; 1845 + } 1846 + } else if (in_str) { 1847 + if (in_str === c) { 1848 + in_str = false; 1849 + } 1850 + } else if (c === "/" && value[i + 1] === "*") { 1851 + in_comment = true; 1852 + } else if (c === '"' || c === "'") { 1853 + in_str = c; 1854 + } else if (c === "(") { 1855 + in_apo++; 1856 + } else if (c === ")") { 1857 + in_apo--; 1858 + } 1859 + if (!in_comment && in_str === false && in_apo === 0) { 1860 + if (c === ":" && name_index === -1) { 1861 + name_index = i; 1862 + } else if (c === ";" || i === len - 1) { 1863 + if (name_index !== -1) { 1864 + var name = to_css_name(value.substring(start_index, name_index).trim()); 1865 + if (!reserved_names.includes(name)) { 1866 + if (c !== ";") { 1867 + i++; 1868 + } 1869 + var property = value.substring(start_index, i).trim(); 1870 + new_style += " " + property + ";"; 1871 + } 1872 + } 1873 + start_index = i + 1; 1874 + name_index = -1; 1875 + } 1876 + } 1877 + } 1878 + } 1879 + if (normal_styles) { 1880 + new_style += append_styles(normal_styles); 1881 + } 1882 + if (important_styles) { 1883 + new_style += append_styles(important_styles, true); 1884 + } 1885 + new_style = new_style.trim(); 1886 + return new_style === "" ? null : new_style; 1887 + } 1888 + return value == null ? null : String(value); 1889 + } 1890 + function subscribe_to_store(store, run, invalidate) { 1891 + if (store == null) { 1892 + run(void 0); 1893 + return noop; 1894 + } 1895 + const unsub = untrack( 1896 + () => store.subscribe( 1897 + run, 1898 + // @ts-expect-error 1899 + invalidate 1900 + ) 1901 + ); 1902 + return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; 1903 + } 1904 + const BLOCK_OPEN = `<!--${HYDRATION_START}-->`; 1905 + const BLOCK_CLOSE = `<!--${HYDRATION_END}-->`; 1906 + let controller = null; 1907 + function abort() { 1908 + controller?.abort(STALE_REACTION); 1909 + controller = null; 1910 + } 1911 + function await_invalid() { 1912 + const error = new Error(`await_invalid 1913 + Encountered asynchronous work while rendering synchronously. 1914 + https://svelte.dev/e/await_invalid`); 1915 + error.name = "Svelte error"; 1916 + throw error; 1917 + } 1918 + function invalid_csp() { 1919 + const error = new Error(`invalid_csp 1920 + \`csp.nonce\` was set while \`csp.hash\` was \`true\`. These options cannot be used simultaneously. 1921 + https://svelte.dev/e/invalid_csp`); 1922 + error.name = "Svelte error"; 1923 + throw error; 1924 + } 1925 + function server_context_required() { 1926 + const error = new Error(`server_context_required 1927 + Could not resolve \`render\` context. 1928 + https://svelte.dev/e/server_context_required`); 1929 + error.name = "Svelte error"; 1930 + throw error; 1931 + } 1932 + function unresolved_hydratable(key, stack) { 1933 + { 1934 + console.warn(`https://svelte.dev/e/unresolved_hydratable`); 1935 + } 1936 + } 1937 + function get_render_context() { 1938 + const store = als?.getStore(); 1939 + { 1940 + server_context_required(); 1941 + } 1942 + return store; 1943 + } 1944 + let als = null; 1945 + let text_encoder; 1946 + let crypto; 1947 + async function sha256(data) { 1948 + text_encoder ??= new TextEncoder(); 1949 + crypto ??= globalThis.crypto?.subtle?.digest ? globalThis.crypto : ( 1950 + // @ts-ignore - we don't install node types in the prod build 1951 + (await import("node:crypto")).webcrypto 1952 + ); 1953 + const hash_buffer = await crypto.subtle.digest("SHA-256", text_encoder.encode(data)); 1954 + return base64_encode(hash_buffer); 1955 + } 1956 + function base64_encode(bytes) { 1957 + if (globalThis.Buffer) { 1958 + return globalThis.Buffer.from(bytes).toString("base64"); 1959 + } 1960 + let binary = ""; 1961 + for (let i = 0; i < bytes.length; i++) { 1962 + binary += String.fromCharCode(bytes[i]); 1963 + } 1964 + return btoa(binary); 1965 + } 1966 + class Renderer { 1967 + /** 1968 + * The contents of the renderer. 1969 + * @type {RendererItem[]} 1970 + */ 1971 + #out = []; 1972 + /** 1973 + * Any `onDestroy` callbacks registered during execution of this renderer. 1974 + * @type {(() => void)[] | undefined} 1975 + */ 1976 + #on_destroy = void 0; 1977 + /** 1978 + * Whether this renderer is a component body. 1979 + * @type {boolean} 1980 + */ 1981 + #is_component_body = false; 1982 + /** 1983 + * The type of string content that this renderer is accumulating. 1984 + * @type {RendererType} 1985 + */ 1986 + type; 1987 + /** @type {Renderer | undefined} */ 1988 + #parent; 1989 + /** 1990 + * Asynchronous work associated with this renderer 1991 + * @type {Promise<void> | undefined} 1992 + */ 1993 + promise = void 0; 1994 + /** 1995 + * State which is associated with the content tree as a whole. 1996 + * It will be re-exposed, uncopied, on all children. 1997 + * @type {SSRState} 1998 + * @readonly 1999 + */ 2000 + global; 2001 + /** 2002 + * State that is local to the branch it is declared in. 2003 + * It will be shallow-copied to all children. 2004 + * 2005 + * @type {{ select_value: string | undefined }} 2006 + */ 2007 + local; 2008 + /** 2009 + * @param {SSRState} global 2010 + * @param {Renderer | undefined} [parent] 2011 + */ 2012 + constructor(global, parent) { 2013 + this.#parent = parent; 2014 + this.global = global; 2015 + this.local = parent ? { ...parent.local } : { select_value: void 0 }; 2016 + this.type = parent ? parent.type : "body"; 2017 + } 2018 + /** 2019 + * @param {(renderer: Renderer) => void} fn 2020 + */ 2021 + head(fn) { 2022 + const head = new Renderer(this.global, this); 2023 + head.type = "head"; 2024 + this.#out.push(head); 2025 + head.child(fn); 2026 + } 2027 + /** 2028 + * @param {Array<Promise<void>>} blockers 2029 + * @param {(renderer: Renderer) => void} fn 2030 + */ 2031 + async_block(blockers, fn) { 2032 + this.#out.push(BLOCK_OPEN); 2033 + this.async(blockers, fn); 2034 + this.#out.push(BLOCK_CLOSE); 2035 + } 2036 + /** 2037 + * @param {Array<Promise<void>>} blockers 2038 + * @param {(renderer: Renderer) => void} fn 2039 + */ 2040 + async(blockers, fn) { 2041 + let callback = fn; 2042 + if (blockers.length > 0) { 2043 + const context = ssr_context; 2044 + callback = (renderer) => { 2045 + return Promise.all(blockers).then(() => { 2046 + const previous_context = ssr_context; 2047 + try { 2048 + set_ssr_context(context); 2049 + return fn(renderer); 2050 + } finally { 2051 + set_ssr_context(previous_context); 2052 + } 2053 + }); 2054 + }; 2055 + } 2056 + this.child(callback); 2057 + } 2058 + /** 2059 + * @param {Array<() => void>} thunks 2060 + */ 2061 + run(thunks) { 2062 + const context = ssr_context; 2063 + let promise = Promise.resolve(thunks[0]()); 2064 + const promises = [promise]; 2065 + for (const fn of thunks.slice(1)) { 2066 + promise = promise.then(() => { 2067 + const previous_context = ssr_context; 2068 + set_ssr_context(context); 2069 + try { 2070 + return fn(); 2071 + } finally { 2072 + set_ssr_context(previous_context); 2073 + } 2074 + }); 2075 + promises.push(promise); 2076 + } 2077 + return promises; 2078 + } 2079 + /** 2080 + * Create a child renderer. The child renderer inherits the state from the parent, 2081 + * but has its own content. 2082 + * @param {(renderer: Renderer) => MaybePromise<void>} fn 2083 + */ 2084 + child(fn) { 2085 + const child = new Renderer(this.global, this); 2086 + this.#out.push(child); 2087 + const parent = ssr_context; 2088 + set_ssr_context({ 2089 + ...ssr_context, 2090 + p: parent, 2091 + c: null, 2092 + r: child 2093 + }); 2094 + const result = fn(child); 2095 + set_ssr_context(parent); 2096 + if (result instanceof Promise) { 2097 + if (child.global.mode === "sync") { 2098 + await_invalid(); 2099 + } 2100 + result.catch(() => { 2101 + }); 2102 + child.promise = result; 2103 + } 2104 + return child; 2105 + } 2106 + /** 2107 + * Create a component renderer. The component renderer inherits the state from the parent, 2108 + * but has its own content. It is treated as an ordering boundary for ondestroy callbacks. 2109 + * @param {(renderer: Renderer) => MaybePromise<void>} fn 2110 + * @param {Function} [component_fn] 2111 + * @returns {void} 2112 + */ 2113 + component(fn, component_fn) { 2114 + push$1(); 2115 + const child = this.child(fn); 2116 + child.#is_component_body = true; 2117 + pop$1(); 2118 + } 2119 + /** 2120 + * @param {Record<string, any>} attrs 2121 + * @param {(renderer: Renderer) => void} fn 2122 + * @param {string | undefined} [css_hash] 2123 + * @param {Record<string, boolean> | undefined} [classes] 2124 + * @param {Record<string, string> | undefined} [styles] 2125 + * @param {number | undefined} [flags] 2126 + * @returns {void} 2127 + */ 2128 + select(attrs, fn, css_hash, classes, styles, flags) { 2129 + const { value, ...select_attrs } = attrs; 2130 + this.push(`<select${attributes(select_attrs, css_hash, classes, styles, flags)}>`); 2131 + this.child((renderer) => { 2132 + renderer.local.select_value = value; 2133 + fn(renderer); 2134 + }); 2135 + this.push("</select>"); 2136 + } 2137 + /** 2138 + * @param {Record<string, any>} attrs 2139 + * @param {string | number | boolean | ((renderer: Renderer) => void)} body 2140 + * @param {string | undefined} [css_hash] 2141 + * @param {Record<string, boolean> | undefined} [classes] 2142 + * @param {Record<string, string> | undefined} [styles] 2143 + * @param {number | undefined} [flags] 2144 + */ 2145 + option(attrs, body, css_hash, classes, styles, flags) { 2146 + this.#out.push(`<option${attributes(attrs, css_hash, classes, styles, flags)}`); 2147 + const close = (renderer, value, { head, body: body2 }) => { 2148 + if ("value" in attrs) { 2149 + value = attrs.value; 2150 + } 2151 + if (value === this.local.select_value) { 2152 + renderer.#out.push(" selected"); 2153 + } 2154 + renderer.#out.push(`>${body2}</option>`); 2155 + if (head) { 2156 + renderer.head((child) => child.push(head)); 2157 + } 2158 + }; 2159 + if (typeof body === "function") { 2160 + this.child((renderer) => { 2161 + const r = new Renderer(this.global, this); 2162 + body(r); 2163 + if (this.global.mode === "async") { 2164 + return r.#collect_content_async().then((content) => { 2165 + close(renderer, content.body.replaceAll("<!---->", ""), content); 2166 + }); 2167 + } else { 2168 + const content = r.#collect_content(); 2169 + close(renderer, content.body.replaceAll("<!---->", ""), content); 2170 + } 2171 + }); 2172 + } else { 2173 + close(this, body, { body }); 2174 + } 2175 + } 2176 + /** 2177 + * @param {(renderer: Renderer) => void} fn 2178 + */ 2179 + title(fn) { 2180 + const path = this.get_path(); 2181 + const close = (head) => { 2182 + this.global.set_title(head, path); 2183 + }; 2184 + this.child((renderer) => { 2185 + const r = new Renderer(renderer.global, renderer); 2186 + fn(r); 2187 + if (renderer.global.mode === "async") { 2188 + return r.#collect_content_async().then((content) => { 2189 + close(content.head); 2190 + }); 2191 + } else { 2192 + const content = r.#collect_content(); 2193 + close(content.head); 2194 + } 2195 + }); 2196 + } 2197 + /** 2198 + * @param {string | (() => Promise<string>)} content 2199 + */ 2200 + push(content) { 2201 + if (typeof content === "function") { 2202 + this.child(async (renderer) => renderer.push(await content())); 2203 + } else { 2204 + this.#out.push(content); 2205 + } 2206 + } 2207 + /** 2208 + * @param {() => void} fn 2209 + */ 2210 + on_destroy(fn) { 2211 + (this.#on_destroy ??= []).push(fn); 2212 + } 2213 + /** 2214 + * @returns {number[]} 2215 + */ 2216 + get_path() { 2217 + return this.#parent ? [...this.#parent.get_path(), this.#parent.#out.indexOf(this)] : []; 2218 + } 2219 + /** 2220 + * @deprecated this is needed for legacy component bindings 2221 + */ 2222 + copy() { 2223 + const copy = new Renderer(this.global, this.#parent); 2224 + copy.#out = this.#out.map((item) => item instanceof Renderer ? item.copy() : item); 2225 + copy.promise = this.promise; 2226 + return copy; 2227 + } 2228 + /** 2229 + * @param {Renderer} other 2230 + * @deprecated this is needed for legacy component bindings 2231 + */ 2232 + subsume(other) { 2233 + if (this.global.mode !== other.global.mode) { 2234 + throw new Error( 2235 + "invariant: A renderer cannot switch modes. If you're seeing this, there's a compiler bug. File an issue!" 2236 + ); 2237 + } 2238 + this.local = other.local; 2239 + this.#out = other.#out.map((item) => { 2240 + if (item instanceof Renderer) { 2241 + item.subsume(item); 2242 + } 2243 + return item; 2244 + }); 2245 + this.promise = other.promise; 2246 + this.type = other.type; 2247 + } 2248 + get length() { 2249 + return this.#out.length; 2250 + } 2251 + /** 2252 + * Only available on the server and when compiling with the `server` option. 2253 + * Takes a component and returns an object with `body` and `head` properties on it, which you can use to populate the HTML when server-rendering your app. 2254 + * @template {Record<string, any>} Props 2255 + * @param {Component<Props>} component 2256 + * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} [options] 2257 + * @returns {RenderOutput} 2258 + */ 2259 + static render(component, options = {}) { 2260 + let sync; 2261 + const result = ( 2262 + /** @type {RenderOutput} */ 2263 + {} 2264 + ); 2265 + Object.defineProperties(result, { 2266 + html: { 2267 + get: () => { 2268 + return (sync ??= Renderer.#render(component, options)).body; 2269 + } 2270 + }, 2271 + head: { 2272 + get: () => { 2273 + return (sync ??= Renderer.#render(component, options)).head; 2274 + } 2275 + }, 2276 + body: { 2277 + get: () => { 2278 + return (sync ??= Renderer.#render(component, options)).body; 2279 + } 2280 + }, 2281 + hashes: { 2282 + value: { 2283 + script: "" 2284 + } 2285 + }, 2286 + then: { 2287 + value: ( 2288 + /** 2289 + * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function. 2290 + * 2291 + * @template TResult1 2292 + * @template [TResult2=never] 2293 + * @param { (value: SyncRenderOutput) => TResult1 } onfulfilled 2294 + * @param { (reason: unknown) => TResult2 } onrejected 2295 + */ 2296 + (onfulfilled, onrejected) => { 2297 + { 2298 + const result2 = sync ??= Renderer.#render(component, options); 2299 + const user_result = onfulfilled({ 2300 + head: result2.head, 2301 + body: result2.body, 2302 + html: result2.body, 2303 + hashes: { script: [] } 2304 + }); 2305 + return Promise.resolve(user_result); 2306 + } 2307 + } 2308 + ) 2309 + } 2310 + }); 2311 + return result; 2312 + } 2313 + /** 2314 + * Collect all of the `onDestroy` callbacks registered during rendering. In an async context, this is only safe to call 2315 + * after awaiting `collect_async`. 2316 + * 2317 + * Child renderers are "porous" and don't affect execution order, but component body renderers 2318 + * create ordering boundaries. Within a renderer, callbacks run in order until hitting a component boundary. 2319 + * @returns {Iterable<() => void>} 2320 + */ 2321 + *#collect_on_destroy() { 2322 + for (const component of this.#traverse_components()) { 2323 + yield* component.#collect_ondestroy(); 2324 + } 2325 + } 2326 + /** 2327 + * Performs a depth-first search of renderers, yielding the deepest components first, then additional components as we backtrack up the tree. 2328 + * @returns {Iterable<Renderer>} 2329 + */ 2330 + *#traverse_components() { 2331 + for (const child of this.#out) { 2332 + if (typeof child !== "string") { 2333 + yield* child.#traverse_components(); 2334 + } 2335 + } 2336 + if (this.#is_component_body) { 2337 + yield this; 2338 + } 2339 + } 2340 + /** 2341 + * @returns {Iterable<() => void>} 2342 + */ 2343 + *#collect_ondestroy() { 2344 + if (this.#on_destroy) { 2345 + for (const fn of this.#on_destroy) { 2346 + yield fn; 2347 + } 2348 + } 2349 + for (const child of this.#out) { 2350 + if (child instanceof Renderer && !child.#is_component_body) { 2351 + yield* child.#collect_ondestroy(); 2352 + } 2353 + } 2354 + } 2355 + /** 2356 + * Render a component. Throws if any of the children are performing asynchronous work. 2357 + * 2358 + * @template {Record<string, any>} Props 2359 + * @param {Component<Props>} component 2360 + * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string }} options 2361 + * @returns {AccumulatedContent} 2362 + */ 2363 + static #render(component, options) { 2364 + var previous_context = ssr_context; 2365 + try { 2366 + const renderer = Renderer.#open_render("sync", component, options); 2367 + const content = renderer.#collect_content(); 2368 + return Renderer.#close_render(content, renderer); 2369 + } finally { 2370 + abort(); 2371 + set_ssr_context(previous_context); 2372 + } 2373 + } 2374 + /** 2375 + * Render a component. 2376 + * 2377 + * @template {Record<string, any>} Props 2378 + * @param {Component<Props>} component 2379 + * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} options 2380 + * @returns {Promise<AccumulatedContent & { hashes: { script: Sha256Source[] } }>} 2381 + */ 2382 + static async #render_async(component, options) { 2383 + const previous_context = ssr_context; 2384 + try { 2385 + const renderer = Renderer.#open_render("async", component, options); 2386 + const content = await renderer.#collect_content_async(); 2387 + const hydratables = await renderer.#collect_hydratables(); 2388 + if (hydratables !== null) { 2389 + content.head = hydratables + content.head; 2390 + } 2391 + return Renderer.#close_render(content, renderer); 2392 + } finally { 2393 + set_ssr_context(previous_context); 2394 + abort(); 2395 + } 2396 + } 2397 + /** 2398 + * Collect all of the code from the `out` array and return it as a string, or a promise resolving to a string. 2399 + * @param {AccumulatedContent} content 2400 + * @returns {AccumulatedContent} 2401 + */ 2402 + #collect_content(content = { head: "", body: "" }) { 2403 + for (const item of this.#out) { 2404 + if (typeof item === "string") { 2405 + content[this.type] += item; 2406 + } else if (item instanceof Renderer) { 2407 + item.#collect_content(content); 2408 + } 2409 + } 2410 + return content; 2411 + } 2412 + /** 2413 + * Collect all of the code from the `out` array and return it as a string. 2414 + * @param {AccumulatedContent} content 2415 + * @returns {Promise<AccumulatedContent>} 2416 + */ 2417 + async #collect_content_async(content = { head: "", body: "" }) { 2418 + await this.promise; 2419 + for (const item of this.#out) { 2420 + if (typeof item === "string") { 2421 + content[this.type] += item; 2422 + } else if (item instanceof Renderer) { 2423 + await item.#collect_content_async(content); 2424 + } 2425 + } 2426 + return content; 2427 + } 2428 + async #collect_hydratables() { 2429 + const ctx = get_render_context().hydratable; 2430 + for (const [_, key] of ctx.unresolved_promises) { 2431 + unresolved_hydratable(key, ctx.lookup.get(key)?.stack ?? "<missing stack trace>"); 2432 + } 2433 + for (const comparison of ctx.comparisons) { 2434 + await comparison; 2435 + } 2436 + return await this.#hydratable_block(ctx); 2437 + } 2438 + /** 2439 + * @template {Record<string, any>} Props 2440 + * @param {'sync' | 'async'} mode 2441 + * @param {import('svelte').Component<Props>} component 2442 + * @param {{ props?: Omit<Props, '$$slots' | '$$events'>; context?: Map<any, any>; idPrefix?: string; csp?: Csp }} options 2443 + * @returns {Renderer} 2444 + */ 2445 + static #open_render(mode, component, options) { 2446 + const renderer = new Renderer( 2447 + new SSRState(mode, options.idPrefix ? options.idPrefix + "-" : "", options.csp) 2448 + ); 2449 + renderer.push(BLOCK_OPEN); 2450 + if (options.context) { 2451 + push$1(); 2452 + ssr_context.c = options.context; 2453 + ssr_context.r = renderer; 2454 + } 2455 + component(renderer, options.props ?? {}); 2456 + if (options.context) { 2457 + pop$1(); 2458 + } 2459 + renderer.push(BLOCK_CLOSE); 2460 + return renderer; 2461 + } 2462 + /** 2463 + * @param {AccumulatedContent} content 2464 + * @param {Renderer} renderer 2465 + * @returns {AccumulatedContent & { hashes: { script: Sha256Source[] } }} 2466 + */ 2467 + static #close_render(content, renderer) { 2468 + for (const cleanup of renderer.#collect_on_destroy()) { 2469 + cleanup(); 2470 + } 2471 + let head = content.head + renderer.global.get_title(); 2472 + let body = content.body; 2473 + for (const { hash, code } of renderer.global.css) { 2474 + head += `<style id="${hash}">${code}</style>`; 2475 + } 2476 + return { 2477 + head, 2478 + body, 2479 + hashes: { 2480 + script: renderer.global.csp.script_hashes 2481 + } 2482 + }; 2483 + } 2484 + /** 2485 + * @param {HydratableContext} ctx 2486 + */ 2487 + async #hydratable_block(ctx) { 2488 + if (ctx.lookup.size === 0) { 2489 + return null; 2490 + } 2491 + let entries = []; 2492 + let has_promises = false; 2493 + for (const [k, v] of ctx.lookup) { 2494 + if (v.promises) { 2495 + has_promises = true; 2496 + for (const p of v.promises) await p; 2497 + } 2498 + entries.push(`[${JSON.stringify(k)},${v.serialized}]`); 2499 + } 2500 + let prelude = `const h = (window.__svelte ??= {}).h ??= new Map();`; 2501 + if (has_promises) { 2502 + prelude = `const r = (v) => Promise.resolve(v); 2503 + ${prelude}`; 2504 + } 2505 + const body = ` 2506 + { 2507 + ${prelude} 2508 + 2509 + for (const [k, v] of [ 2510 + ${entries.join(",\n ")} 2511 + ]) { 2512 + h.set(k, v); 2513 + } 2514 + } 2515 + `; 2516 + let csp_attr = ""; 2517 + if (this.global.csp.nonce) { 2518 + csp_attr = ` nonce="${this.global.csp.nonce}"`; 2519 + } else if (this.global.csp.hash) { 2520 + const hash = await sha256(body); 2521 + this.global.csp.script_hashes.push(`sha256-${hash}`); 2522 + } 2523 + return ` 2524 + <script${csp_attr}>${body}<\/script>`; 2525 + } 2526 + } 2527 + class SSRState { 2528 + /** @readonly @type {Csp & { script_hashes: Sha256Source[] }} */ 2529 + csp; 2530 + /** @readonly @type {'sync' | 'async'} */ 2531 + mode; 2532 + /** @readonly @type {() => string} */ 2533 + uid; 2534 + /** @readonly @type {Set<{ hash: string; code: string }>} */ 2535 + css = /* @__PURE__ */ new Set(); 2536 + /** @type {{ path: number[], value: string }} */ 2537 + #title = { path: [], value: "" }; 2538 + /** 2539 + * @param {'sync' | 'async'} mode 2540 + * @param {string} id_prefix 2541 + * @param {Csp} csp 2542 + */ 2543 + constructor(mode, id_prefix = "", csp = { hash: false }) { 2544 + this.mode = mode; 2545 + this.csp = { ...csp, script_hashes: [] }; 2546 + let uid = 1; 2547 + this.uid = () => `${id_prefix}s${uid++}`; 2548 + } 2549 + get_title() { 2550 + return this.#title.value; 2551 + } 2552 + /** 2553 + * Performs a depth-first (lexicographic) comparison using the path. Rejects sets 2554 + * from earlier than or equal to the current value. 2555 + * @param {string} value 2556 + * @param {number[]} path 2557 + */ 2558 + set_title(value, path) { 2559 + const current = this.#title.path; 2560 + let i = 0; 2561 + let l = Math.min(path.length, current.length); 2562 + while (i < l && path[i] === current[i]) i += 1; 2563 + if (path[i] === void 0) return; 2564 + if (current[i] === void 0 || path[i] > current[i]) { 2565 + this.#title.path = path; 2566 + this.#title.value = value; 2567 + } 2568 + } 2569 + } 2570 + const INVALID_ATTR_NAME_CHAR_REGEX = /[\s'">/=\u{FDD0}-\u{FDEF}\u{FFFE}\u{FFFF}\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\u{4FFFE}\u{4FFFF}\u{5FFFE}\u{5FFFF}\u{6FFFE}\u{6FFFF}\u{7FFFE}\u{7FFFF}\u{8FFFE}\u{8FFFF}\u{9FFFE}\u{9FFFF}\u{AFFFE}\u{AFFFF}\u{BFFFE}\u{BFFFF}\u{CFFFE}\u{CFFFF}\u{DFFFE}\u{DFFFF}\u{EFFFE}\u{EFFFF}\u{FFFFE}\u{FFFFF}\u{10FFFE}\u{10FFFF}]/u; 2571 + function render(component, options = {}) { 2572 + if (options.csp?.hash && options.csp.nonce) { 2573 + invalid_csp(); 2574 + } 2575 + return Renderer.render( 2576 + /** @type {Component<Props>} */ 2577 + component, 2578 + options 2579 + ); 2580 + } 2581 + function attributes(attrs, css_hash, classes, styles, flags = 0) { 2582 + if (styles) { 2583 + attrs.style = to_style(attrs.style, styles); 2584 + } 2585 + if (attrs.class) { 2586 + attrs.class = clsx(attrs.class); 2587 + } 2588 + if (css_hash || classes) { 2589 + attrs.class = to_class(attrs.class, css_hash, classes); 2590 + } 2591 + let attr_str = ""; 2592 + let name; 2593 + const is_html = (flags & ELEMENT_IS_NAMESPACED) === 0; 2594 + const lowercase = (flags & ELEMENT_PRESERVE_ATTRIBUTE_CASE) === 0; 2595 + const is_input = (flags & ELEMENT_IS_INPUT) !== 0; 2596 + for (name in attrs) { 2597 + if (typeof attrs[name] === "function") continue; 2598 + if (name[0] === "$" && name[1] === "$") continue; 2599 + if (INVALID_ATTR_NAME_CHAR_REGEX.test(name)) continue; 2600 + var value = attrs[name]; 2601 + if (lowercase) { 2602 + name = name.toLowerCase(); 2603 + } 2604 + if (is_input) { 2605 + if (name === "defaultvalue" || name === "defaultchecked") { 2606 + name = name === "defaultvalue" ? "value" : "checked"; 2607 + if (attrs[name]) continue; 2608 + } 2609 + } 2610 + attr_str += attr(name, value, is_html && is_boolean_attribute(name)); 2611 + } 2612 + return attr_str; 2613 + } 2614 + function stringify(value) { 2615 + return typeof value === "string" ? value : value == null ? "" : value + ""; 2616 + } 2617 + function attr_class(value, hash, directives) { 2618 + var result = to_class(value, hash, directives); 2619 + return result ? ` class="${escape_html(result, true)}"` : ""; 2620 + } 2621 + function attr_style(value, directives) { 2622 + var result = to_style(value, directives); 2623 + return result ? ` style="${escape_html(result, true)}"` : ""; 2624 + } 2625 + function store_get(store_values, store_name, store) { 2626 + if (store_name in store_values && store_values[store_name][0] === store) { 2627 + return store_values[store_name][2]; 2628 + } 2629 + store_values[store_name]?.[1](); 2630 + store_values[store_name] = [store, null, void 0]; 2631 + const unsub = subscribe_to_store( 2632 + store, 2633 + /** @param {any} v */ 2634 + (v) => store_values[store_name][2] = v 2635 + ); 2636 + store_values[store_name][1] = unsub; 2637 + return store_values[store_name][2]; 2638 + } 2639 + function unsubscribe_stores(store_values) { 2640 + for (const store_name in store_values) { 2641 + store_values[store_name][1](); 2642 + } 2643 + } 2644 + function bind_props(props_parent, props_now) { 2645 + for (const key in props_now) { 2646 + const initial_value = props_parent[key]; 2647 + const value = props_now[key]; 2648 + if (initial_value === void 0 && value !== void 0 && Object.getOwnPropertyDescriptor(props_parent, key)?.set) { 2649 + props_parent[key] = value; 2650 + } 2651 + } 2652 + } 2653 + function ensure_array_like(array_like_or_iterator) { 2654 + if (array_like_or_iterator) { 2655 + return array_like_or_iterator.length !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); 2656 + } 2657 + return []; 2658 + } 2659 + export { 2660 + stringify as $, 2661 + svelte_boundary_reset_onerror as A, 2662 + Batch as B, 2663 + COMMENT_NODE as C, 2664 + EFFECT_PRESERVED as D, 2665 + EFFECT_TRANSPARENT as E, 2666 + BOUNDARY_EFFECT as F, 2667 + init_operations as G, 2668 + HYDRATION_ERROR as H, 2669 + get_first_child as I, 2670 + hydration_failed as J, 2671 + clear_text_content as K, 2672 + component_root as L, 2673 + is_passive_event as M, 2674 + push as N, 2675 + pop as O, 2676 + set as P, 2677 + LEGACY_PROPS as Q, 2678 + flushSync as R, 2679 + mutable_source as S, 2680 + render as T, 2681 + store_get as U, 2682 + unsubscribe_stores as V, 2683 + ensure_array_like as W, 2684 + bind_props as X, 2685 + attr_class as Y, 2686 + attr_style as Z, 2687 + attr as _, 2688 + HYDRATION_END as a, 2689 + clsx as a0, 2690 + HYDRATION_START as b, 2691 + HYDRATION_START_ELSE as c, 2692 + get as d, 2693 + effect_tracking as e, 2694 + active_effect as f, 2695 + get_next_sibling as g, 2696 + block as h, 2697 + increment as i, 2698 + branch as j, 2699 + create_text as k, 2700 + set_active_effect as l, 2701 + set_active_reaction as m, 2702 + set_component_context as n, 2703 + handle_error as o, 2704 + pause_effect as p, 2705 + queue_micro_task as q, 2706 + render_effect as r, 2707 + source as s, 2708 + active_reaction as t, 2709 + untrack as u, 2710 + component_context as v, 2711 + move_effect as w, 2712 + internal_set as x, 2713 + destroy_effect as y, 2714 + invoke_error_boundary as z 2715 + };
+1005
app/.svelte-kit/output/server/chunks/internal.js
··· 1 + import { H as HYDRATION_ERROR, C as COMMENT_NODE, a as HYDRATION_END, g as get_next_sibling, b as HYDRATION_START, c as HYDRATION_START_ELSE, e as effect_tracking, d as get, s as source, r as render_effect, u as untrack, i as increment, q as queue_micro_task, f as active_effect, h as block, j as branch, B as Batch, p as pause_effect, k as create_text, l as set_active_effect, m as set_active_reaction, n as set_component_context, o as handle_error, t as active_reaction, v as component_context, w as move_effect, x as internal_set, y as destroy_effect, z as invoke_error_boundary, A as svelte_boundary_reset_onerror, E as EFFECT_TRANSPARENT, D as EFFECT_PRESERVED, F as BOUNDARY_EFFECT, G as init_operations, I as get_first_child, J as hydration_failed, K as clear_text_content, L as component_root, M as is_passive_event, N as push, O as pop, P as set, Q as LEGACY_PROPS, R as flushSync, S as mutable_source, T as render } from "./index2.js"; 2 + import { d as define_property, a as array_from } from "./escaping.js"; 3 + import "clsx"; 4 + import { s as setContext } from "./context.js"; 5 + import "./environment.js"; 6 + let public_env = {}; 7 + function set_private_env(environment) { 8 + } 9 + function set_public_env(environment) { 10 + public_env = environment; 11 + } 12 + function hydration_mismatch(location) { 13 + { 14 + console.warn(`https://svelte.dev/e/hydration_mismatch`); 15 + } 16 + } 17 + function svelte_boundary_reset_noop() { 18 + { 19 + console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`); 20 + } 21 + } 22 + let hydrating = false; 23 + function set_hydrating(value) { 24 + hydrating = value; 25 + } 26 + let hydrate_node; 27 + function set_hydrate_node(node) { 28 + if (node === null) { 29 + hydration_mismatch(); 30 + throw HYDRATION_ERROR; 31 + } 32 + return hydrate_node = node; 33 + } 34 + function hydrate_next() { 35 + return set_hydrate_node(get_next_sibling(hydrate_node)); 36 + } 37 + function next(count = 1) { 38 + if (hydrating) { 39 + var i = count; 40 + var node = hydrate_node; 41 + while (i--) { 42 + node = /** @type {TemplateNode} */ 43 + get_next_sibling(node); 44 + } 45 + hydrate_node = node; 46 + } 47 + } 48 + function skip_nodes(remove = true) { 49 + var depth = 0; 50 + var node = hydrate_node; 51 + while (true) { 52 + if (node.nodeType === COMMENT_NODE) { 53 + var data = ( 54 + /** @type {Comment} */ 55 + node.data 56 + ); 57 + if (data === HYDRATION_END) { 58 + if (depth === 0) return node; 59 + depth -= 1; 60 + } else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) { 61 + depth += 1; 62 + } 63 + } 64 + var next2 = ( 65 + /** @type {TemplateNode} */ 66 + get_next_sibling(node) 67 + ); 68 + if (remove) node.remove(); 69 + node = next2; 70 + } 71 + } 72 + function createSubscriber(start) { 73 + let subscribers = 0; 74 + let version = source(0); 75 + let stop; 76 + return () => { 77 + if (effect_tracking()) { 78 + get(version); 79 + render_effect(() => { 80 + if (subscribers === 0) { 81 + stop = untrack(() => start(() => increment(version))); 82 + } 83 + subscribers += 1; 84 + return () => { 85 + queue_micro_task(() => { 86 + subscribers -= 1; 87 + if (subscribers === 0) { 88 + stop?.(); 89 + stop = void 0; 90 + increment(version); 91 + } 92 + }); 93 + }; 94 + }); 95 + } 96 + }; 97 + } 98 + var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT; 99 + function boundary(node, props, children) { 100 + new Boundary(node, props, children); 101 + } 102 + class Boundary { 103 + /** @type {Boundary | null} */ 104 + parent; 105 + #pending = false; 106 + /** @type {TemplateNode} */ 107 + #anchor; 108 + /** @type {TemplateNode | null} */ 109 + #hydrate_open = hydrating ? hydrate_node : null; 110 + /** @type {BoundaryProps} */ 111 + #props; 112 + /** @type {((anchor: Node) => void)} */ 113 + #children; 114 + /** @type {Effect} */ 115 + #effect; 116 + /** @type {Effect | null} */ 117 + #main_effect = null; 118 + /** @type {Effect | null} */ 119 + #pending_effect = null; 120 + /** @type {Effect | null} */ 121 + #failed_effect = null; 122 + /** @type {DocumentFragment | null} */ 123 + #offscreen_fragment = null; 124 + /** @type {TemplateNode | null} */ 125 + #pending_anchor = null; 126 + #local_pending_count = 0; 127 + #pending_count = 0; 128 + #is_creating_fallback = false; 129 + /** 130 + * A source containing the number of pending async deriveds/expressions. 131 + * Only created if `$effect.pending()` is used inside the boundary, 132 + * otherwise updating the source results in needless `Batch.ensure()` 133 + * calls followed by no-op flushes 134 + * @type {Source<number> | null} 135 + */ 136 + #effect_pending = null; 137 + #effect_pending_subscriber = createSubscriber(() => { 138 + this.#effect_pending = source(this.#local_pending_count); 139 + return () => { 140 + this.#effect_pending = null; 141 + }; 142 + }); 143 + /** 144 + * @param {TemplateNode} node 145 + * @param {BoundaryProps} props 146 + * @param {((anchor: Node) => void)} children 147 + */ 148 + constructor(node, props, children) { 149 + this.#anchor = node; 150 + this.#props = props; 151 + this.#children = children; 152 + this.parent = /** @type {Effect} */ 153 + active_effect.b; 154 + this.#pending = !!this.#props.pending; 155 + this.#effect = block(() => { 156 + active_effect.b = this; 157 + if (hydrating) { 158 + const comment = this.#hydrate_open; 159 + hydrate_next(); 160 + const server_rendered_pending = ( 161 + /** @type {Comment} */ 162 + comment.nodeType === COMMENT_NODE && /** @type {Comment} */ 163 + comment.data === HYDRATION_START_ELSE 164 + ); 165 + if (server_rendered_pending) { 166 + this.#hydrate_pending_content(); 167 + } else { 168 + this.#hydrate_resolved_content(); 169 + } 170 + } else { 171 + var anchor = this.#get_anchor(); 172 + try { 173 + this.#main_effect = branch(() => children(anchor)); 174 + } catch (error) { 175 + this.error(error); 176 + } 177 + if (this.#pending_count > 0) { 178 + this.#show_pending_snippet(); 179 + } else { 180 + this.#pending = false; 181 + } 182 + } 183 + return () => { 184 + this.#pending_anchor?.remove(); 185 + }; 186 + }, flags); 187 + if (hydrating) { 188 + this.#anchor = hydrate_node; 189 + } 190 + } 191 + #hydrate_resolved_content() { 192 + try { 193 + this.#main_effect = branch(() => this.#children(this.#anchor)); 194 + } catch (error) { 195 + this.error(error); 196 + } 197 + this.#pending = false; 198 + } 199 + #hydrate_pending_content() { 200 + const pending = this.#props.pending; 201 + if (!pending) { 202 + return; 203 + } 204 + this.#pending_effect = branch(() => pending(this.#anchor)); 205 + Batch.enqueue(() => { 206 + var anchor = this.#get_anchor(); 207 + this.#main_effect = this.#run(() => { 208 + Batch.ensure(); 209 + return branch(() => this.#children(anchor)); 210 + }); 211 + if (this.#pending_count > 0) { 212 + this.#show_pending_snippet(); 213 + } else { 214 + pause_effect( 215 + /** @type {Effect} */ 216 + this.#pending_effect, 217 + () => { 218 + this.#pending_effect = null; 219 + } 220 + ); 221 + this.#pending = false; 222 + } 223 + }); 224 + } 225 + #get_anchor() { 226 + var anchor = this.#anchor; 227 + if (this.#pending) { 228 + this.#pending_anchor = create_text(); 229 + this.#anchor.before(this.#pending_anchor); 230 + anchor = this.#pending_anchor; 231 + } 232 + return anchor; 233 + } 234 + /** 235 + * Returns `true` if the effect exists inside a boundary whose pending snippet is shown 236 + * @returns {boolean} 237 + */ 238 + is_pending() { 239 + return this.#pending || !!this.parent && this.parent.is_pending(); 240 + } 241 + has_pending_snippet() { 242 + return !!this.#props.pending; 243 + } 244 + /** 245 + * @param {() => Effect | null} fn 246 + */ 247 + #run(fn) { 248 + var previous_effect = active_effect; 249 + var previous_reaction = active_reaction; 250 + var previous_ctx = component_context; 251 + set_active_effect(this.#effect); 252 + set_active_reaction(this.#effect); 253 + set_component_context(this.#effect.ctx); 254 + try { 255 + return fn(); 256 + } catch (e) { 257 + handle_error(e); 258 + return null; 259 + } finally { 260 + set_active_effect(previous_effect); 261 + set_active_reaction(previous_reaction); 262 + set_component_context(previous_ctx); 263 + } 264 + } 265 + #show_pending_snippet() { 266 + const pending = ( 267 + /** @type {(anchor: Node) => void} */ 268 + this.#props.pending 269 + ); 270 + if (this.#main_effect !== null) { 271 + this.#offscreen_fragment = document.createDocumentFragment(); 272 + this.#offscreen_fragment.append( 273 + /** @type {TemplateNode} */ 274 + this.#pending_anchor 275 + ); 276 + move_effect(this.#main_effect, this.#offscreen_fragment); 277 + } 278 + if (this.#pending_effect === null) { 279 + this.#pending_effect = branch(() => pending(this.#anchor)); 280 + } 281 + } 282 + /** 283 + * Updates the pending count associated with the currently visible pending snippet, 284 + * if any, such that we can replace the snippet with content once work is done 285 + * @param {1 | -1} d 286 + */ 287 + #update_pending_count(d) { 288 + if (!this.has_pending_snippet()) { 289 + if (this.parent) { 290 + this.parent.#update_pending_count(d); 291 + } 292 + return; 293 + } 294 + this.#pending_count += d; 295 + if (this.#pending_count === 0) { 296 + this.#pending = false; 297 + if (this.#pending_effect) { 298 + pause_effect(this.#pending_effect, () => { 299 + this.#pending_effect = null; 300 + }); 301 + } 302 + if (this.#offscreen_fragment) { 303 + this.#anchor.before(this.#offscreen_fragment); 304 + this.#offscreen_fragment = null; 305 + } 306 + } 307 + } 308 + /** 309 + * Update the source that powers `$effect.pending()` inside this boundary, 310 + * and controls when the current `pending` snippet (if any) is removed. 311 + * Do not call from inside the class 312 + * @param {1 | -1} d 313 + */ 314 + update_pending_count(d) { 315 + this.#update_pending_count(d); 316 + this.#local_pending_count += d; 317 + if (this.#effect_pending) { 318 + internal_set(this.#effect_pending, this.#local_pending_count); 319 + } 320 + } 321 + get_effect_pending() { 322 + this.#effect_pending_subscriber(); 323 + return get( 324 + /** @type {Source<number>} */ 325 + this.#effect_pending 326 + ); 327 + } 328 + /** @param {unknown} error */ 329 + error(error) { 330 + var onerror = this.#props.onerror; 331 + let failed = this.#props.failed; 332 + if (this.#is_creating_fallback || !onerror && !failed) { 333 + throw error; 334 + } 335 + if (this.#main_effect) { 336 + destroy_effect(this.#main_effect); 337 + this.#main_effect = null; 338 + } 339 + if (this.#pending_effect) { 340 + destroy_effect(this.#pending_effect); 341 + this.#pending_effect = null; 342 + } 343 + if (this.#failed_effect) { 344 + destroy_effect(this.#failed_effect); 345 + this.#failed_effect = null; 346 + } 347 + if (hydrating) { 348 + set_hydrate_node( 349 + /** @type {TemplateNode} */ 350 + this.#hydrate_open 351 + ); 352 + next(); 353 + set_hydrate_node(skip_nodes()); 354 + } 355 + var did_reset = false; 356 + var calling_on_error = false; 357 + const reset = () => { 358 + if (did_reset) { 359 + svelte_boundary_reset_noop(); 360 + return; 361 + } 362 + did_reset = true; 363 + if (calling_on_error) { 364 + svelte_boundary_reset_onerror(); 365 + } 366 + Batch.ensure(); 367 + this.#local_pending_count = 0; 368 + if (this.#failed_effect !== null) { 369 + pause_effect(this.#failed_effect, () => { 370 + this.#failed_effect = null; 371 + }); 372 + } 373 + this.#pending = this.has_pending_snippet(); 374 + this.#main_effect = this.#run(() => { 375 + this.#is_creating_fallback = false; 376 + return branch(() => this.#children(this.#anchor)); 377 + }); 378 + if (this.#pending_count > 0) { 379 + this.#show_pending_snippet(); 380 + } else { 381 + this.#pending = false; 382 + } 383 + }; 384 + var previous_reaction = active_reaction; 385 + try { 386 + set_active_reaction(null); 387 + calling_on_error = true; 388 + onerror?.(error, reset); 389 + calling_on_error = false; 390 + } catch (error2) { 391 + invoke_error_boundary(error2, this.#effect && this.#effect.parent); 392 + } finally { 393 + set_active_reaction(previous_reaction); 394 + } 395 + if (failed) { 396 + queue_micro_task(() => { 397 + this.#failed_effect = this.#run(() => { 398 + Batch.ensure(); 399 + this.#is_creating_fallback = true; 400 + try { 401 + return branch(() => { 402 + failed( 403 + this.#anchor, 404 + () => error, 405 + () => reset 406 + ); 407 + }); 408 + } catch (error2) { 409 + invoke_error_boundary( 410 + error2, 411 + /** @type {Effect} */ 412 + this.#effect.parent 413 + ); 414 + return null; 415 + } finally { 416 + this.#is_creating_fallback = false; 417 + } 418 + }); 419 + }); 420 + } 421 + } 422 + } 423 + const all_registered_events = /* @__PURE__ */ new Set(); 424 + const root_event_handles = /* @__PURE__ */ new Set(); 425 + let last_propagated_event = null; 426 + function handle_event_propagation(event) { 427 + var handler_element = this; 428 + var owner_document = ( 429 + /** @type {Node} */ 430 + handler_element.ownerDocument 431 + ); 432 + var event_name = event.type; 433 + var path = event.composedPath?.() || []; 434 + var current_target = ( 435 + /** @type {null | Element} */ 436 + path[0] || event.target 437 + ); 438 + last_propagated_event = event; 439 + var path_idx = 0; 440 + var handled_at = last_propagated_event === event && event.__root; 441 + if (handled_at) { 442 + var at_idx = path.indexOf(handled_at); 443 + if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */ 444 + window)) { 445 + event.__root = handler_element; 446 + return; 447 + } 448 + var handler_idx = path.indexOf(handler_element); 449 + if (handler_idx === -1) { 450 + return; 451 + } 452 + if (at_idx <= handler_idx) { 453 + path_idx = at_idx; 454 + } 455 + } 456 + current_target = /** @type {Element} */ 457 + path[path_idx] || event.target; 458 + if (current_target === handler_element) return; 459 + define_property(event, "currentTarget", { 460 + configurable: true, 461 + get() { 462 + return current_target || owner_document; 463 + } 464 + }); 465 + var previous_reaction = active_reaction; 466 + var previous_effect = active_effect; 467 + set_active_reaction(null); 468 + set_active_effect(null); 469 + try { 470 + var throw_error; 471 + var other_errors = []; 472 + while (current_target !== null) { 473 + var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */ 474 + current_target.host || null; 475 + try { 476 + var delegated = current_target["__" + event_name]; 477 + if (delegated != null && (!/** @type {any} */ 478 + current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well 479 + // -> the target could not have been disabled because it emits the event in the first place 480 + event.target === current_target)) { 481 + delegated.call(current_target, event); 482 + } 483 + } catch (error) { 484 + if (throw_error) { 485 + other_errors.push(error); 486 + } else { 487 + throw_error = error; 488 + } 489 + } 490 + if (event.cancelBubble || parent_element === handler_element || parent_element === null) { 491 + break; 492 + } 493 + current_target = parent_element; 494 + } 495 + if (throw_error) { 496 + for (let error of other_errors) { 497 + queueMicrotask(() => { 498 + throw error; 499 + }); 500 + } 501 + throw throw_error; 502 + } 503 + } finally { 504 + event.__root = handler_element; 505 + delete event.currentTarget; 506 + set_active_reaction(previous_reaction); 507 + set_active_effect(previous_effect); 508 + } 509 + } 510 + function assign_nodes(start, end) { 511 + var effect = ( 512 + /** @type {Effect} */ 513 + active_effect 514 + ); 515 + if (effect.nodes === null) { 516 + effect.nodes = { start, end, a: null, t: null }; 517 + } 518 + } 519 + function mount(component, options2) { 520 + return _mount(component, options2); 521 + } 522 + function hydrate(component, options2) { 523 + init_operations(); 524 + options2.intro = options2.intro ?? false; 525 + const target = options2.target; 526 + const was_hydrating = hydrating; 527 + const previous_hydrate_node = hydrate_node; 528 + try { 529 + var anchor = get_first_child(target); 530 + while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ 531 + anchor.data !== HYDRATION_START)) { 532 + anchor = get_next_sibling(anchor); 533 + } 534 + if (!anchor) { 535 + throw HYDRATION_ERROR; 536 + } 537 + set_hydrating(true); 538 + set_hydrate_node( 539 + /** @type {Comment} */ 540 + anchor 541 + ); 542 + const instance = _mount(component, { ...options2, anchor }); 543 + set_hydrating(false); 544 + return ( 545 + /** @type {Exports} */ 546 + instance 547 + ); 548 + } catch (error) { 549 + if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) { 550 + throw error; 551 + } 552 + if (error !== HYDRATION_ERROR) { 553 + console.warn("Failed to hydrate: ", error); 554 + } 555 + if (options2.recover === false) { 556 + hydration_failed(); 557 + } 558 + init_operations(); 559 + clear_text_content(target); 560 + set_hydrating(false); 561 + return mount(component, options2); 562 + } finally { 563 + set_hydrating(was_hydrating); 564 + set_hydrate_node(previous_hydrate_node); 565 + } 566 + } 567 + const document_listeners = /* @__PURE__ */ new Map(); 568 + function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) { 569 + init_operations(); 570 + var registered_events = /* @__PURE__ */ new Set(); 571 + var event_handle = (events2) => { 572 + for (var i = 0; i < events2.length; i++) { 573 + var event_name = events2[i]; 574 + if (registered_events.has(event_name)) continue; 575 + registered_events.add(event_name); 576 + var passive = is_passive_event(event_name); 577 + target.addEventListener(event_name, handle_event_propagation, { passive }); 578 + var n = document_listeners.get(event_name); 579 + if (n === void 0) { 580 + document.addEventListener(event_name, handle_event_propagation, { passive }); 581 + document_listeners.set(event_name, 1); 582 + } else { 583 + document_listeners.set(event_name, n + 1); 584 + } 585 + } 586 + }; 587 + event_handle(array_from(all_registered_events)); 588 + root_event_handles.add(event_handle); 589 + var component = void 0; 590 + var unmount2 = component_root(() => { 591 + var anchor_node = anchor ?? target.appendChild(create_text()); 592 + boundary( 593 + /** @type {TemplateNode} */ 594 + anchor_node, 595 + { 596 + pending: () => { 597 + } 598 + }, 599 + (anchor_node2) => { 600 + if (context) { 601 + push({}); 602 + var ctx = ( 603 + /** @type {ComponentContext} */ 604 + component_context 605 + ); 606 + ctx.c = context; 607 + } 608 + if (events) { 609 + props.$$events = events; 610 + } 611 + if (hydrating) { 612 + assign_nodes( 613 + /** @type {TemplateNode} */ 614 + anchor_node2, 615 + null 616 + ); 617 + } 618 + component = Component(anchor_node2, props) || {}; 619 + if (hydrating) { 620 + active_effect.nodes.end = hydrate_node; 621 + if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */ 622 + hydrate_node.data !== HYDRATION_END) { 623 + hydration_mismatch(); 624 + throw HYDRATION_ERROR; 625 + } 626 + } 627 + if (context) { 628 + pop(); 629 + } 630 + } 631 + ); 632 + return () => { 633 + for (var event_name of registered_events) { 634 + target.removeEventListener(event_name, handle_event_propagation); 635 + var n = ( 636 + /** @type {number} */ 637 + document_listeners.get(event_name) 638 + ); 639 + if (--n === 0) { 640 + document.removeEventListener(event_name, handle_event_propagation); 641 + document_listeners.delete(event_name); 642 + } else { 643 + document_listeners.set(event_name, n); 644 + } 645 + } 646 + root_event_handles.delete(event_handle); 647 + if (anchor_node !== anchor) { 648 + anchor_node.parentNode?.removeChild(anchor_node); 649 + } 650 + }; 651 + }); 652 + mounted_components.set(component, unmount2); 653 + return component; 654 + } 655 + let mounted_components = /* @__PURE__ */ new WeakMap(); 656 + function unmount(component, options2) { 657 + const fn = mounted_components.get(component); 658 + if (fn) { 659 + mounted_components.delete(component); 660 + return fn(options2); 661 + } 662 + return Promise.resolve(); 663 + } 664 + function asClassComponent$1(component) { 665 + return class extends Svelte4Component { 666 + /** @param {any} options */ 667 + constructor(options2) { 668 + super({ 669 + component, 670 + ...options2 671 + }); 672 + } 673 + }; 674 + } 675 + class Svelte4Component { 676 + /** @type {any} */ 677 + #events; 678 + /** @type {Record<string, any>} */ 679 + #instance; 680 + /** 681 + * @param {ComponentConstructorOptions & { 682 + * component: any; 683 + * }} options 684 + */ 685 + constructor(options2) { 686 + var sources = /* @__PURE__ */ new Map(); 687 + var add_source = (key, value) => { 688 + var s = mutable_source(value, false, false); 689 + sources.set(key, s); 690 + return s; 691 + }; 692 + const props = new Proxy( 693 + { ...options2.props || {}, $$events: {} }, 694 + { 695 + get(target, prop) { 696 + return get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop))); 697 + }, 698 + has(target, prop) { 699 + if (prop === LEGACY_PROPS) return true; 700 + get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop))); 701 + return Reflect.has(target, prop); 702 + }, 703 + set(target, prop, value) { 704 + set(sources.get(prop) ?? add_source(prop, value), value); 705 + return Reflect.set(target, prop, value); 706 + } 707 + } 708 + ); 709 + this.#instance = (options2.hydrate ? hydrate : mount)(options2.component, { 710 + target: options2.target, 711 + anchor: options2.anchor, 712 + props, 713 + context: options2.context, 714 + intro: options2.intro ?? false, 715 + recover: options2.recover 716 + }); 717 + if (!options2?.props?.$$host || options2.sync === false) { 718 + flushSync(); 719 + } 720 + this.#events = props.$$events; 721 + for (const key of Object.keys(this.#instance)) { 722 + if (key === "$set" || key === "$destroy" || key === "$on") continue; 723 + define_property(this, key, { 724 + get() { 725 + return this.#instance[key]; 726 + }, 727 + /** @param {any} value */ 728 + set(value) { 729 + this.#instance[key] = value; 730 + }, 731 + enumerable: true 732 + }); 733 + } 734 + this.#instance.$set = /** @param {Record<string, any>} next */ 735 + (next2) => { 736 + Object.assign(props, next2); 737 + }; 738 + this.#instance.$destroy = () => { 739 + unmount(this.#instance); 740 + }; 741 + } 742 + /** @param {Record<string, any>} props */ 743 + $set(props) { 744 + this.#instance.$set(props); 745 + } 746 + /** 747 + * @param {string} event 748 + * @param {(...args: any[]) => any} callback 749 + * @returns {any} 750 + */ 751 + $on(event, callback) { 752 + this.#events[event] = this.#events[event] || []; 753 + const cb = (...args) => callback.call(this, ...args); 754 + this.#events[event].push(cb); 755 + return () => { 756 + this.#events[event] = this.#events[event].filter( 757 + /** @param {any} fn */ 758 + (fn) => fn !== cb 759 + ); 760 + }; 761 + } 762 + $destroy() { 763 + this.#instance.$destroy(); 764 + } 765 + } 766 + let read_implementation = null; 767 + function set_read_implementation(fn) { 768 + read_implementation = fn; 769 + } 770 + function set_manifest(_) { 771 + } 772 + function asClassComponent(component) { 773 + const component_constructor = asClassComponent$1(component); 774 + const _render = (props, { context, csp } = {}) => { 775 + const result = render(component, { props, context, csp }); 776 + const munged = Object.defineProperties( 777 + /** @type {LegacyRenderResult & PromiseLike<LegacyRenderResult>} */ 778 + {}, 779 + { 780 + css: { 781 + value: { code: "", map: null } 782 + }, 783 + head: { 784 + get: () => result.head 785 + }, 786 + html: { 787 + get: () => result.body 788 + }, 789 + then: { 790 + /** 791 + * this is not type-safe, but honestly it's the best I can do right now, and it's a straightforward function. 792 + * 793 + * @template TResult1 794 + * @template [TResult2=never] 795 + * @param { (value: LegacyRenderResult) => TResult1 } onfulfilled 796 + * @param { (reason: unknown) => TResult2 } onrejected 797 + */ 798 + value: (onfulfilled, onrejected) => { 799 + { 800 + const user_result = onfulfilled({ 801 + css: munged.css, 802 + head: munged.head, 803 + html: munged.html 804 + }); 805 + return Promise.resolve(user_result); 806 + } 807 + } 808 + } 809 + } 810 + ); 811 + return munged; 812 + }; 813 + component_constructor.render = _render; 814 + return component_constructor; 815 + } 816 + function Root($$renderer, $$props) { 817 + $$renderer.component(($$renderer2) => { 818 + let { 819 + stores, 820 + page, 821 + constructors, 822 + components = [], 823 + form, 824 + data_0 = null, 825 + data_1 = null, 826 + data_2 = null 827 + } = $$props; 828 + { 829 + setContext("__svelte__", stores); 830 + } 831 + { 832 + stores.page.set(page); 833 + } 834 + const Pyramid_2 = constructors[2]; 835 + if (constructors[1]) { 836 + $$renderer2.push("<!--[-->"); 837 + const Pyramid_0 = constructors[0]; 838 + $$renderer2.push(`<!---->`); 839 + Pyramid_0($$renderer2, { 840 + data: data_0, 841 + form, 842 + params: page.params, 843 + children: ($$renderer3) => { 844 + if (constructors[2]) { 845 + $$renderer3.push("<!--[-->"); 846 + const Pyramid_1 = constructors[1]; 847 + $$renderer3.push(`<!---->`); 848 + Pyramid_1($$renderer3, { 849 + data: data_1, 850 + form, 851 + params: page.params, 852 + children: ($$renderer4) => { 853 + $$renderer4.push(`<!---->`); 854 + Pyramid_2($$renderer4, { data: data_2, form, params: page.params }); 855 + $$renderer4.push(`<!---->`); 856 + }, 857 + $$slots: { default: true } 858 + }); 859 + $$renderer3.push(`<!---->`); 860 + } else { 861 + $$renderer3.push("<!--[!-->"); 862 + const Pyramid_1 = constructors[1]; 863 + $$renderer3.push(`<!---->`); 864 + Pyramid_1($$renderer3, { data: data_1, form, params: page.params }); 865 + $$renderer3.push(`<!---->`); 866 + } 867 + $$renderer3.push(`<!--]-->`); 868 + }, 869 + $$slots: { default: true } 870 + }); 871 + $$renderer2.push(`<!---->`); 872 + } else { 873 + $$renderer2.push("<!--[!-->"); 874 + const Pyramid_0 = constructors[0]; 875 + $$renderer2.push(`<!---->`); 876 + Pyramid_0($$renderer2, { data: data_0, form, params: page.params }); 877 + $$renderer2.push(`<!---->`); 878 + } 879 + $$renderer2.push(`<!--]--> `); 880 + { 881 + $$renderer2.push("<!--[!-->"); 882 + } 883 + $$renderer2.push(`<!--]-->`); 884 + }); 885 + } 886 + const root = asClassComponent(Root); 887 + const options = { 888 + app_template_contains_nonce: false, 889 + async: false, 890 + csp: { "mode": "auto", "directives": { "upgrade-insecure-requests": false, "block-all-mixed-content": false }, "reportOnly": { "upgrade-insecure-requests": false, "block-all-mixed-content": false } }, 891 + csrf_check_origin: true, 892 + csrf_trusted_origins: [], 893 + embedded: false, 894 + env_public_prefix: "PUBLIC_", 895 + env_private_prefix: "", 896 + hash_routing: false, 897 + hooks: null, 898 + // added lazily, via `get_hooks` 899 + preload_strategy: "modulepreload", 900 + root, 901 + service_worker: false, 902 + service_worker_options: void 0, 903 + templates: { 904 + app: ({ head, body, assets, nonce, env }) => '<!doctype html>\n<html lang="en">\n <head>\n <meta charset="utf-8" />\n <link rel="icon" href="' + assets + '/favicon.png" />\n <meta\n name="viewport"\n content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"\n />\n ' + head + '\n <style>\n @property --grid-x {\n syntax: "<number>";\n inherits: false;\n initial-value: 0;\n }\n\n @property --grid-y {\n syntax: "<number>";\n inherits: false;\n initial-value: 0;\n }\n\n @property --drag-x {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --drag-y {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-x {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-y {\n syntax: "<length>";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --loose-rotation {\n syntax: "<angle>";\n inherits: false;\n initial-value: 0deg;\n }\n\n :root {\n font-size: 16px;\n overscroll-behavior: none;\n\n --color-money: rgb(214 168 15);\n --color-resource: rgb(199 73 52);\n --color-terrain: rgb(38 163 38);\n --color-card: rgb(164 85 217);\n --color-species: rgb(16 121 227);\n --color-pack: rgb(179 43 74);\n --color-input: rgb(66 90 245);\n --color-output: rgb(244 0 213);\n }\n\n body {\n min-height: 100vh;\n font-size: 1rem;\n font-weight: 400;\n }\n\n * {\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n box-sizing: border-box;\n }\n\n a:link,\n a:visited,\n a:active,\n a {\n text-decoration: none;\n color: black;\n }\n\n h1 {\n font-size: 2rem;\n font-weight: bold;\n }\n\n button {\n padding: 0.5rem 1rem;\n border: 1px solid rgb(0 0 0 / 0.25);\n border-radius: 0.25rem;\n background: rgb(0 0 0 / 0);\n cursor: pointer;\n font-size: 1rem;\n\n &:hover,\n &:focus-visible {\n background-color: rgb(0 0 0 / 0.05);\n }\n }\n </style>\n </head>\n <body data-sveltekit-preload-data="hover">\n <div style="display: contents">' + body + "</div>\n </body>\n</html>\n", 905 + error: ({ status, message }) => '<!doctype html>\n<html lang="en">\n <head>\n <meta charset="utf-8" />\n <title>' + message + `</title> 906 + 907 + <style> 908 + body { 909 + --bg: white; 910 + --fg: #222; 911 + --divider: #ccc; 912 + background: var(--bg); 913 + color: var(--fg); 914 + font-family: 915 + system-ui, 916 + -apple-system, 917 + BlinkMacSystemFont, 918 + 'Segoe UI', 919 + Roboto, 920 + Oxygen, 921 + Ubuntu, 922 + Cantarell, 923 + 'Open Sans', 924 + 'Helvetica Neue', 925 + sans-serif; 926 + display: flex; 927 + align-items: center; 928 + justify-content: center; 929 + height: 100vh; 930 + margin: 0; 931 + } 932 + 933 + .error { 934 + display: flex; 935 + align-items: center; 936 + max-width: 32rem; 937 + margin: 0 1rem; 938 + } 939 + 940 + .status { 941 + font-weight: 200; 942 + font-size: 3rem; 943 + line-height: 1; 944 + position: relative; 945 + top: -0.05rem; 946 + } 947 + 948 + .message { 949 + border-left: 1px solid var(--divider); 950 + padding: 0 0 0 1rem; 951 + margin: 0 0 0 1rem; 952 + min-height: 2.5rem; 953 + display: flex; 954 + align-items: center; 955 + } 956 + 957 + .message h1 { 958 + font-weight: 400; 959 + font-size: 1em; 960 + margin: 0; 961 + } 962 + 963 + @media (prefers-color-scheme: dark) { 964 + body { 965 + --bg: #222; 966 + --fg: #ddd; 967 + --divider: #666; 968 + } 969 + } 970 + </style> 971 + </head> 972 + <body> 973 + <div class="error"> 974 + <span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n" 975 + }, 976 + version_hash: "xcp44a" 977 + }; 978 + async function get_hooks() { 979 + let handle; 980 + let handleFetch; 981 + let handleError; 982 + let handleValidationError; 983 + let init; 984 + let reroute; 985 + let transport; 986 + return { 987 + handle, 988 + handleFetch, 989 + handleError, 990 + handleValidationError, 991 + init, 992 + reroute, 993 + transport 994 + }; 995 + } 996 + export { 997 + set_public_env as a, 998 + set_read_implementation as b, 999 + set_manifest as c, 1000 + get_hooks as g, 1001 + options as o, 1002 + public_env as p, 1003 + read_implementation as r, 1004 + set_private_env as s 1005 + };
+19
app/.svelte-kit/output/server/chunks/provideSocket.svelte.js
··· 1 + import "clsx"; 2 + import { s as setContext, g as getContext } from "./context.js"; 3 + const SOCKET = /* @__PURE__ */ Symbol("Socket"); 4 + function getSocket() { 5 + const context = getContext(SOCKET); 6 + return context.socket; 7 + } 8 + function provideSocket() { 9 + let socket; 10 + setContext(SOCKET, { 11 + get socket() { 12 + return socket; 13 + } 14 + }); 15 + } 16 + export { 17 + getSocket as g, 18 + provideSocket as p 19 + };
+522
app/.svelte-kit/output/server/chunks/shared.js
··· 1 + import * as devalue from "devalue"; 2 + import { t as text_decoder, b as base64_encode, c as base64_decode } from "./utils.js"; 3 + function set_nested_value(object, path_string, value) { 4 + if (path_string.startsWith("n:")) { 5 + path_string = path_string.slice(2); 6 + value = value === "" ? void 0 : parseFloat(value); 7 + } else if (path_string.startsWith("b:")) { 8 + path_string = path_string.slice(2); 9 + value = value === "on"; 10 + } 11 + deep_set(object, split_path(path_string), value); 12 + } 13 + function convert_formdata(data) { 14 + const result = {}; 15 + for (let key of data.keys()) { 16 + const is_array = key.endsWith("[]"); 17 + let values = data.getAll(key); 18 + if (is_array) key = key.slice(0, -2); 19 + if (values.length > 1 && !is_array) { 20 + throw new Error(`Form cannot contain duplicated keys — "${key}" has ${values.length} values`); 21 + } 22 + values = values.filter( 23 + (entry) => typeof entry === "string" || entry.name !== "" || entry.size > 0 24 + ); 25 + if (key.startsWith("n:")) { 26 + key = key.slice(2); 27 + values = values.map((v) => v === "" ? void 0 : parseFloat( 28 + /** @type {string} */ 29 + v 30 + )); 31 + } else if (key.startsWith("b:")) { 32 + key = key.slice(2); 33 + values = values.map((v) => v === "on"); 34 + } 35 + set_nested_value(result, key, is_array ? values : values[0]); 36 + } 37 + return result; 38 + } 39 + const BINARY_FORM_CONTENT_TYPE = "application/x-sveltekit-formdata"; 40 + const BINARY_FORM_VERSION = 0; 41 + async function deserialize_binary_form(request) { 42 + if (request.headers.get("content-type") !== BINARY_FORM_CONTENT_TYPE) { 43 + const form_data = await request.formData(); 44 + return { data: convert_formdata(form_data), meta: {}, form_data }; 45 + } 46 + if (!request.body) { 47 + throw new Error("Could not deserialize binary form: no body"); 48 + } 49 + const reader = request.body.getReader(); 50 + const chunks = []; 51 + async function get_chunk(index) { 52 + if (index in chunks) return chunks[index]; 53 + let i = chunks.length; 54 + while (i <= index) { 55 + chunks[i] = reader.read().then((chunk) => chunk.value); 56 + i++; 57 + } 58 + return chunks[index]; 59 + } 60 + async function get_buffer(offset, length) { 61 + let start_chunk; 62 + let chunk_start = 0; 63 + let chunk_index; 64 + for (chunk_index = 0; ; chunk_index++) { 65 + const chunk = await get_chunk(chunk_index); 66 + if (!chunk) return null; 67 + const chunk_end = chunk_start + chunk.byteLength; 68 + if (offset >= chunk_start && offset < chunk_end) { 69 + start_chunk = chunk; 70 + break; 71 + } 72 + chunk_start = chunk_end; 73 + } 74 + if (offset + length <= chunk_start + start_chunk.byteLength) { 75 + return start_chunk.subarray(offset - chunk_start, offset + length - chunk_start); 76 + } 77 + const buffer = new Uint8Array(length); 78 + buffer.set(start_chunk.subarray(offset - chunk_start)); 79 + let cursor = start_chunk.byteLength - offset + chunk_start; 80 + while (cursor < length) { 81 + chunk_index++; 82 + let chunk = await get_chunk(chunk_index); 83 + if (!chunk) return null; 84 + if (chunk.byteLength > length - cursor) { 85 + chunk = chunk.subarray(0, length - cursor); 86 + } 87 + buffer.set(chunk, cursor); 88 + cursor += chunk.byteLength; 89 + } 90 + return buffer; 91 + } 92 + const header = await get_buffer(0, 1 + 4 + 2); 93 + if (!header) throw new Error("Could not deserialize binary form: too short"); 94 + if (header[0] !== BINARY_FORM_VERSION) { 95 + throw new Error( 96 + `Could not deserialize binary form: got version ${header[0]}, expected version ${BINARY_FORM_VERSION}` 97 + ); 98 + } 99 + const header_view = new DataView(header.buffer, header.byteOffset, header.byteLength); 100 + const data_length = header_view.getUint32(1, true); 101 + const file_offsets_length = header_view.getUint16(5, true); 102 + const data_buffer = await get_buffer(1 + 4 + 2, data_length); 103 + if (!data_buffer) throw new Error("Could not deserialize binary form: data too short"); 104 + let file_offsets; 105 + let files_start_offset; 106 + if (file_offsets_length > 0) { 107 + const file_offsets_buffer = await get_buffer(1 + 4 + 2 + data_length, file_offsets_length); 108 + if (!file_offsets_buffer) 109 + throw new Error("Could not deserialize binary form: file offset table too short"); 110 + file_offsets = /** @type {Array<number>} */ 111 + JSON.parse(text_decoder.decode(file_offsets_buffer)); 112 + files_start_offset = 1 + 4 + 2 + data_length + file_offsets_length; 113 + } 114 + const [data, meta] = devalue.parse(text_decoder.decode(data_buffer), { 115 + File: ([name, type, size, last_modified, index]) => { 116 + return new Proxy( 117 + new LazyFile( 118 + name, 119 + type, 120 + size, 121 + last_modified, 122 + get_chunk, 123 + files_start_offset + file_offsets[index] 124 + ), 125 + { 126 + getPrototypeOf() { 127 + return File.prototype; 128 + } 129 + } 130 + ); 131 + } 132 + }); 133 + void (async () => { 134 + let has_more = true; 135 + while (has_more) { 136 + const chunk = await get_chunk(chunks.length); 137 + has_more = !!chunk; 138 + } 139 + })(); 140 + return { data, meta, form_data: null }; 141 + } 142 + class LazyFile { 143 + /** @type {(index: number) => Promise<Uint8Array<ArrayBuffer> | undefined>} */ 144 + #get_chunk; 145 + /** @type {number} */ 146 + #offset; 147 + /** 148 + * @param {string} name 149 + * @param {string} type 150 + * @param {number} size 151 + * @param {number} last_modified 152 + * @param {(index: number) => Promise<Uint8Array<ArrayBuffer> | undefined>} get_chunk 153 + * @param {number} offset 154 + */ 155 + constructor(name, type, size, last_modified, get_chunk, offset) { 156 + this.name = name; 157 + this.type = type; 158 + this.size = size; 159 + this.lastModified = last_modified; 160 + this.webkitRelativePath = ""; 161 + this.#get_chunk = get_chunk; 162 + this.#offset = offset; 163 + this.arrayBuffer = this.arrayBuffer.bind(this); 164 + this.bytes = this.bytes.bind(this); 165 + this.slice = this.slice.bind(this); 166 + this.stream = this.stream.bind(this); 167 + this.text = this.text.bind(this); 168 + } 169 + /** @type {ArrayBuffer | undefined} */ 170 + #buffer; 171 + async arrayBuffer() { 172 + this.#buffer ??= await new Response(this.stream()).arrayBuffer(); 173 + return this.#buffer; 174 + } 175 + async bytes() { 176 + return new Uint8Array(await this.arrayBuffer()); 177 + } 178 + /** 179 + * @param {number=} start 180 + * @param {number=} end 181 + * @param {string=} contentType 182 + */ 183 + slice(start = 0, end = this.size, contentType = this.type) { 184 + if (start < 0) { 185 + start = Math.max(this.size + start, 0); 186 + } else { 187 + start = Math.min(start, this.size); 188 + } 189 + if (end < 0) { 190 + end = Math.max(this.size + end, 0); 191 + } else { 192 + end = Math.min(end, this.size); 193 + } 194 + const size = Math.max(end - start, 0); 195 + const file = new LazyFile( 196 + this.name, 197 + contentType, 198 + size, 199 + this.lastModified, 200 + this.#get_chunk, 201 + this.#offset + start 202 + ); 203 + return file; 204 + } 205 + stream() { 206 + let cursor = 0; 207 + let chunk_index = 0; 208 + return new ReadableStream({ 209 + start: async (controller) => { 210 + let chunk_start = 0; 211 + let start_chunk = null; 212 + for (chunk_index = 0; ; chunk_index++) { 213 + const chunk = await this.#get_chunk(chunk_index); 214 + if (!chunk) return null; 215 + const chunk_end = chunk_start + chunk.byteLength; 216 + if (this.#offset >= chunk_start && this.#offset < chunk_end) { 217 + start_chunk = chunk; 218 + break; 219 + } 220 + chunk_start = chunk_end; 221 + } 222 + if (this.#offset + this.size <= chunk_start + start_chunk.byteLength) { 223 + controller.enqueue( 224 + start_chunk.subarray(this.#offset - chunk_start, this.#offset + this.size - chunk_start) 225 + ); 226 + controller.close(); 227 + } else { 228 + controller.enqueue(start_chunk.subarray(this.#offset - chunk_start)); 229 + cursor = start_chunk.byteLength - this.#offset + chunk_start; 230 + } 231 + }, 232 + pull: async (controller) => { 233 + chunk_index++; 234 + let chunk = await this.#get_chunk(chunk_index); 235 + if (!chunk) { 236 + controller.error("Could not deserialize binary form: incomplete file data"); 237 + controller.close(); 238 + return; 239 + } 240 + if (chunk.byteLength > this.size - cursor) { 241 + chunk = chunk.subarray(0, this.size - cursor); 242 + } 243 + controller.enqueue(chunk); 244 + cursor += chunk.byteLength; 245 + if (cursor >= this.size) { 246 + controller.close(); 247 + } 248 + } 249 + }); 250 + } 251 + async text() { 252 + return text_decoder.decode(await this.arrayBuffer()); 253 + } 254 + } 255 + const path_regex = /^[a-zA-Z_$]\w*(\.[a-zA-Z_$]\w*|\[\d+\])*$/; 256 + function split_path(path) { 257 + if (!path_regex.test(path)) { 258 + throw new Error(`Invalid path ${path}`); 259 + } 260 + return path.split(/\.|\[|\]/).filter(Boolean); 261 + } 262 + function check_prototype_pollution(key) { 263 + if (key === "__proto__" || key === "constructor" || key === "prototype") { 264 + throw new Error( 265 + `Invalid key "${key}"` 266 + ); 267 + } 268 + } 269 + function deep_set(object, keys, value) { 270 + let current = object; 271 + for (let i = 0; i < keys.length - 1; i += 1) { 272 + const key = keys[i]; 273 + check_prototype_pollution(key); 274 + const is_array = /^\d+$/.test(keys[i + 1]); 275 + const exists = key in current; 276 + const inner = current[key]; 277 + if (exists && is_array !== Array.isArray(inner)) { 278 + throw new Error(`Invalid array key ${keys[i + 1]}`); 279 + } 280 + if (!exists) { 281 + current[key] = is_array ? [] : {}; 282 + } 283 + current = current[key]; 284 + } 285 + const final_key = keys[keys.length - 1]; 286 + check_prototype_pollution(final_key); 287 + current[final_key] = value; 288 + } 289 + function normalize_issue(issue, server = false) { 290 + const normalized = { name: "", path: [], message: issue.message, server }; 291 + if (issue.path !== void 0) { 292 + let name = ""; 293 + for (const segment of issue.path) { 294 + const key = ( 295 + /** @type {string | number} */ 296 + typeof segment === "object" ? segment.key : segment 297 + ); 298 + normalized.path.push(key); 299 + if (typeof key === "number") { 300 + name += `[${key}]`; 301 + } else if (typeof key === "string") { 302 + name += name === "" ? key : "." + key; 303 + } 304 + } 305 + normalized.name = name; 306 + } 307 + return normalized; 308 + } 309 + function flatten_issues(issues) { 310 + const result = {}; 311 + for (const issue of issues) { 312 + (result.$ ??= []).push(issue); 313 + let name = ""; 314 + if (issue.path !== void 0) { 315 + for (const key of issue.path) { 316 + if (typeof key === "number") { 317 + name += `[${key}]`; 318 + } else if (typeof key === "string") { 319 + name += name === "" ? key : "." + key; 320 + } 321 + (result[name] ??= []).push(issue); 322 + } 323 + } 324 + } 325 + return result; 326 + } 327 + function deep_get(object, path) { 328 + let current = object; 329 + for (const key of path) { 330 + if (current == null || typeof current !== "object") { 331 + return current; 332 + } 333 + current = current[key]; 334 + } 335 + return current; 336 + } 337 + function create_field_proxy(target, get_input, set_input, get_issues, path = []) { 338 + const get_value = () => { 339 + return deep_get(get_input(), path); 340 + }; 341 + return new Proxy(target, { 342 + get(target2, prop) { 343 + if (typeof prop === "symbol") return target2[prop]; 344 + if (/^\d+$/.test(prop)) { 345 + return create_field_proxy({}, get_input, set_input, get_issues, [ 346 + ...path, 347 + parseInt(prop, 10) 348 + ]); 349 + } 350 + const key = build_path_string(path); 351 + if (prop === "set") { 352 + const set_func = function(newValue) { 353 + set_input(path, newValue); 354 + return newValue; 355 + }; 356 + return create_field_proxy(set_func, get_input, set_input, get_issues, [...path, prop]); 357 + } 358 + if (prop === "value") { 359 + return create_field_proxy(get_value, get_input, set_input, get_issues, [...path, prop]); 360 + } 361 + if (prop === "issues" || prop === "allIssues") { 362 + const issues_func = () => { 363 + const all_issues = get_issues()[key === "" ? "$" : key]; 364 + if (prop === "allIssues") { 365 + return all_issues?.map((issue) => ({ 366 + path: issue.path, 367 + message: issue.message 368 + })); 369 + } 370 + return all_issues?.filter((issue) => issue.name === key)?.map((issue) => ({ 371 + path: issue.path, 372 + message: issue.message 373 + })); 374 + }; 375 + return create_field_proxy(issues_func, get_input, set_input, get_issues, [...path, prop]); 376 + } 377 + if (prop === "as") { 378 + const as_func = (type, input_value) => { 379 + const is_array = type === "file multiple" || type === "select multiple" || type === "checkbox" && typeof input_value === "string"; 380 + const prefix = type === "number" || type === "range" ? "n:" : type === "checkbox" && !is_array ? "b:" : ""; 381 + const base_props = { 382 + name: prefix + key + (is_array ? "[]" : ""), 383 + get "aria-invalid"() { 384 + const issues = get_issues(); 385 + return key in issues ? "true" : void 0; 386 + } 387 + }; 388 + if (type !== "text" && type !== "select" && type !== "select multiple") { 389 + base_props.type = type === "file multiple" ? "file" : type; 390 + } 391 + if (type === "submit" || type === "hidden") { 392 + return Object.defineProperties(base_props, { 393 + value: { value: input_value, enumerable: true } 394 + }); 395 + } 396 + if (type === "select" || type === "select multiple") { 397 + return Object.defineProperties(base_props, { 398 + multiple: { value: is_array, enumerable: true }, 399 + value: { 400 + enumerable: true, 401 + get() { 402 + return get_value(); 403 + } 404 + } 405 + }); 406 + } 407 + if (type === "checkbox" || type === "radio") { 408 + return Object.defineProperties(base_props, { 409 + value: { value: input_value ?? "on", enumerable: true }, 410 + checked: { 411 + enumerable: true, 412 + get() { 413 + const value = get_value(); 414 + if (type === "radio") { 415 + return value === input_value; 416 + } 417 + if (is_array) { 418 + return (value ?? []).includes(input_value); 419 + } 420 + return value; 421 + } 422 + } 423 + }); 424 + } 425 + if (type === "file" || type === "file multiple") { 426 + return Object.defineProperties(base_props, { 427 + multiple: { value: is_array, enumerable: true }, 428 + files: { 429 + enumerable: true, 430 + get() { 431 + const value = get_value(); 432 + if (value instanceof File) { 433 + if (typeof DataTransfer !== "undefined") { 434 + const fileList = new DataTransfer(); 435 + fileList.items.add(value); 436 + return fileList.files; 437 + } 438 + return { 0: value, length: 1 }; 439 + } 440 + if (Array.isArray(value) && value.every((f) => f instanceof File)) { 441 + if (typeof DataTransfer !== "undefined") { 442 + const fileList = new DataTransfer(); 443 + value.forEach((file) => fileList.items.add(file)); 444 + return fileList.files; 445 + } 446 + const fileListLike = { length: value.length }; 447 + value.forEach((file, index) => { 448 + fileListLike[index] = file; 449 + }); 450 + return fileListLike; 451 + } 452 + return null; 453 + } 454 + } 455 + }); 456 + } 457 + return Object.defineProperties(base_props, { 458 + value: { 459 + enumerable: true, 460 + get() { 461 + const value = get_value(); 462 + return value != null ? String(value) : ""; 463 + } 464 + } 465 + }); 466 + }; 467 + return create_field_proxy(as_func, get_input, set_input, get_issues, [...path, "as"]); 468 + } 469 + return create_field_proxy({}, get_input, set_input, get_issues, [...path, prop]); 470 + } 471 + }); 472 + } 473 + function build_path_string(path) { 474 + let result = ""; 475 + for (const segment of path) { 476 + if (typeof segment === "number") { 477 + result += `[${segment}]`; 478 + } else { 479 + result += result === "" ? segment : "." + segment; 480 + } 481 + } 482 + return result; 483 + } 484 + const INVALIDATED_PARAM = "x-sveltekit-invalidated"; 485 + const TRAILING_SLASH_PARAM = "x-sveltekit-trailing-slash"; 486 + function stringify(data, transport) { 487 + const encoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.encode])); 488 + return devalue.stringify(data, encoders); 489 + } 490 + function stringify_remote_arg(value, transport) { 491 + if (value === void 0) return ""; 492 + const json_string = stringify(value, transport); 493 + const bytes = new TextEncoder().encode(json_string); 494 + return base64_encode(bytes).replaceAll("=", "").replaceAll("+", "-").replaceAll("/", "_"); 495 + } 496 + function parse_remote_arg(string, transport) { 497 + if (!string) return void 0; 498 + const json_string = text_decoder.decode( 499 + // no need to add back `=` characters, atob can handle it 500 + base64_decode(string.replaceAll("-", "+").replaceAll("_", "/")) 501 + ); 502 + const decoders = Object.fromEntries(Object.entries(transport).map(([k, v]) => [k, v.decode])); 503 + return devalue.parse(json_string, decoders); 504 + } 505 + function create_remote_key(id, payload) { 506 + return id + "/" + payload; 507 + } 508 + export { 509 + BINARY_FORM_CONTENT_TYPE as B, 510 + INVALIDATED_PARAM as I, 511 + TRAILING_SLASH_PARAM as T, 512 + stringify_remote_arg as a, 513 + create_field_proxy as b, 514 + create_remote_key as c, 515 + deserialize_binary_form as d, 516 + set_nested_value as e, 517 + flatten_issues as f, 518 + deep_set as g, 519 + normalize_issue as n, 520 + parse_remote_arg as p, 521 + stringify as s 522 + };
+16
app/.svelte-kit/output/server/chunks/state.svelte.js
··· 1 + import "clsx"; 2 + import { n as noop } from "./escaping.js"; 3 + import "@sveltejs/kit/internal/server"; 4 + const is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString()); 5 + if (is_legacy) { 6 + ({ 7 + data: {}, 8 + form: null, 9 + error: null, 10 + params: {}, 11 + route: { id: null }, 12 + state: {}, 13 + status: -1, 14 + url: new URL("https://example.com") 15 + }); 16 + }
+43
app/.svelte-kit/output/server/chunks/utils.js
··· 1 + const text_encoder = new TextEncoder(); 2 + const text_decoder = new TextDecoder(); 3 + function get_relative_path(from, to) { 4 + const from_parts = from.split(/[/\\]/); 5 + const to_parts = to.split(/[/\\]/); 6 + from_parts.pop(); 7 + while (from_parts[0] === to_parts[0]) { 8 + from_parts.shift(); 9 + to_parts.shift(); 10 + } 11 + let i = from_parts.length; 12 + while (i--) from_parts[i] = ".."; 13 + return from_parts.concat(to_parts).join("/"); 14 + } 15 + function base64_encode(bytes) { 16 + if (globalThis.Buffer) { 17 + return globalThis.Buffer.from(bytes).toString("base64"); 18 + } 19 + let binary = ""; 20 + for (let i = 0; i < bytes.length; i++) { 21 + binary += String.fromCharCode(bytes[i]); 22 + } 23 + return btoa(binary); 24 + } 25 + function base64_decode(encoded) { 26 + if (globalThis.Buffer) { 27 + const buffer = globalThis.Buffer.from(encoded, "base64"); 28 + return new Uint8Array(buffer); 29 + } 30 + const binary = atob(encoded); 31 + const bytes = new Uint8Array(binary.length); 32 + for (let i = 0; i < binary.length; i++) { 33 + bytes[i] = binary.charCodeAt(i); 34 + } 35 + return bytes; 36 + } 37 + export { 38 + text_encoder as a, 39 + base64_encode as b, 40 + base64_decode as c, 41 + get_relative_path as g, 42 + text_decoder as t 43 + };
+28
app/.svelte-kit/output/server/entries/fallbacks/error.svelte.js
··· 1 + import { e as escape_html } from "../../chunks/escaping.js"; 2 + import "clsx"; 3 + import "../../chunks/state.svelte.js"; 4 + import { s as stores } from "../../chunks/client.js"; 5 + import { g as getContext } from "../../chunks/context.js"; 6 + ({ 7 + check: stores.updated.check 8 + }); 9 + function context() { 10 + return getContext("__request__"); 11 + } 12 + const page$1 = { 13 + get error() { 14 + return context().page.error; 15 + }, 16 + get status() { 17 + return context().page.status; 18 + } 19 + }; 20 + const page = page$1; 21 + function Error$1($$renderer, $$props) { 22 + $$renderer.component(($$renderer2) => { 23 + $$renderer2.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`); 24 + }); 25 + } 26 + export { 27 + Error$1 as default 28 + };
+6
app/.svelte-kit/output/server/entries/matchers/FieldId.js
··· 1 + function match(param) { 2 + return !Number.isNaN(Number.parseInt(param)); 3 + } 4 + export { 5 + match 6 + };
+13
app/.svelte-kit/output/server/entries/pages/(socket)/_layout.svelte.js
··· 1 + import "clsx"; 2 + import { p as provideSocket } from "../../../chunks/provideSocket.svelte.js"; 3 + function _layout($$renderer, $$props) { 4 + $$renderer.component(($$renderer2) => { 5 + provideSocket(); 6 + const { children } = $$props; 7 + children($$renderer2); 8 + $$renderer2.push(`<!---->`); 9 + }); 10 + } 11 + export { 12 + _layout as default 13 + };
+84
app/.svelte-kit/output/server/entries/pages/(socket)/field/_fieldId_FieldId_/_page.svelte.js
··· 1 + import { U as store_get, V as unsubscribe_stores } from "../../../../../chunks/index2.js"; 2 + import { g as getContext, s as setContext } from "../../../../../chunks/context.js"; 3 + import "clsx"; 4 + import "@sveltejs/kit/internal"; 5 + import "../../../../../chunks/exports.js"; 6 + import "../../../../../chunks/utils.js"; 7 + import "@sveltejs/kit/internal/server"; 8 + import "../../../../../chunks/state.svelte.js"; 9 + import { D as DragWindow } from "../../../../../chunks/DragWindow.js"; 10 + import { g as getSocket } from "../../../../../chunks/provideSocket.svelte.js"; 11 + import { S as SvelteMap } from "../../../../../chunks/index-server.js"; 12 + const getStores = () => { 13 + const stores$1 = getContext("__svelte__"); 14 + return { 15 + /** @type {typeof page} */ 16 + page: { 17 + subscribe: stores$1.page.subscribe 18 + }, 19 + /** @type {typeof navigating} */ 20 + navigating: { 21 + subscribe: stores$1.navigating.subscribe 22 + }, 23 + /** @type {typeof updated} */ 24 + updated: stores$1.updated 25 + }; 26 + }; 27 + const page = { 28 + subscribe(fn) { 29 + const store = getStores().page; 30 + return store.subscribe(fn); 31 + } 32 + }; 33 + function parseFieldId(string) { 34 + return Number.parseInt(string); 35 + } 36 + const FIELD_STATE = /* @__PURE__ */ Symbol("Field State"); 37 + function getFieldState() { 38 + const state = getContext(FIELD_STATE); 39 + return { ...state }; 40 + } 41 + function provideFieldState(fieldId, initial) { 42 + const socket = getSocket(); 43 + let field = initial; 44 + let fieldCards = new SvelteMap(); 45 + socket.$on("auth", () => { 46 + const fieldSubscription = socket.subscribe("fields"); 47 + const fieldCardsSubscription = socket.subscribe({ topic: "field_cards", field_id: fieldId }); 48 + socket.getField(fieldId).$then(({ data }) => { 49 + field = data.field; 50 + fieldCards = new SvelteMap(data.field_cards.map((card) => [card.card_id, card])); 51 + }); 52 + fieldCardsSubscription.$on("next", ({ message }) => { 53 + fieldCards.set(message.data.field_card.card_id, message.data.field_card); 54 + }); 55 + fieldSubscription.$on("next", ({ message }) => { 56 + field = message.data.field; 57 + }); 58 + return () => { 59 + fieldSubscription.unsubscribe(); 60 + fieldCardsSubscription.unsubscribe(); 61 + }; 62 + }); 63 + setContext(FIELD_STATE, { 64 + get field() { 65 + return field; 66 + }, 67 + get fieldCards() { 68 + return fieldCards; 69 + } 70 + }); 71 + } 72 + function _page($$renderer, $$props) { 73 + $$renderer.component(($$renderer2) => { 74 + var $$store_subs; 75 + const { fieldId } = store_get($$store_subs ??= {}, "$page", page).params; 76 + provideFieldState(parseFieldId(fieldId)); 77 + getFieldState(); 78 + DragWindow($$renderer2, {}); 79 + if ($$store_subs) unsubscribe_stores($$store_subs); 80 + }); 81 + } 82 + export { 83 + _page as default 84 + };
+77
app/.svelte-kit/output/server/entries/pages/(socket)/overworld/_page.svelte.js
··· 1 + import { W as ensure_array_like } from "../../../../chunks/index2.js"; 2 + import { g as goto } from "../../../../chunks/client.js"; 3 + import { G as GridLines, D as DragTile } from "../../../../chunks/GridLines.js"; 4 + import { D as DragWindow } from "../../../../chunks/DragWindow.js"; 5 + import "clsx"; 6 + import { s as setContext, g as getContext } from "../../../../chunks/context.js"; 7 + import { g as getSocket } from "../../../../chunks/provideSocket.svelte.js"; 8 + import { S as SvelteMap } from "../../../../chunks/index-server.js"; 9 + import { e as escape_html } from "../../../../chunks/escaping.js"; 10 + const OVERWORLD = /* @__PURE__ */ Symbol("Overworld"); 11 + function getOverworld() { 12 + const overworld = getContext(OVERWORLD); 13 + return { ...overworld }; 14 + } 15 + function provideOverworld() { 16 + const socket = getSocket(); 17 + let fields = new SvelteMap(); 18 + socket.$on("auth", () => { 19 + const subscription = socket.subscribe("fields"); 20 + socket.getFields().$then(({ data }) => { 21 + fields = new SvelteMap(data.fields.map((field) => [field.id, field])); 22 + }); 23 + subscription.$on("next", ({ message }) => { 24 + fields.set(message.data.field.id, message.data.field); 25 + }); 26 + return () => { 27 + subscription.unsubscribe(); 28 + }; 29 + }); 30 + setContext(OVERWORLD, { 31 + get fields() { 32 + return fields; 33 + } 34 + }); 35 + } 36 + function _page($$renderer, $$props) { 37 + $$renderer.component(($$renderer2) => { 38 + provideOverworld(); 39 + const { fields } = getOverworld(); 40 + async function viewField(field) { 41 + await goto(`/field/${field.id}`); 42 + } 43 + $$renderer2.push(`<main class="void svelte-urwvt6" role="application">`); 44 + DragWindow($$renderer2, { 45 + children: ($$renderer3) => { 46 + GridLines($$renderer3, {}); 47 + $$renderer3.push(`<!----> <!--[-->`); 48 + const each_array = ensure_array_like(fields.values()); 49 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 50 + let field = each_array[$$index]; 51 + DragTile($$renderer3, { 52 + x: field.grid_x, 53 + y: field.grid_y, 54 + onClick: () => viewField(field), 55 + children: ($$renderer4) => { 56 + $$renderer4.push(`<div class="field-label svelte-urwvt6">`); 57 + if (field.name) { 58 + $$renderer4.push("<!--[-->"); 59 + $$renderer4.push(`${escape_html(field.name)}`); 60 + } else { 61 + $$renderer4.push("<!--[!-->"); 62 + $$renderer4.push(`Field ${escape_html(field.id)}`); 63 + } 64 + $$renderer4.push(`<!--]--></div>`); 65 + } 66 + }); 67 + } 68 + $$renderer3.push(`<!--]-->`); 69 + }, 70 + $$slots: { default: true } 71 + }); 72 + $$renderer2.push(`<!----></main>`); 73 + }); 74 + } 75 + export { 76 + _page as default 77 + };
+10
app/.svelte-kit/output/server/entries/pages/_layout.svelte.js
··· 1 + import "clsx"; 2 + import "core-js/actual/iterator/index.js"; 3 + function _layout($$renderer, $$props) { 4 + const { children } = $$props; 5 + children($$renderer); 6 + $$renderer.push(`<!---->`); 7 + } 8 + export { 9 + _layout as default 10 + };
+6
app/.svelte-kit/output/server/entries/pages/_layout.ts.js
··· 1 + const ssr = false; 2 + const prerender = true; 3 + export { 4 + prerender, 5 + ssr 6 + };
+7
app/.svelte-kit/output/server/entries/pages/_page.svelte.js
··· 1 + import "clsx"; 2 + function _page($$renderer) { 3 + $$renderer.push(`<main class="svelte-1uha8ag"><h1 class="svelte-1uha8ag">This game?</h1> <a href="/cards">See the cards</a> <a href="/play">Just play</a></main>`); 4 + } 5 + export { 6 + _page as default 7 + };
+13
app/.svelte-kit/output/server/entries/pages/cards/_page.svelte.js
··· 1 + import "clsx"; 2 + import { c as cards, C as CardGrid } from "../../../chunks/CardGrid.js"; 3 + function _page($$renderer, $$props) { 4 + $$renderer.component(($$renderer2) => { 5 + const cardsOrdered = Object.values(cards).sort((a, b) => a.type < b.type ? -1 : 1); 6 + $$renderer2.push(`<div class="layout svelte-qmtet4"><div class="controls svelte-qmtet4"><a href="/" class="back-button svelte-qmtet4">← Back</a> <div class="fields svelte-qmtet4"><input type="search" placeholder="Search..." class="svelte-qmtet4"/></div></div> <div class="gridarea svelte-qmtet4">`); 7 + CardGrid($$renderer2, { cards: cardsOrdered }); 8 + $$renderer2.push(`<!----></div></div>`); 9 + }); 10 + } 11 + export { 12 + _page as default 13 + };
+1431
app/.svelte-kit/output/server/entries/pages/play/_page.svelte.js
··· 1 + import "clsx"; 2 + import { s as setContext, g as getContext } from "../../../chunks/context.js"; 3 + import { c as cards, s as species, r as resources, R as ResourceRef, a as Card, C as CardGrid, S as Shimmer, G as Grid, b as SpeciesRef, T as TerrainRef } from "../../../chunks/CardGrid.js"; 4 + import { W as ensure_array_like, X as bind_props, Y as attr_class, Z as attr_style, _ as attr, $ as stringify, a0 as clsx } from "../../../chunks/index2.js"; 5 + import { e as escape_html } from "../../../chunks/escaping.js"; 6 + import { D as DragTile, G as GridLines } from "../../../chunks/GridLines.js"; 7 + import { D as DragWindow } from "../../../chunks/DragWindow.js"; 8 + function apply(...args) { 9 + return (handler) => () => handler(...args); 10 + } 11 + const APP_STATE = /* @__PURE__ */ Symbol("APP_STATE"); 12 + function getAppState() { 13 + return getContext(APP_STATE); 14 + } 15 + function AppStateProvider($$renderer, $$props) { 16 + $$renderer.component(($$renderer2) => { 17 + const { children } = $$props; 18 + let mode = "place"; 19 + setContext(APP_STATE, { 20 + get mode() { 21 + return mode; 22 + }, 23 + set mode(newMode) { 24 + mode = newMode; 25 + } 26 + }); 27 + children($$renderer2); 28 + $$renderer2.push(`<!---->`); 29 + }); 30 + } 31 + class CardsReceivedEvent extends Event { 32 + cards; 33 + constructor(cards2) { 34 + super("cardsreceived"); 35 + this.cards = cards2; 36 + } 37 + } 38 + function sourceIsProducing({ card, field }, geography) { 39 + return card.source.some((source) => { 40 + switch (source.type) { 41 + case "terrain": 42 + if (geography.terrain[field.y]?.[field.x]?.type === source.terrain) { 43 + return true; 44 + } 45 + break; 46 + case "any": 47 + return true; 48 + } 49 + }); 50 + } 51 + function canProduce(card) { 52 + return card.category === "source" || card.category === "production"; 53 + } 54 + function generateCardId() { 55 + return window.crypto.randomUUID(); 56 + } 57 + const GAME_STATE = /* @__PURE__ */ Symbol("GAME_STATE"); 58 + function getGameState() { 59 + return getContext(GAME_STATE); 60 + } 61 + function GameStateProvider($$renderer, $$props) { 62 + $$renderer.component(($$renderer2) => { 63 + const { children } = $$props; 64 + const geography = { 65 + biome: "Coast", 66 + origin: { x: 0, y: 0 }, 67 + terrain: [ 68 + [ 69 + { type: "grass" }, 70 + { type: "grass" }, 71 + { type: "grass" }, 72 + { type: "grass" }, 73 + { type: "grass" }, 74 + { type: "grass" }, 75 + { type: "grass" }, 76 + { type: "grass" } 77 + ], 78 + [ 79 + { type: "grass" }, 80 + { type: "grass" }, 81 + { type: "grass" }, 82 + { type: "soil" }, 83 + { type: "soil" }, 84 + { type: "grass" }, 85 + { type: "grass" }, 86 + { type: "grass" } 87 + ], 88 + [ 89 + { type: "grass" }, 90 + { type: "grass" }, 91 + { type: "soil" }, 92 + { type: "soil" }, 93 + { type: "soil" }, 94 + { type: "grass" }, 95 + { type: "grass" }, 96 + { type: "grass" } 97 + ], 98 + [ 99 + { type: "grass" }, 100 + { type: "grass" }, 101 + { type: "soil" }, 102 + { type: "soil" }, 103 + { type: "grass" }, 104 + { type: "grass" }, 105 + { type: "grass" }, 106 + { type: "grass" } 107 + ], 108 + [ 109 + { type: "grass" }, 110 + { type: "grass" }, 111 + { type: "grass" }, 112 + { type: "grass" }, 113 + { type: "grass" }, 114 + { type: "grass" }, 115 + { type: "grass" }, 116 + { type: "grass" } 117 + ], 118 + [ 119 + { type: "grass" }, 120 + { type: "grass" }, 121 + { type: "grass" }, 122 + { type: "grass" }, 123 + { type: "grass" }, 124 + { type: "grass" }, 125 + { type: "grass" }, 126 + { type: "grass" } 127 + ], 128 + [ 129 + { type: "grass" }, 130 + { type: "grass" }, 131 + { type: "grass" }, 132 + { type: "grass" }, 133 + { type: "grass" }, 134 + { type: "grass" }, 135 + { type: "grass" }, 136 + { type: "grass" } 137 + ], 138 + [ 139 + { type: "grass" }, 140 + { type: "grass" }, 141 + { type: "grass" }, 142 + { type: "grass" }, 143 + { type: "grass" }, 144 + { type: "grass" }, 145 + { type: "grass" }, 146 + { type: "grass" } 147 + ] 148 + ] 149 + }; 150 + let deck = []; 151 + let field = []; 152 + let citizens = []; 153 + let employment = []; 154 + let shop = { packs: [] }; 155 + let flow = []; 156 + let money = 0; 157 + setContext(GAME_STATE, { 158 + get geography() { 159 + return geography; 160 + }, 161 + get deck() { 162 + return deck; 163 + }, 164 + get field() { 165 + return field; 166 + }, 167 + get shop() { 168 + return shop; 169 + }, 170 + get flow() { 171 + return flow; 172 + }, 173 + get citizens() { 174 + return citizens; 175 + }, 176 + get employment() { 177 + return employment; 178 + }, 179 + get money() { 180 + return money; 181 + }, 182 + set money(qty) { 183 + money = qty; 184 + } 185 + }); 186 + children($$renderer2); 187 + $$renderer2.push(`<!---->`); 188 + }); 189 + } 190 + function indexById$1(field) { 191 + return new Map(field.map((card) => [card.id, card])); 192 + } 193 + function indexById(field) { 194 + return new Map(field.map((card) => [card.id, card])); 195 + } 196 + function indexByPosition(field) { 197 + const index = []; 198 + for (const card of field) { 199 + index[card.y] ??= []; 200 + index[card.y][card.x] = card; 201 + } 202 + return { 203 + get(x, y) { 204 + return index[y]?.[x]; 205 + } 206 + }; 207 + } 208 + function indexByDestination(flows) { 209 + return Map.groupBy(flows, (flow) => flow.destination); 210 + } 211 + function add(a, b) { 212 + return a + b; 213 + } 214 + const RESOURCE_STATE = /* @__PURE__ */ Symbol("RESOURCE_STATE"); 215 + function getResourceState() { 216 + return getContext(RESOURCE_STATE); 217 + } 218 + function ResourceStateProvider($$renderer, $$props) { 219 + $$renderer.component(($$renderer2) => { 220 + const { children } = $$props; 221 + const gameState = getGameState(); 222 + const { deck, field, flow, geography } = gameState; 223 + const deckById = indexById$1(deck); 224 + const fieldById = indexById(field); 225 + indexByPosition(field); 226 + const flowGraph = indexByDestination(flow); 227 + const cardsOnField = field.filter((fc) => !fc.loose); 228 + const population = cardsOnField.map((field2) => deckById.get(field2.id)).map((deck2) => cards[deck2.type]).filter((card) => card.category === "residential").flatMap((card) => card.population).reduce( 229 + (population2, residence) => { 230 + population2[residence.species] ??= { quantity: 0 }; 231 + population2[residence.species].quantity += residence.quantity; 232 + return population2; 233 + }, 234 + {} 235 + ); 236 + const cardProduction = (() => { 237 + const cardProduction2 = {}; 238 + const remaining = new Map(Array.from(flowGraph.entries()).filter(([, inputs]) => inputs.length).map(([id, inputs]) => [id, [...inputs]])); 239 + const producing = cardsOnField.filter((field2) => canProduce(cards[deckById.get(field2.id).type])).filter((field2) => !flowGraph.get(field2.id)?.length).map((field2) => field2.id); 240 + nextCard: while (producing.length) { 241 + const currentId = producing.shift(); 242 + const currentField = fieldById.get(currentId); 243 + const currentDeck = deckById.get(currentId); 244 + const currentCard = cards[currentDeck.type]; 245 + for (const [id, flows] of remaining.entries()) { 246 + const left = flows.filter((flow2) => flow2.source === currentId); 247 + if (left.length) { 248 + remaining.set(id, left); 249 + } else { 250 + remaining.delete(id); 251 + producing.push(id); 252 + } 253 + } 254 + const inputs = []; 255 + switch (currentCard.category) { 256 + case "production": { 257 + const sources = flowGraph.get(currentId); 258 + const tentativeInputs = currentCard.inputs.map((input) => { 259 + const consumeFrom = []; 260 + let remaining2 = input.quantity; 261 + if (sources) { 262 + for (const flow2 of sources) { 263 + const producerOutput = cardProduction2[flow2.source]?.outputs; 264 + if (!producerOutput) continue; 265 + for (const output of producerOutput) { 266 + if (output.resource !== input.resource) continue; 267 + const outputLeft = output.quantity - output.consumedBy.map((consumer) => consumer.quantity).reduce(add, 0); 268 + if (remaining2 <= outputLeft) { 269 + consumeFrom.push({ flow: flow2, output, quantity: remaining2 }); 270 + remaining2 = 0; 271 + break; 272 + } else { 273 + consumeFrom.push({ flow: flow2, output, quantity: outputLeft }); 274 + remaining2 -= outputLeft; 275 + } 276 + } 277 + } 278 + } 279 + return { input, remaining: remaining2, consumeFrom }; 280 + }); 281 + if (!tentativeInputs.every((input) => input.remaining === 0)) continue nextCard; 282 + for (const input of tentativeInputs) { 283 + for (const { flow: flow2, output, quantity } of input.consumeFrom) { 284 + output.consumedBy.push({ id: currentId, quantity }); 285 + inputs.push({ cardId: flow2.source, resource: output.resource, quantity }); 286 + } 287 + } 288 + break; 289 + } 290 + case "source": { 291 + if (!sourceIsProducing({ card: currentCard, field: currentField }, geography)) { 292 + continue nextCard; 293 + } 294 + break; 295 + } 296 + case "residential": 297 + case "trade": 298 + continue nextCard; 299 + default: 300 + throw new Error("Unreachable"); 301 + } 302 + cardProduction2[currentId] = { 303 + inputs, 304 + outputs: currentCard.outputs.map((output) => ({ ...output, consumedBy: [] })) 305 + }; 306 + } 307 + return cardProduction2; 308 + })(); 309 + const resourceProduction = (() => { 310 + const resourceProduction2 = Object.values(cardProduction).flatMap((card) => card.outputs).reduce( 311 + (resourceProduction3, output) => { 312 + resourceProduction3[output.resource] ??= { produced: 0, consumed: 0, demand: 0 }; 313 + resourceProduction3[output.resource].produced += output.quantity; 314 + for (const { quantity } of output.consumedBy) { 315 + resourceProduction3[output.resource].consumed += quantity; 316 + } 317 + return resourceProduction3; 318 + }, 319 + {} 320 + ); 321 + for (const [specie, { quantity }] of Object.entries(population)) { 322 + for (const need of species[specie].needs) { 323 + if (need.type !== "resource") continue; 324 + resourceProduction2[need.resource] ??= { produced: 0, consumed: 0, demand: 0 }; 325 + resourceProduction2[need.resource].demand += quantity * need.quantity; 326 + } 327 + } 328 + return resourceProduction2; 329 + })(); 330 + const income = Object.entries(resourceProduction).map(([resource, { produced, consumed, demand }]) => { 331 + const value = resources[resource].value; 332 + return value * Math.max(0, produced - consumed - demand) + value * 5 * Math.min(demand, Math.max(0, produced - consumed)); 333 + }).reduce(add, 0); 334 + setContext(RESOURCE_STATE, { 335 + get population() { 336 + return population; 337 + }, 338 + get cardProduction() { 339 + return cardProduction; 340 + }, 341 + get resourceProduction() { 342 + return resourceProduction; 343 + }, 344 + get income() { 345 + return income; 346 + } 347 + }); 348 + children($$renderer2); 349 + $$renderer2.push(`<!---->`); 350 + }); 351 + } 352 + class CardFocusEvent extends Event { 353 + cardId; 354 + constructor(cardId) { 355 + super("cardfocus"); 356 + this.cardId = cardId; 357 + } 358 + } 359 + function CardTile($$renderer, $$props) { 360 + $$renderer.component(($$renderer2) => { 361 + const { id, type: cardType, x, y, loose = false, onMove } = $$props; 362 + const appState = getAppState(); 363 + function onclick() { 364 + window.dispatchEvent(new CardFocusEvent(id)); 365 + } 366 + const cardSymbol = cards[cardType].name.split(" ").map((word) => word[0]).join(""); 367 + DragTile($$renderer2, { 368 + onMove: appState.mode === "place" ? onMove : void 0, 369 + onClick: onclick, 370 + x, 371 + y, 372 + loose, 373 + children: ($$renderer3) => { 374 + $$renderer3.push(`<div class="card svelte-isv3d4">${escape_html(cardSymbol)}</div>`); 375 + } 376 + }); 377 + }); 378 + } 379 + function CardField($$renderer, $$props) { 380 + $$renderer.component(($$renderer2) => { 381 + const { field = void 0, deck, onMoveCard } = $$props; 382 + $$renderer2.push(`<!--[-->`); 383 + const each_array = ensure_array_like(field); 384 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 385 + let card = each_array[$$index]; 386 + const deckCard = deck.find((dc) => dc.id === card.id); 387 + if (deckCard) { 388 + $$renderer2.push("<!--[-->"); 389 + CardTile($$renderer2, { 390 + id: card.id, 391 + x: card.x, 392 + y: card.y, 393 + type: deckCard.type, 394 + onMove: (x, y) => onMoveCard(card.id, x, y), 395 + loose: card.loose 396 + }); 397 + } else { 398 + $$renderer2.push("<!--[!-->"); 399 + } 400 + $$renderer2.push(`<!--]-->`); 401 + } 402 + $$renderer2.push(`<!--]-->`); 403 + bind_props($$props, { field }); 404 + }); 405 + } 406 + class CardPlacedEvent extends Event { 407 + card; 408 + constructor(card) { 409 + super("cardplaced"); 410 + this.card = card; 411 + } 412 + } 413 + class DeleteFlowEvent extends Event { 414 + flow; 415 + constructor(flow) { 416 + super("deleteflow"); 417 + this.flow = flow; 418 + } 419 + } 420 + function FlowLine($$renderer, $$props) { 421 + const TILE_SIZE = 128; 422 + const TOP_RANGE = TILE_SIZE * 2; 423 + const MAX_RANGE = TILE_SIZE * 5; 424 + const { onclick, x1, y1, x2, y2 } = $$props; 425 + const id = `${x1}_${y1}_${x2}_${y2}`; 426 + const dx = x2 - x1; 427 + const dy = y2 - y1; 428 + const l = Math.sqrt(dx ** 2 + dy ** 2); 429 + const r = l / 2; 430 + const a = Math.atan2(dy, dx); 431 + const sx = Math.sign(dx); 432 + const sy = Math.sign(dy); 433 + const s = Math.sign(dx) || 1; 434 + const qx = x1 + dx / 2 + r * Math.sin(a) / 2 * s; 435 + const qy = y1 + dy / 2 - r * Math.cos(a) / 2 * s; 436 + const qx2 = x1 + dx / 2 + (r + 12) * Math.sin(a) / 2 * s; 437 + const qy2 = y1 + dy / 2 - (r + 12) * Math.cos(a) / 2 * s; 438 + const efficacy = 1 - Math.max(0, Math.min(1, (l - TOP_RANGE) / (MAX_RANGE - TOP_RANGE)) * 0.75); 439 + $$renderer.push(`<path role="button" tabindex="0"${attr_class("flow live svelte-da3do8", void 0, { "selectable": !!onclick })}${attr_style(`--efficacy: ${stringify(efficacy)}; fill: url(#${stringify(id)}); stroke: url(#${stringify(id)})`)}${attr("d", `M ${stringify(x1)} ${stringify(y1)} Q ${stringify(qx)} ${stringify(qy)} ${stringify(x2)} ${stringify(y2)} Q ${stringify(qx2)} ${stringify(qy2)} ${stringify(x1)} ${stringify(y1)}`)}></path><defs><linearGradient${attr("id", id)}${attr("x1", sx === -1 ? 1 : 0)}${attr("y1", sy === -1 ? 1 : 0)}${attr("x2", sx === -1 ? 0 : 1)}${attr("y2", sy === -1 ? 0 : 1)}><stop offset="0%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 100%, var(--color-input) 0%)"></stop><stop offset="10%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 90%, var(--color-input) 10%)"></stop><stop offset="20%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 80%, var(--color-input) 20%)"></stop><stop offset="30%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 70%, var(--color-input) 30%)"></stop><stop offset="40%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 60%, var(--color-input) 40%)"></stop><stop offset="50%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 50%, var(--color-input) 50%)"></stop><stop offset="60%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 40%, var(--color-input) 60%)"></stop><stop offset="70%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 30%, var(--color-input) 70%)"></stop><stop offset="80%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 20%, var(--color-input) 80%)"></stop><stop offset="90%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 10%, var(--color-input) 90%)"></stop><stop offset="100%" style="stop-color: color-mix(in oklch shorter hue, var(--color-output) 0%, var(--color-input) 100%)"></stop></linearGradient></defs>`); 440 + } 441 + function ProductionOverlay($$renderer, $$props) { 442 + $$renderer.component(($$renderer2) => { 443 + const { id, x, y, type: cardType, onStartFlow } = $$props; 444 + const cardSpec = cards[cardType]; 445 + const inputs = {}; 446 + const outputs = {}; 447 + function findInput(resource) { 448 + return inputs[resource]; 449 + } 450 + function findOutput(resource) { 451 + return outputs[resource]; 452 + } 453 + $$renderer2.push(`<div class="gridspace svelte-go3dgf"${attr_style(`--grid-x: ${stringify(x)}; --grid-y: ${stringify(y)}`)}${attr("data-cardid", id)}>`); 454 + if ("inputs" in cardSpec) { 455 + $$renderer2.push("<!--[-->"); 456 + $$renderer2.push(`<div class="pips svelte-go3dgf"><!--[-->`); 457 + const each_array = ensure_array_like(cardSpec.inputs); 458 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 459 + let input = each_array[$$index]; 460 + $$renderer2.push(`<div class="piprow svelte-go3dgf"><div class="pip input svelte-go3dgf" role="presentation"></div> <span>${escape_html(input.quantity)} → `); 461 + ResourceRef($$renderer2, { id: input.resource }); 462 + $$renderer2.push(`<!----></span></div>`); 463 + } 464 + $$renderer2.push(`<!--]--></div>`); 465 + } else { 466 + $$renderer2.push("<!--[!-->"); 467 + } 468 + $$renderer2.push(`<!--]--> `); 469 + if ("outputs" in cardSpec) { 470 + $$renderer2.push("<!--[-->"); 471 + $$renderer2.push(`<div class="pips svelte-go3dgf"><!--[-->`); 472 + const each_array_1 = ensure_array_like(cardSpec.outputs); 473 + for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) { 474 + let output = each_array_1[$$index_1]; 475 + $$renderer2.push(`<div class="piprow svelte-go3dgf"><span>`); 476 + ResourceRef($$renderer2, { id: output.resource }); 477 + $$renderer2.push(`<!----> → ${escape_html(output.quantity)}</span> <div class="pip output svelte-go3dgf" role="presentation"></div></div>`); 478 + } 479 + $$renderer2.push(`<!--]--></div>`); 480 + } else { 481 + $$renderer2.push("<!--[!-->"); 482 + } 483 + $$renderer2.push(`<!--]--></div>`); 484 + bind_props($$props, { findInput, findOutput }); 485 + }); 486 + } 487 + function CardFlow($$renderer, $$props) { 488 + $$renderer.component(($$renderer2) => { 489 + const { flow, deck, field } = $$props; 490 + const validFlow = flow.map(({ source: sourceId, destination: destinationId, ...flow2 }) => { 491 + const source = field.find((card) => card.id === sourceId); 492 + const destination = field.find((card) => card.id === destinationId); 493 + if (!source || !destination) return void 0; 494 + return { ...flow2, source, destination }; 495 + }).filter((flow2) => flow2 !== void 0).toSorted((a, b) => a.priority - b.priority); 496 + let clientHeight = 0; 497 + let clientWidth = 0; 498 + let draggingFlowSource = void 0; 499 + let clientX = 0; 500 + let clientY = 0; 501 + const overlays = {}; 502 + function onStartFlow(event, card) { 503 + draggingFlowSource = { 504 + resource: event.resource, 505 + sourceType: event.sourceType, 506 + anchor: event.currentTarget, 507 + card 508 + }; 509 + clientX = event.clientX; 510 + clientY = event.clientY; 511 + } 512 + function deleteFlow(id) { 513 + window.dispatchEvent(new DeleteFlowEvent(id)); 514 + } 515 + $$renderer2.push(`<!--[-->`); 516 + const each_array = ensure_array_like(field); 517 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 518 + let card = each_array[$$index]; 519 + const deckCard = deck.find((dc) => dc.id === card.id); 520 + ProductionOverlay($$renderer2, { 521 + id: card.id, 522 + type: deckCard.type, 523 + x: card.x, 524 + y: card.y, 525 + onStartFlow: (event) => onStartFlow(event, card) 526 + }); 527 + } 528 + $$renderer2.push(`<!--]--> <div class="full svelte-13qno0"><svg${attr("viewBox", `0 0 ${stringify(clientWidth)} ${stringify(clientHeight)}`)}><!--[-->`); 529 + const each_array_1 = ensure_array_like(validFlow); 530 + for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) { 531 + let flow2 = each_array_1[$$index_1]; 532 + const start = overlays[flow2.source.id]?.findOutput(flow2.resource)?.getBoundingClientRect(); 533 + const end = overlays[flow2.destination.id]?.findInput(flow2.resource)?.getBoundingClientRect(); 534 + if (start && end) { 535 + $$renderer2.push("<!--[-->"); 536 + FlowLine($$renderer2, { 537 + x1: start.x + start.width / 2, 538 + y1: start.y + start.height / 2, 539 + x2: end.x + end.width / 2, 540 + y2: end.y + end.height / 2, 541 + onclick: () => deleteFlow(flow2.id) 542 + }); 543 + } else { 544 + $$renderer2.push("<!--[!-->"); 545 + } 546 + $$renderer2.push(`<!--]-->`); 547 + } 548 + $$renderer2.push(`<!--]-->`); 549 + if (draggingFlowSource) { 550 + $$renderer2.push("<!--[-->"); 551 + const bbox = draggingFlowSource.anchor.getBoundingClientRect(); 552 + const x = bbox.x + bbox.width / 2; 553 + const y = bbox.y + bbox.height / 2; 554 + FlowLine($$renderer2, { x1: x, y1: y, x2: clientX, y2: clientY }); 555 + } else { 556 + $$renderer2.push("<!--[!-->"); 557 + } 558 + $$renderer2.push(`<!--]--></svg></div>`); 559 + }); 560 + } 561 + function GameWindow($$renderer, $$props) { 562 + $$renderer.component(($$renderer2) => { 563 + const TILE_SIZE = 128; 564 + const appState = getAppState(); 565 + const gameState = getGameState(); 566 + const { geography, deck, field, flow } = gameState; 567 + let clientWidth = 0; 568 + let clientHeight = 0; 569 + let offsetX = 0; 570 + let offsetY = 0; 571 + function onMoveCard(id, movementX, movementY) { 572 + const card = field.find((card2) => card2.id === id); 573 + if (card) { 574 + const destinationX = card.loose ? Math.round((card.x + movementX) / TILE_SIZE) : card.x + Math.round(movementX / TILE_SIZE); 575 + const destinationY = card.loose ? Math.round((card.y + movementY) / TILE_SIZE) : card.y + Math.round(movementY / TILE_SIZE); 576 + if (field.some((card2) => card2.x === destinationX && card2.y === destinationY)) return; 577 + card.x = destinationX; 578 + card.y = destinationY; 579 + card.loose = false; 580 + window.dispatchEvent(new CardPlacedEvent(card)); 581 + } 582 + } 583 + const xMin = Math.floor(offsetX / TILE_SIZE); 584 + const yMin = Math.floor(offsetY / TILE_SIZE); 585 + const xMax = Math.floor((offsetX + clientWidth) / TILE_SIZE) + 1; 586 + const yMax = Math.floor((offsetY + clientHeight) / TILE_SIZE) + 1; 587 + function isOnScreen({ x, y }) { 588 + if (clientWidth === 0 || clientHeight === 0) return false; 589 + return xMin <= x && x < xMax && yMin <= y && y < yMax; 590 + } 591 + const terrain = geography.terrain.slice(Math.max(0, yMin - geography.origin.y), Math.max(0, yMax - geography.origin.y)).flatMap((row, y) => row.slice(Math.max(0, xMin - geography.origin.x), Math.max(0, xMax - geography.origin.x)).map((col, x) => ({ 592 + x: x + Math.max(xMin - geography.origin.x, 0), 593 + y: y + Math.max(yMin - geography.origin.y, 0), 594 + ...col 595 + }))); 596 + const visibleField = field.filter((card) => card.loose || isOnScreen(card)); 597 + const activeField = visibleField.filter((card) => !card.loose); 598 + let $$settled = true; 599 + let $$inner_renderer; 600 + function $$render_inner($$renderer3) { 601 + DragWindow($$renderer3, { 602 + get offsetX() { 603 + return offsetX; 604 + }, 605 + set offsetX($$value) { 606 + offsetX = $$value; 607 + $$settled = false; 608 + }, 609 + get offsetY() { 610 + return offsetY; 611 + }, 612 + set offsetY($$value) { 613 + offsetY = $$value; 614 + $$settled = false; 615 + }, 616 + get clientWidth() { 617 + return clientWidth; 618 + }, 619 + set clientWidth($$value) { 620 + clientWidth = $$value; 621 + $$settled = false; 622 + }, 623 + get clientHeight() { 624 + return clientHeight; 625 + }, 626 + set clientHeight($$value) { 627 + clientHeight = $$value; 628 + $$settled = false; 629 + }, 630 + children: ($$renderer4) => { 631 + $$renderer4.push(`<!--[-->`); 632 + const each_array = ensure_array_like(terrain); 633 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 634 + let tile = each_array[$$index]; 635 + $$renderer4.push(`<div class="terrain svelte-11xczzg"${attr("data-type", tile.type)}${attr_style(`--grid-x: ${stringify(tile.x)}; --grid-y: ${stringify(tile.y)}`)}></div>`); 636 + } 637 + $$renderer4.push(`<!--]--> `); 638 + GridLines($$renderer4, {}); 639 + $$renderer4.push(`<!----> `); 640 + CardField($$renderer4, { field: visibleField, deck, onMoveCard }); 641 + $$renderer4.push(`<!----> `); 642 + if (appState.mode === "flow") { 643 + $$renderer4.push("<!--[-->"); 644 + CardFlow($$renderer4, { field: activeField, deck, flow }); 645 + } else { 646 + $$renderer4.push("<!--[!-->"); 647 + } 648 + $$renderer4.push(`<!--]-->`); 649 + }, 650 + $$slots: { default: true } 651 + }); 652 + } 653 + do { 654 + $$settled = true; 655 + $$inner_renderer = $$renderer2.copy(); 656 + $$render_inner($$inner_renderer); 657 + } while (!$$settled); 658 + $$renderer2.subsume($$inner_renderer); 659 + }); 660 + } 661 + class CardFieldedEvent extends Event { 662 + card; 663 + constructor(card) { 664 + super("cardfielded"); 665 + this.card = card; 666 + } 667 + } 668 + function CardFocusDialog($$renderer, $$props) { 669 + let card = void 0; 670 + function show(cardToShow) { 671 + card = cardToShow; 672 + } 673 + function close() { 674 + } 675 + $$renderer.push(`<dialog class="svelte-1ylobv7">`); 676 + if (card) { 677 + $$renderer.push("<!--[-->"); 678 + Card($$renderer, { card }); 679 + } else { 680 + $$renderer.push("<!--[!-->"); 681 + } 682 + $$renderer.push(`<!--]--></dialog>`); 683 + bind_props($$props, { show, close }); 684 + } 685 + function Row($$renderer, $$props) { 686 + const { items, item } = $$props; 687 + $$renderer.push(`<div class="row svelte-15gpl1s"><!--[-->`); 688 + const each_array = ensure_array_like(items); 689 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 690 + let data = each_array[$$index]; 691 + item($$renderer, data); 692 + $$renderer.push(`<!---->`); 693 + } 694 + $$renderer.push(`<!--]--></div>`); 695 + } 696 + function ShimmerModal($$renderer, $$props) { 697 + const { children, style } = $$props; 698 + function show() { 699 + } 700 + function close() { 701 + } 702 + $$renderer.push(`<dialog${attr_style(style)} class="svelte-eun80g">`); 703 + children($$renderer); 704 + $$renderer.push(`<!----></dialog>`); 705 + bind_props($$props, { show, close }); 706 + } 707 + function CardRewardDialog($$renderer, $$props) { 708 + let cards2 = []; 709 + function show(cardsToShow) { 710 + cards2 = cardsToShow; 711 + } 712 + ShimmerModal($$renderer, { 713 + style: "--shimmer-color: rgb(164 85 217)", 714 + children: ($$renderer2) => { 715 + $$renderer2.push(`<article class="svelte-t8l7ck"><header class="svelte-t8l7ck"><h1>Card Received!</h1></header> `); 716 + { 717 + let item = function($$renderer3, card) { 718 + $$renderer3.push(`<div class="card svelte-t8l7ck">`); 719 + Card($$renderer3, { card }); 720 + $$renderer3.push(`<!----></div>`); 721 + }; 722 + Row($$renderer2, { items: cards2, item }); 723 + } 724 + $$renderer2.push(`<!----> <button>Sweet!</button></article>`); 725 + }, 726 + $$slots: { default: true } 727 + }); 728 + bind_props($$props, { show }); 729 + } 730 + function Modal($$renderer, $$props) { 731 + const { children, sizing = "fit" } = $$props; 732 + function show() { 733 + } 734 + function close() { 735 + } 736 + $$renderer.push(`<dialog${attr_class(clsx(sizing), "svelte-ta60gp")}>`); 737 + children($$renderer); 738 + $$renderer.push(`<!----></dialog>`); 739 + bind_props($$props, { show, close }); 740 + } 741 + class DeckOpenedEvent extends Event { 742 + constructor() { 743 + super("deckopened"); 744 + } 745 + } 746 + function DeckDialog($$renderer, $$props) { 747 + $$renderer.component(($$renderer2) => { 748 + const { onSelectCard } = $$props; 749 + const gameState = getGameState(); 750 + const { deck, field } = gameState; 751 + const deckCards = deck.map((deckCard) => ({ 752 + ...cards[deckCard.type], 753 + deckCard, 754 + isFielded: field.some((f) => f.id === deckCard.id) 755 + })); 756 + function show() { 757 + window.dispatchEvent(new DeckOpenedEvent()); 758 + } 759 + function close() { 760 + } 761 + Modal($$renderer2, { 762 + sizing: "fill", 763 + children: ($$renderer3) => { 764 + $$renderer3.push(`<article><header class="svelte-rkzgio"><h1>Deck</h1> <button class="close svelte-rkzgio">×</button></header> <div class="content svelte-rkzgio">`); 765 + { 766 + let card = function($$renderer4, card2) { 767 + Card($$renderer4, { 768 + card: card2, 769 + onSelect: apply(card2)(onSelectCard), 770 + disabled: card2.isFielded 771 + }); 772 + }; 773 + CardGrid($$renderer3, { cards: deckCards, card }); 774 + } 775 + $$renderer3.push(`<!----></div></article>`); 776 + }, 777 + $$slots: { default: true } 778 + }); 779 + bind_props($$props, { show, close }); 780 + }); 781 + } 782 + function MoneyRef($$renderer, $$props) { 783 + const { amount } = $$props; 784 + Shimmer($$renderer, { 785 + style: "--shimmer-color: oklch(from var(--color-money) calc(l - 0.2) c h)", 786 + children: ($$renderer2) => { 787 + if (amount !== void 0) { 788 + $$renderer2.push("<!--[-->"); 789 + $$renderer2.push(`$${escape_html(amount)}`); 790 + } else { 791 + $$renderer2.push("<!--[!-->"); 792 + $$renderer2.push(`Money`); 793 + } 794 + $$renderer2.push(`<!--]-->`); 795 + } 796 + }); 797 + } 798 + function ProductionReport($$renderer, $$props) { 799 + $$renderer.component(($$renderer2) => { 800 + const { resourceProduction } = $$props; 801 + const income = Object.entries(resourceProduction).map(([resource, { produced, consumed, demand }]) => { 802 + const value = resources[resource].value; 803 + return value * Math.max(0, produced - consumed - demand) + value * 5 * Math.min(demand, Math.max(0, produced - consumed)); 804 + }).reduce(add, 0); 805 + $$renderer2.push(`<table class="svelte-mterps"><thead class="svelte-mterps"><tr class="svelte-mterps"><th class="svelte-mterps">Resource</th><th class="svelte-mterps">Produced</th><th class="svelte-mterps">Consumed</th><th class="svelte-mterps">Satisfaction</th><th class="svelte-mterps">Exported</th><th class="svelte-mterps">Value</th><th class="svelte-mterps">Profit</th></tr></thead><tbody><!--[-->`); 806 + const each_array = ensure_array_like(Object.entries(resourceProduction)); 807 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 808 + let [resourceType, production] = each_array[$$index]; 809 + const excess = Math.max(0, production.produced - production.consumed - production.demand); 810 + const satisfaction = Math.min(production.demand, Math.max(0, production.produced - production.consumed)); 811 + const value = resources[resourceType].value; 812 + $$renderer2.push(`<tr class="svelte-mterps"><th class="svelte-mterps">`); 813 + ResourceRef($$renderer2, { id: resourceType }); 814 + $$renderer2.push(`<!----></th><td class="produced svelte-mterps">${escape_html(production.produced)}</td><td class="consumed svelte-mterps">${escape_html(production.consumed)}</td><td class="svelte-mterps"><span class="produced svelte-mterps">${escape_html(satisfaction)}</span> / <span class="consumed svelte-mterps">${escape_html(production.demand)}</span></td><td class="consumed svelte-mterps">${escape_html(excess)}</td><td class="svelte-mterps">`); 815 + MoneyRef($$renderer2, { amount: value }); 816 + $$renderer2.push(`<!----></td><td class="svelte-mterps">`); 817 + MoneyRef($$renderer2, { amount: value * excess + value * 5 * satisfaction }); 818 + $$renderer2.push(`<!----></td></tr>`); 819 + } 820 + $$renderer2.push(`<!--]--></tbody><tfoot class="svelte-mterps"><tr class="svelte-mterps"><th class="svelte-mterps">Total</th><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps"></td><td class="svelte-mterps">`); 821 + MoneyRef($$renderer2, { amount: income }); 822 + $$renderer2.push(`<!----></td></tr></tfoot></table>`); 823 + }); 824 + } 825 + function ProductionReportDialog($$renderer, $$props) { 826 + $$renderer.component(($$renderer2) => { 827 + const resourceState = getResourceState(); 828 + const { resourceProduction } = resourceState; 829 + function show() { 830 + } 831 + function close() { 832 + } 833 + Modal($$renderer2, { 834 + children: ($$renderer3) => { 835 + $$renderer3.push(`<article><header class="svelte-1dvzbw0"><h1>Production Report</h1> <button class="close svelte-1dvzbw0">×</button></header> <div class="content svelte-1dvzbw0">`); 836 + ProductionReport($$renderer3, { resourceProduction }); 837 + $$renderer3.push(`<!----></div></article>`); 838 + }, 839 + $$slots: { default: true } 840 + }); 841 + bind_props($$props, { show, close }); 842 + }); 843 + } 844 + class ShopOpenedEvent extends Event { 845 + constructor() { 846 + super("shopopened"); 847 + } 848 + } 849 + function CardBack($$renderer, $$props) { 850 + const { category } = $$props; 851 + $$renderer.push(`<div class="card-back svelte-legrwj">`); 852 + if (category) { 853 + $$renderer.push("<!--[-->"); 854 + $$renderer.push(`<div class="category svelte-legrwj">${escape_html(category)}</div>`); 855 + } else { 856 + $$renderer.push("<!--[!-->"); 857 + } 858 + $$renderer.push(`<!--]--></div>`); 859 + } 860 + function PackRef($$renderer, $$props) { 861 + const { children } = $$props; 862 + Shimmer($$renderer, { 863 + style: "--shimmer-color: var(--color-pack)", 864 + children: ($$renderer2) => { 865 + children($$renderer2); 866 + $$renderer2.push(`<!---->`); 867 + } 868 + }); 869 + } 870 + function ShimmerBox($$renderer, $$props) { 871 + const { style, children } = $$props; 872 + $$renderer.push(`<div${attr_style(style)} class="shimmer svelte-y2bo7g">`); 873 + children?.($$renderer); 874 + $$renderer.push(`<!----></div>`); 875 + } 876 + function Pack($$renderer, $$props) { 877 + $$renderer.component(($$renderer2) => { 878 + const { pack } = $$props; 879 + let hovering = false; 880 + $$renderer2.push(`<div class="pack svelte-1h5lzcn" role="button"${attr("tabindex", 0)}><div class="banner svelte-1h5lzcn">`); 881 + PackRef($$renderer2, { 882 + children: ($$renderer3) => { 883 + $$renderer3.push(`<!---->${escape_html(pack.name)}`); 884 + } 885 + }); 886 + $$renderer2.push(`<!----></div> `); 887 + if (pack.description) { 888 + $$renderer2.push("<!--[-->"); 889 + $$renderer2.push(`<div class="info svelte-1h5lzcn">${escape_html(pack.description)}</div>`); 890 + } else { 891 + $$renderer2.push("<!--[!-->"); 892 + } 893 + $$renderer2.push(`<!--]--> `); 894 + if (pack.originalPrice) { 895 + $$renderer2.push("<!--[-->"); 896 + $$renderer2.push(`<div class="price-tag replaced svelte-1h5lzcn">`); 897 + ShimmerBox($$renderer2, { 898 + style: "--shimmer-color: oklch(from var(--color-money) l calc(c - 0.075) h); border-radius: 1rem; padding-inline: 1rem;", 899 + children: ($$renderer3) => { 900 + $$renderer3.push(`<s class="price-label svelte-1h5lzcn">$${escape_html(pack.originalPrice)}</s>`); 901 + } 902 + }); 903 + $$renderer2.push(`<!----></div>`); 904 + } else { 905 + $$renderer2.push("<!--[!-->"); 906 + } 907 + $$renderer2.push(`<!--]--> <div${attr_class("price-tag svelte-1h5lzcn", void 0, { "replacement": !!pack.originalPrice })}>`); 908 + ShimmerBox($$renderer2, { 909 + style: "--shimmer-color: var(--color-money); border-radius: 1rem; padding-inline: 1rem;", 910 + children: ($$renderer3) => { 911 + $$renderer3.push(`<div class="price-label svelte-1h5lzcn">$${escape_html(pack.price)}</div>`); 912 + } 913 + }); 914 + $$renderer2.push(`<!----></div></div> <dialog${attr("open", hovering, true)} class="tooltip svelte-1h5lzcn"><header class="svelte-1h5lzcn">`); 915 + PackRef($$renderer2, { 916 + children: ($$renderer3) => { 917 + $$renderer3.push(`<!---->${escape_html(pack.name)}`); 918 + } 919 + }); 920 + $$renderer2.push(`<!----></header> `); 921 + { 922 + let item = function($$renderer3, content) { 923 + $$renderer3.push(`<div class="card svelte-1h5lzcn">`); 924 + if (content.type === "card") { 925 + $$renderer3.push("<!--[-->"); 926 + Card($$renderer3, { card: cards[content.card], disabled: content.missing }); 927 + } else { 928 + $$renderer3.push("<!--[!-->"); 929 + if (content.type === "category") { 930 + $$renderer3.push("<!--[-->"); 931 + CardBack($$renderer3, { category: content.category }); 932 + } else { 933 + $$renderer3.push("<!--[!-->"); 934 + if (content.type === "any") { 935 + $$renderer3.push("<!--[-->"); 936 + CardBack($$renderer3, {}); 937 + } else { 938 + $$renderer3.push("<!--[!-->"); 939 + } 940 + $$renderer3.push(`<!--]-->`); 941 + } 942 + $$renderer3.push(`<!--]-->`); 943 + } 944 + $$renderer3.push(`<!--]--></div>`); 945 + }; 946 + Row($$renderer2, { items: pack.contents, item }); 947 + } 948 + $$renderer2.push(`<!----></dialog>`); 949 + }); 950 + } 951 + function ShopDialog($$renderer, $$props) { 952 + $$renderer.component(($$renderer2) => { 953 + const gameState = getGameState(); 954 + const { shop } = gameState; 955 + function show() { 956 + window.dispatchEvent(new ShopOpenedEvent()); 957 + } 958 + function close() { 959 + } 960 + Modal($$renderer2, { 961 + sizing: "fill", 962 + children: ($$renderer3) => { 963 + $$renderer3.push(`<article><header class="svelte-1w43591"><h1>Shop</h1> <button class="close svelte-1w43591">×</button></header> <div class="content svelte-1w43591">`); 964 + { 965 + let item = function($$renderer4, pack) { 966 + Pack($$renderer4, { pack }); 967 + }; 968 + Grid($$renderer3, { items: shop.packs, item }); 969 + } 970 + $$renderer3.push(`<!----></div></article>`); 971 + }, 972 + $$slots: { default: true } 973 + }); 974 + bind_props($$props, { show, close }); 975 + }); 976 + } 977 + function Hud($$renderer, $$props) { 978 + $$renderer.component(($$renderer2) => { 979 + const appState = getAppState(); 980 + const gameState = getGameState(); 981 + const { deck, field, money } = gameState; 982 + const resourceState = getResourceState(); 983 + const { resourceProduction, income } = resourceState; 984 + const tradingCentre = deck.find((card) => card.type === "trading-centre"); 985 + const tradingCentreOnField = field.find((card) => card.id === tradingCentre?.id); 986 + const hasTrade = tradingCentreOnField && !tradingCentreOnField.loose; 987 + function onSelectCard(card) { 988 + window.dispatchEvent(new CardFieldedEvent(card.deckCard)); 989 + field.push({ id: card.deckCard.id, x: 0, y: 0, loose: true }); 990 + } 991 + $$renderer2.push(`<div class="area svelte-og50z2"><div class="status svelte-og50z2"><div class="title-area svelte-og50z2"><span class="title svelte-og50z2">Your Town</span> <span>$${escape_html(money)}</span> <span>$${escape_html(income)} / day</span></div> <div class="resource-area svelte-og50z2"><!--[-->`); 992 + const each_array = ensure_array_like(Object.entries(resourceProduction)); 993 + for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { 994 + let [resource, { produced, consumed, demand }] = each_array[$$index]; 995 + $$renderer2.push(`<span>`); 996 + ResourceRef($$renderer2, { id: resource }); 997 + $$renderer2.push(`<!----> `); 998 + if (demand) { 999 + $$renderer2.push("<!--[-->"); 1000 + $$renderer2.push(`${escape_html(produced)}/${escape_html(demand)}`); 1001 + } else { 1002 + $$renderer2.push("<!--[!-->"); 1003 + $$renderer2.push(`${escape_html(produced - consumed)}`); 1004 + } 1005 + $$renderer2.push(`<!--]--></span>`); 1006 + } 1007 + $$renderer2.push(`<!--]--></div></div> <div class="menu svelte-og50z2" role="toolbar"><a class="button svelte-og50z2" href="/">Menu</a> <button class="svelte-og50z2">Reset</button> <button class="svelte-og50z2">Mode: ${escape_html(appState.mode)}</button> `); 1008 + if (hasTrade) { 1009 + $$renderer2.push("<!--[-->"); 1010 + $$renderer2.push(`<button class="svelte-og50z2">Prod</button> <button class="svelte-og50z2">Shop</button>`); 1011 + } else { 1012 + $$renderer2.push("<!--[!-->"); 1013 + } 1014 + $$renderer2.push(`<!--]--> <button class="svelte-og50z2">Deck</button></div></div> `); 1015 + ProductionReportDialog($$renderer2, {}); 1016 + $$renderer2.push(`<!----> `); 1017 + DeckDialog($$renderer2, { onSelectCard }); 1018 + $$renderer2.push(`<!----> `); 1019 + ShopDialog($$renderer2, {}); 1020 + $$renderer2.push(`<!----> `); 1021 + CardRewardDialog($$renderer2, {}); 1022 + $$renderer2.push(`<!----> `); 1023 + CardFocusDialog($$renderer2, {}); 1024 + $$renderer2.push(`<!---->`); 1025 + }); 1026 + } 1027 + function CardRef($$renderer, $$props) { 1028 + $$renderer.component(($$renderer2) => { 1029 + const { id } = $$props; 1030 + const card = cards[id]; 1031 + Shimmer($$renderer2, { 1032 + style: "--shimmer-color: var(--color-card)", 1033 + children: ($$renderer3) => { 1034 + $$renderer3.push(`<!---->${escape_html(card.name)}`); 1035 + } 1036 + }); 1037 + }); 1038 + } 1039 + function TutorialDialog($$renderer, $$props) { 1040 + $$renderer.component(($$renderer2) => { 1041 + const { onDismiss, children, actions } = $$props; 1042 + function show() { 1043 + } 1044 + function dismiss() { 1045 + onDismiss?.(); 1046 + } 1047 + $$renderer2.push(`<dialog class="svelte-1chcjmg"><article class="svelte-1chcjmg">`); 1048 + children($$renderer2); 1049 + $$renderer2.push(`<!----></article> <div class="controls svelte-1chcjmg">`); 1050 + actions($$renderer2, dismiss); 1051 + $$renderer2.push(`<!----></div></dialog>`); 1052 + bind_props($$props, { show }); 1053 + }); 1054 + } 1055 + function Tutorial($$renderer, $$props) { 1056 + $$renderer.component(($$renderer2) => { 1057 + const gameState = getGameState(); 1058 + const { deck, field, shop } = gameState; 1059 + const resourceState = getResourceState(); 1060 + const { resourceProduction } = resourceState; 1061 + function introReward() { 1062 + window.setTimeout( 1063 + () => { 1064 + window.dispatchEvent(new CardsReceivedEvent([{ id: generateCardId(), type: "cat-neighbourhood" }])); 1065 + }, 1066 + 500 1067 + ); 1068 + } 1069 + function arrangeNeighbourhoodReward() { 1070 + window.setTimeout( 1071 + () => { 1072 + window.dispatchEvent(new CardsReceivedEvent([{ id: generateCardId(), type: "bakery" }])); 1073 + }, 1074 + 500 1075 + ); 1076 + } 1077 + function placeBakeryReward() { 1078 + window.setTimeout( 1079 + () => { 1080 + window.dispatchEvent(new CardsReceivedEvent([ 1081 + { id: generateCardId(), type: "water-well" }, 1082 + { id: generateCardId(), type: "wheat-farm" } 1083 + ])); 1084 + }, 1085 + 500 1086 + ); 1087 + } 1088 + function aboutTradeReward() { 1089 + window.setTimeout( 1090 + () => { 1091 + window.dispatchEvent(new CardsReceivedEvent([{ id: generateCardId(), type: "trading-centre" }])); 1092 + }, 1093 + 500 1094 + ); 1095 + } 1096 + function aboutIncomeReward() { 1097 + gameState.money += 4; 1098 + shop.packs.push({ 1099 + id: window.crypto.randomUUID(), 1100 + name: "Starter Pack?", 1101 + description: "A one of a kind pack containing all you need to get started!\nIt looks like this one has been opened already, and some of the cards are missing.", 1102 + price: 4, 1103 + originalPrice: 20, 1104 + contents: [ 1105 + { type: "card", card: "cat-neighbourhood", missing: true }, 1106 + { type: "card", card: "water-well", missing: true }, 1107 + { type: "card", card: "wheat-farm", missing: true }, 1108 + { type: "card", card: "flour-mill" }, 1109 + { type: "card", card: "bakery", missing: true } 1110 + ] 1111 + }); 1112 + } 1113 + { 1114 + let actions = function($$renderer3, dismiss) { 1115 + $$renderer3.push(`<button>Of course!</button>`); 1116 + }; 1117 + TutorialDialog($$renderer2, { 1118 + onDismiss: introReward, 1119 + actions, 1120 + children: ($$renderer3) => { 1121 + $$renderer3.push(`<p>Hello mayor, and welcome to the location of our new town! All of us are just getting started 1122 + here ourselves. We haven't even placed a single card yet!</p> <p>I have the card for a `); 1123 + CardRef($$renderer3, { id: "cat-neighbourhood" }); 1124 + $$renderer3.push(`<!----> right here, I'll put it into your deck. 1125 + Since you're in charge here, I'll let you see about setting that up for us. Start by opening up the 1126 + deck view.</p> <p class="info svelte-1195hbs">The button to open the deck view is at the bottom right.</p>`); 1127 + }, 1128 + $$slots: { actions: true, default: true } 1129 + }); 1130 + } 1131 + $$renderer2.push(`<!----> `); 1132 + { 1133 + let actions = function($$renderer3, dismiss) { 1134 + $$renderer3.push(`<button>Got it!</button>`); 1135 + }; 1136 + TutorialDialog($$renderer2, { 1137 + actions, 1138 + children: ($$renderer3) => { 1139 + $$renderer3.push(`<p>This is the deck view; the cards you see here are yours. There are all sorts of cards to be 1140 + collected, each one providing a different function. I'm sure you'll soon have a whole collection 1141 + and turn this town into a great place to live!</p> <p>For now, we just need to set up that `); 1142 + CardRef($$renderer3, { id: "cat-neighbourhood" }); 1143 + $$renderer3.push(`<!----> for your citizens to live 1144 + in.</p> <p class="info svelte-1195hbs">Click a card to drop it into the world.</p>`); 1145 + }, 1146 + $$slots: { actions: true, default: true } 1147 + }); 1148 + } 1149 + $$renderer2.push(`<!----> `); 1150 + { 1151 + let actions = function($$renderer3, dismiss) { 1152 + $$renderer3.push(`<button>On it!</button>`); 1153 + }; 1154 + TutorialDialog($$renderer2, { 1155 + actions, 1156 + children: ($$renderer3) => { 1157 + $$renderer3.push(`<p>The `); 1158 + CardRef($$renderer3, { id: "cat-neighbourhood" }); 1159 + $$renderer3.push(`<!----> is now on the field, but it's sitting loose. Make sure to 1160 + properly set into the grid to ensure that it stays put.</p> <p class="info svelte-1195hbs">Click and drag cards to relocate them.</p>`); 1161 + }, 1162 + $$slots: { actions: true, default: true } 1163 + }); 1164 + } 1165 + $$renderer2.push(`<!----> `); 1166 + { 1167 + let actions = function($$renderer3, dismiss) { 1168 + $$renderer3.push(`<button>Got it!</button>`); 1169 + }; 1170 + TutorialDialog($$renderer2, { 1171 + onDismiss: arrangeNeighbourhoodReward, 1172 + actions, 1173 + children: ($$renderer3) => { 1174 + $$renderer3.push(`<p>Residential cards provide housing for residents in your town. The `); 1175 + CardRef($$renderer3, { id: "cat-neighbourhood" }); 1176 + $$renderer3.push(`<!----> in particular has room for 6 `); 1177 + SpeciesRef($$renderer3, { id: "cat" }); 1178 + $$renderer3.push(`<!----> residents.</p> <p>Each type of resident has different needs. When the needs of a resident are satisfied, their 1179 + productivity increases and they will pay you more `); 1180 + MoneyRef($$renderer3, {}); 1181 + $$renderer3.push(`<!---->.</p> <p>A `); 1182 + SpeciesRef($$renderer3, { id: "cat" }); 1183 + $$renderer3.push(`<!----> requires 1 `); 1184 + ResourceRef($$renderer3, { id: "bread" }); 1185 + $$renderer3.push(`<!----> per day to be satisfied. Luckily, 1186 + I have a `); 1187 + CardRef($$renderer3, { id: "bakery" }); 1188 + $$renderer3.push(`<!----> card already, which will allow us to produce that `); 1189 + ResourceRef($$renderer3, { id: "bread" }); 1190 + $$renderer3.push(`<!----> right here in town!</p> <p class="info svelte-1195hbs">Place a `); 1191 + CardRef($$renderer3, { id: "bakery" }); 1192 + $$renderer3.push(`<!----> from your deck into your town.</p>`); 1193 + }, 1194 + $$slots: { actions: true, default: true } 1195 + }); 1196 + } 1197 + $$renderer2.push(`<!----> `); 1198 + { 1199 + let actions = function($$renderer3, dismiss) { 1200 + $$renderer3.push(`<button>Ok!</button>`); 1201 + }; 1202 + TutorialDialog($$renderer2, { 1203 + onDismiss: placeBakeryReward, 1204 + actions, 1205 + children: ($$renderer3) => { 1206 + $$renderer3.push(`<p>The `); 1207 + CardRef($$renderer3, { id: "bakery" }); 1208 + $$renderer3.push(`<!----> is a Production card. Production cards produce resources by consuming 1209 + the resources of other cards nearby. To produce 5 units of `); 1210 + ResourceRef($$renderer3, { id: "bread" }); 1211 + $$renderer3.push(`<!---->, the `); 1212 + CardRef($$renderer3, { id: "bakery" }); 1213 + $$renderer3.push(`<!----> uses 1 unit of `); 1214 + ResourceRef($$renderer3, { id: "water" }); 1215 + $$renderer3.push(`<!----> and 4 units of `); 1216 + ResourceRef($$renderer3, { id: "flour" }); 1217 + $$renderer3.push(`<!---->.</p> <p>If we want this `); 1218 + CardRef($$renderer3, { id: "bakery" }); 1219 + $$renderer3.push(`<!----> working, we'll need to get our hands on those resources. 1220 + I think I have a few more cards that might help with that, take a look and see what you can do.</p>`); 1221 + }, 1222 + $$slots: { actions: true, default: true } 1223 + }); 1224 + } 1225 + $$renderer2.push(`<!----> `); 1226 + { 1227 + let actions = function($$renderer3, dismiss) { 1228 + $$renderer3.push(`<button>Makes sense to me!</button>`); 1229 + }; 1230 + TutorialDialog($$renderer2, { 1231 + onDismiss: () => "await-production", 1232 + actions, 1233 + children: ($$renderer3) => { 1234 + $$renderer3.push(`<p>The `); 1235 + CardRef($$renderer3, { id: "water-well" }); 1236 + $$renderer3.push(`<!----> and `); 1237 + CardRef($$renderer3, { id: "wheat-farm" }); 1238 + $$renderer3.push(`<!----> cards are both Source cards, meaning 1239 + they are able to produce resources without needing to consume anything first. Instead, they allow 1240 + you to harvest resources straight from the source.</p> <p>While the `); 1241 + CardRef($$renderer3, { id: "water-well" }); 1242 + $$renderer3.push(`<!----> is able to produce water from anywhere, the `); 1243 + CardRef($$renderer3, { id: "wheat-farm" }); 1244 + $$renderer3.push(`<!----> requires being placed on fertile `); 1245 + TerrainRef($$renderer3, { id: "soil" }); 1246 + $$renderer3.push(`<!----> in order to 1247 + grow wheat.</p> <p class="info svelte-1195hbs">Make sure your new cards are both producing.</p>`); 1248 + }, 1249 + $$slots: { actions: true, default: true } 1250 + }); 1251 + } 1252 + $$renderer2.push(`<!----> `); 1253 + { 1254 + let actions = function($$renderer3, dismiss) { 1255 + $$renderer3.push(`<button>Wow!</button>`); 1256 + }; 1257 + TutorialDialog($$renderer2, { 1258 + onDismiss: aboutTradeReward, 1259 + actions, 1260 + children: ($$renderer3) => { 1261 + $$renderer3.push(`<p>The `); 1262 + CardRef($$renderer3, { id: "wheat-farm" }); 1263 + $$renderer3.push(`<!----> is producing, but without a `); 1264 + CardRef($$renderer3, { id: "flour-mill" }); 1265 + $$renderer3.push(`<!----> in town, 1266 + there's nothing for us to do with the `); 1267 + ResourceRef($$renderer3, { id: "wheat" }); 1268 + $$renderer3.push(`<!---->.</p> <p>Luckily, I've got one last card here with me, it's a rare `); 1269 + CardRef($$renderer3, { id: "trading-centre" }); 1270 + $$renderer3.push(`<!----> card. You'll 1271 + probably never get your hands on another one of these. This `); 1272 + CardRef($$renderer3, { id: "trading-centre" }); 1273 + $$renderer3.push(`<!----> will become the backbone of our town, allowing us to sell our excess resources in exchange for `); 1274 + MoneyRef($$renderer3, {}); 1275 + $$renderer3.push(`<!---->.</p> <p class="info svelte-1195hbs">Place the `); 1276 + CardRef($$renderer3, { id: "trading-centre" }); 1277 + $$renderer3.push(`<!---->.</p>`); 1278 + }, 1279 + $$slots: { actions: true, default: true } 1280 + }); 1281 + } 1282 + $$renderer2.push(`<!----> `); 1283 + { 1284 + let actions = function($$renderer3, dismiss) { 1285 + $$renderer3.push(`<button>I do like money...</button>`); 1286 + }; 1287 + TutorialDialog($$renderer2, { 1288 + onDismiss: aboutIncomeReward, 1289 + actions, 1290 + children: ($$renderer3) => { 1291 + $$renderer3.push(`<p>This is a world of production and trade, so all resources are reported in a rate of <strong>production per day</strong>. Other than `); 1292 + MoneyRef($$renderer3, {}); 1293 + $$renderer3.push(`<!---->, there's not much point in 1294 + stockpiling any resources. Instead, at the end of each day, any excess resources we haven't used 1295 + get exported via the `); 1296 + CardRef($$renderer3, { id: "trading-centre" }); 1297 + $$renderer3.push(`<!---->.</p> <p>The `); 1298 + CardRef($$renderer3, { id: "wheat-farm" }); 1299 + $$renderer3.push(`<!----> produces 4 `); 1300 + ResourceRef($$renderer3, { id: "wheat" }); 1301 + $$renderer3.push(`<!----> per day, but a unit of `); 1302 + ResourceRef($$renderer3, { id: "wheat" }); 1303 + $$renderer3.push(`<!----> is worth just `); 1304 + MoneyRef($$renderer3, { amount: 1 }); 1305 + $$renderer3.push(`<!----> when exported. The `); 1306 + ResourceRef($$renderer3, { id: "water" }); 1307 + $$renderer3.push(`<!----> on the other hand isn't even worth selling. Unused resources aren't worth 1308 + much!</p> <p>Eventually most of your income will be coming from satisfied residents buying the things they 1309 + need, but for now I'll just work out a deal real quick for your first export.</p>`); 1310 + }, 1311 + $$slots: { actions: true, default: true } 1312 + }); 1313 + } 1314 + $$renderer2.push(`<!----> `); 1315 + { 1316 + let actions = function($$renderer3, dismiss) { 1317 + $$renderer3.push(`<button>Exciting!</button>`); 1318 + }; 1319 + TutorialDialog($$renderer2, { 1320 + actions, 1321 + children: ($$renderer3) => { 1322 + $$renderer3.push(`<p>The other thing the `); 1323 + CardRef($$renderer3, { id: "trading-centre" }); 1324 + $$renderer3.push(`<!----> allows you to trade for is more cards. For a 1325 + little bit of `); 1326 + MoneyRef($$renderer3, {}); 1327 + $$renderer3.push(`<!---->, you can buy a pack containing a few common cards which you can add 1328 + to your town.</p> <p class="info svelte-1195hbs">Open up the shop with the button at the bottom right.</p>`); 1329 + }, 1330 + $$slots: { actions: true, default: true } 1331 + }); 1332 + } 1333 + $$renderer2.push(`<!----> `); 1334 + { 1335 + let actions = function($$renderer3, dismiss) { 1336 + $$renderer3.push(`<button>That's ok...</button>`); 1337 + }; 1338 + TutorialDialog($$renderer2, { 1339 + actions, 1340 + children: ($$renderer3) => { 1341 + $$renderer3.push(`<p>The shop offers new cards in <strong>Packs</strong>. The available packs are always changing, 1342 + and each one contains a different assortment of cards, so be sure to check back often and buy 1343 + any that catch your eye.</p> <p>There's one pack available right now, the `); 1344 + PackRef($$renderer3, { 1345 + children: ($$renderer4) => { 1346 + $$renderer4.push(`<!---->Starter Pack`); 1347 + } 1348 + }); 1349 + $$renderer3.push(`<!---->, but I have a 1350 + confession to make... I already opened it and gave you most of the cards. There's still one left 1351 + though, I didn't want to take away all the fun!</p> <p class="info svelte-1195hbs">Buy (the rest of) the `); 1352 + PackRef($$renderer3, { 1353 + children: ($$renderer4) => { 1354 + $$renderer4.push(`<!---->Starter Pack`); 1355 + } 1356 + }); 1357 + $$renderer3.push(`<!---->.</p>`); 1358 + }, 1359 + $$slots: { actions: true, default: true } 1360 + }); 1361 + } 1362 + $$renderer2.push(`<!----> `); 1363 + { 1364 + let actions = function($$renderer3, dismiss) { 1365 + $$renderer3.push(`<button>Cool!</button>`); 1366 + }; 1367 + TutorialDialog($$renderer2, { 1368 + actions, 1369 + children: ($$renderer3) => { 1370 + $$renderer3.push(`<p>There's just one last step: to set up the transportation of resources from where they are 1371 + produced, to where they will be consumed. As the mayor, you're responsible for determining all 1372 + of what goes where and how it gets there.</p> <p>In general, it's hard to move things long distances by hand in one day. One or two tiles is 1373 + totally fine, but beyond that you'll be losing about 25% of the total throughput per tile. Any 1374 + more than 5 tiles is too far for things to be carried by hand in a day at all, though you might 1375 + be able find cards for useful tools to help with that type of thing later on.</p> <p class="info svelte-1195hbs">Enter Flow mode and drag connections from producers to consumers.</p>`); 1376 + }, 1377 + $$slots: { actions: true, default: true } 1378 + }); 1379 + } 1380 + $$renderer2.push(`<!----> `); 1381 + { 1382 + let actions = function($$renderer3, dismiss) { 1383 + $$renderer3.push(`<button>I will!</button>`); 1384 + }; 1385 + TutorialDialog($$renderer2, { 1386 + actions, 1387 + children: ($$renderer3) => { 1388 + $$renderer3.push(`<p>That's it, the `); 1389 + CardRef($$renderer3, { id: "bakery" }); 1390 + $$renderer3.push(`<!----> is finally able to make its `); 1391 + ResourceRef($$renderer3, { id: "bread" }); 1392 + $$renderer3.push(`<!---->! 1393 + You don't have to set up connections for residents finding and consuming their needs, or for 1394 + resources to be exported, that all happens automatically, so you'll find that already your 1395 + expected profits for tomorrow are looking quite healthy!</p> <p>You'll be on your own from here on out. I look forward to seeing where you take the town, and 1396 + meeting all the people who will eventually move in! Good luck, and I hope you have fun!</p> <p class="info svelte-1195hbs">Cards don't only come from packs. Earn powerful and rare cards by participating in certain 1397 + activities in the real world, or trade your cards online with other players to get exactly the 1398 + ones you need.</p>`); 1399 + }, 1400 + $$slots: { actions: true, default: true } 1401 + }); 1402 + } 1403 + $$renderer2.push(`<!---->`); 1404 + }); 1405 + } 1406 + function _page($$renderer) { 1407 + $$renderer.push(`<div role="application" class="svelte-hy9bcf">`); 1408 + AppStateProvider($$renderer, { 1409 + children: ($$renderer2) => { 1410 + GameStateProvider($$renderer2, { 1411 + children: ($$renderer3) => { 1412 + ResourceStateProvider($$renderer3, { 1413 + children: ($$renderer4) => { 1414 + $$renderer4.push(`<main class="svelte-hy9bcf">`); 1415 + GameWindow($$renderer4); 1416 + $$renderer4.push(`<!----></main> <div class="hud svelte-hy9bcf">`); 1417 + Hud($$renderer4); 1418 + $$renderer4.push(`<!----></div> `); 1419 + Tutorial($$renderer4); 1420 + $$renderer4.push(`<!---->`); 1421 + } 1422 + }); 1423 + } 1424 + }); 1425 + } 1426 + }); 1427 + $$renderer.push(`<!----></div>`); 1428 + } 1429 + export { 1430 + _page as default 1431 + };
+3857
app/.svelte-kit/output/server/index.js
··· 1 + import { D as DEV } from "./chunks/false.js"; 2 + import { json, text, error } from "@sveltejs/kit"; 3 + import { HttpError, SvelteKitError, Redirect, ActionFailure } from "@sveltejs/kit/internal"; 4 + import { with_request_store, merge_tracing, try_get_request_store } from "@sveltejs/kit/internal/server"; 5 + import { a as assets, b as base, c as app_dir, r as relative, o as override, d as reset } from "./chunks/environment.js"; 6 + import { B as BINARY_FORM_CONTENT_TYPE, c as create_remote_key, p as parse_remote_arg, s as stringify, d as deserialize_binary_form, T as TRAILING_SLASH_PARAM, I as INVALIDATED_PARAM } from "./chunks/shared.js"; 7 + import * as devalue from "devalue"; 8 + import { m as make_trackable, d as disable_search, a as decode_params, S as SCHEME, v as validate_layout_server_exports, b as validate_layout_exports, c as validate_page_server_exports, e as validate_page_exports, n as normalize_path, r as resolve, f as decode_pathname, g as validate_server_exports } from "./chunks/exports.js"; 9 + import { b as base64_encode, t as text_decoder, a as text_encoder, g as get_relative_path } from "./chunks/utils.js"; 10 + import { r as readable, w as writable } from "./chunks/index.js"; 11 + import { p as public_env, r as read_implementation, o as options, s as set_private_env, a as set_public_env, g as get_hooks, b as set_read_implementation } from "./chunks/internal.js"; 12 + import { parse, serialize } from "cookie"; 13 + import * as set_cookie_parser from "set-cookie-parser"; 14 + function with_resolvers() { 15 + let resolve2; 16 + let reject; 17 + const promise = new Promise((res, rej) => { 18 + resolve2 = res; 19 + reject = rej; 20 + }); 21 + return { promise, resolve: resolve2, reject }; 22 + } 23 + const NULL_BODY_STATUS = [101, 103, 204, 205, 304]; 24 + const IN_WEBCONTAINER = !!globalThis.process?.versions?.webcontainer; 25 + const SVELTE_KIT_ASSETS = "/_svelte_kit_assets"; 26 + const ENDPOINT_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD"]; 27 + const PAGE_METHODS = ["GET", "POST", "HEAD"]; 28 + function negotiate(accept, types) { 29 + const parts = []; 30 + accept.split(",").forEach((str, i) => { 31 + const match = /([^/ \t]+)\/([^; \t]+)[ \t]*(?:;[ \t]*q=([0-9.]+))?/.exec(str); 32 + if (match) { 33 + const [, type, subtype, q = "1"] = match; 34 + parts.push({ type, subtype, q: +q, i }); 35 + } 36 + }); 37 + parts.sort((a, b) => { 38 + if (a.q !== b.q) { 39 + return b.q - a.q; 40 + } 41 + if (a.subtype === "*" !== (b.subtype === "*")) { 42 + return a.subtype === "*" ? 1 : -1; 43 + } 44 + if (a.type === "*" !== (b.type === "*")) { 45 + return a.type === "*" ? 1 : -1; 46 + } 47 + return a.i - b.i; 48 + }); 49 + let accepted; 50 + let min_priority = Infinity; 51 + for (const mimetype of types) { 52 + const [type, subtype] = mimetype.split("/"); 53 + const priority = parts.findIndex( 54 + (part) => (part.type === type || part.type === "*") && (part.subtype === subtype || part.subtype === "*") 55 + ); 56 + if (priority !== -1 && priority < min_priority) { 57 + accepted = mimetype; 58 + min_priority = priority; 59 + } 60 + } 61 + return accepted; 62 + } 63 + function is_content_type(request, ...types) { 64 + const type = request.headers.get("content-type")?.split(";", 1)[0].trim() ?? ""; 65 + return types.includes(type.toLowerCase()); 66 + } 67 + function is_form_content_type(request) { 68 + return is_content_type( 69 + request, 70 + "application/x-www-form-urlencoded", 71 + "multipart/form-data", 72 + "text/plain", 73 + BINARY_FORM_CONTENT_TYPE 74 + ); 75 + } 76 + function coalesce_to_error(err) { 77 + return err instanceof Error || err && /** @type {any} */ 78 + err.name && /** @type {any} */ 79 + err.message ? ( 80 + /** @type {Error} */ 81 + err 82 + ) : new Error(JSON.stringify(err)); 83 + } 84 + function normalize_error(error2) { 85 + return ( 86 + /** @type {import('../exports/internal/index.js').Redirect | HttpError | SvelteKitError | Error} */ 87 + error2 88 + ); 89 + } 90 + function get_status(error2) { 91 + return error2 instanceof HttpError || error2 instanceof SvelteKitError ? error2.status : 500; 92 + } 93 + function get_message(error2) { 94 + return error2 instanceof SvelteKitError ? error2.text : "Internal Error"; 95 + } 96 + const escape_html_attr_dict = { 97 + "&": "&amp;", 98 + '"': "&quot;" 99 + // Svelte also escapes < because the escape function could be called inside a `noscript` there 100 + // https://github.com/sveltejs/svelte/security/advisories/GHSA-8266-84wp-wv5c 101 + // However, that doesn't apply in SvelteKit 102 + }; 103 + const escape_html_dict = { 104 + "&": "&amp;", 105 + "<": "&lt;" 106 + }; 107 + const surrogates = ( 108 + // high surrogate without paired low surrogate 109 + "[\\ud800-\\udbff](?![\\udc00-\\udfff])|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\udc00-\\udfff]" 110 + ); 111 + const escape_html_attr_regex = new RegExp( 112 + `[${Object.keys(escape_html_attr_dict).join("")}]|` + surrogates, 113 + "g" 114 + ); 115 + const escape_html_regex = new RegExp( 116 + `[${Object.keys(escape_html_dict).join("")}]|` + surrogates, 117 + "g" 118 + ); 119 + function escape_html(str, is_attr) { 120 + const dict = is_attr ? escape_html_attr_dict : escape_html_dict; 121 + const escaped_str = str.replace(is_attr ? escape_html_attr_regex : escape_html_regex, (match) => { 122 + if (match.length === 2) { 123 + return match; 124 + } 125 + return dict[match] ?? `&#${match.charCodeAt(0)};`; 126 + }); 127 + return escaped_str; 128 + } 129 + function method_not_allowed(mod, method) { 130 + return text(`${method} method not allowed`, { 131 + status: 405, 132 + headers: { 133 + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 134 + // "The server must generate an Allow header field in a 405 status code response" 135 + allow: allowed_methods(mod).join(", ") 136 + } 137 + }); 138 + } 139 + function allowed_methods(mod) { 140 + const allowed = ENDPOINT_METHODS.filter((method) => method in mod); 141 + if ("GET" in mod && !("HEAD" in mod)) { 142 + allowed.push("HEAD"); 143 + } 144 + return allowed; 145 + } 146 + function get_global_name(options2) { 147 + return `__sveltekit_${options2.version_hash}`; 148 + } 149 + function static_error_page(options2, status, message) { 150 + let page = options2.templates.error({ status, message: escape_html(message) }); 151 + return text(page, { 152 + headers: { "content-type": "text/html; charset=utf-8" }, 153 + status 154 + }); 155 + } 156 + async function handle_fatal_error(event, state, options2, error2) { 157 + error2 = error2 instanceof HttpError ? error2 : coalesce_to_error(error2); 158 + const status = get_status(error2); 159 + const body2 = await handle_error_and_jsonify(event, state, options2, error2); 160 + const type = negotiate(event.request.headers.get("accept") || "text/html", [ 161 + "application/json", 162 + "text/html" 163 + ]); 164 + if (event.isDataRequest || type === "application/json") { 165 + return json(body2, { 166 + status 167 + }); 168 + } 169 + return static_error_page(options2, status, body2.message); 170 + } 171 + async function handle_error_and_jsonify(event, state, options2, error2) { 172 + if (error2 instanceof HttpError) { 173 + return { message: "Unknown Error", ...error2.body }; 174 + } 175 + const status = get_status(error2); 176 + const message = get_message(error2); 177 + return await with_request_store( 178 + { event, state }, 179 + () => options2.hooks.handleError({ error: error2, event, status, message }) 180 + ) ?? { message }; 181 + } 182 + function redirect_response(status, location) { 183 + const response = new Response(void 0, { 184 + status, 185 + headers: { location } 186 + }); 187 + return response; 188 + } 189 + function clarify_devalue_error(event, error2) { 190 + if (error2.path) { 191 + return `Data returned from \`load\` while rendering ${event.route.id} is not serializable: ${error2.message} (${error2.path}). If you need to serialize/deserialize custom types, use transport hooks: https://svelte.dev/docs/kit/hooks#Universal-hooks-transport.`; 192 + } 193 + if (error2.path === "") { 194 + return `Data returned from \`load\` while rendering ${event.route.id} is not a plain object`; 195 + } 196 + return error2.message; 197 + } 198 + function serialize_uses(node) { 199 + const uses = {}; 200 + if (node.uses && node.uses.dependencies.size > 0) { 201 + uses.dependencies = Array.from(node.uses.dependencies); 202 + } 203 + if (node.uses && node.uses.search_params.size > 0) { 204 + uses.search_params = Array.from(node.uses.search_params); 205 + } 206 + if (node.uses && node.uses.params.size > 0) { 207 + uses.params = Array.from(node.uses.params); 208 + } 209 + if (node.uses?.parent) uses.parent = 1; 210 + if (node.uses?.route) uses.route = 1; 211 + if (node.uses?.url) uses.url = 1; 212 + return uses; 213 + } 214 + function has_prerendered_path(manifest, pathname) { 215 + return manifest._.prerendered_routes.has(pathname) || pathname.at(-1) === "/" && manifest._.prerendered_routes.has(pathname.slice(0, -1)); 216 + } 217 + function format_server_error(status, error2, event) { 218 + const formatted_text = ` 219 + \x1B[1;31m[${status}] ${event.request.method} ${event.url.pathname}\x1B[0m`; 220 + if (status === 404) { 221 + return formatted_text; 222 + } 223 + return `${formatted_text} 224 + ${error2.stack}`; 225 + } 226 + function get_node_type(node_id) { 227 + const parts = node_id?.split("/"); 228 + const filename = parts?.at(-1); 229 + if (!filename) return "unknown"; 230 + const dot_parts = filename.split("."); 231 + return dot_parts.slice(0, -1).join("."); 232 + } 233 + async function render_endpoint(event, event_state, mod, state) { 234 + const method = ( 235 + /** @type {import('types').HttpMethod} */ 236 + event.request.method 237 + ); 238 + let handler = mod[method] || mod.fallback; 239 + if (method === "HEAD" && !mod.HEAD && mod.GET) { 240 + handler = mod.GET; 241 + } 242 + if (!handler) { 243 + return method_not_allowed(mod, method); 244 + } 245 + const prerender = mod.prerender ?? state.prerender_default; 246 + if (prerender && (mod.POST || mod.PATCH || mod.PUT || mod.DELETE)) { 247 + throw new Error("Cannot prerender endpoints that have mutative methods"); 248 + } 249 + if (state.prerendering && !state.prerendering.inside_reroute && !prerender) { 250 + if (state.depth > 0) { 251 + throw new Error(`${event.route.id} is not prerenderable`); 252 + } else { 253 + return new Response(void 0, { status: 204 }); 254 + } 255 + } 256 + event_state.is_endpoint_request = true; 257 + try { 258 + const response = await with_request_store( 259 + { event, state: event_state }, 260 + () => handler( 261 + /** @type {import('@sveltejs/kit').RequestEvent<Record<string, any>>} */ 262 + event 263 + ) 264 + ); 265 + if (!(response instanceof Response)) { 266 + throw new Error( 267 + `Invalid response from route ${event.url.pathname}: handler should return a Response object` 268 + ); 269 + } 270 + if (state.prerendering && (!state.prerendering.inside_reroute || prerender)) { 271 + const cloned = new Response(response.clone().body, { 272 + status: response.status, 273 + statusText: response.statusText, 274 + headers: new Headers(response.headers) 275 + }); 276 + cloned.headers.set("x-sveltekit-prerender", String(prerender)); 277 + if (state.prerendering.inside_reroute && prerender) { 278 + cloned.headers.set( 279 + "x-sveltekit-routeid", 280 + encodeURI( 281 + /** @type {string} */ 282 + event.route.id 283 + ) 284 + ); 285 + state.prerendering.dependencies.set(event.url.pathname, { response: cloned, body: null }); 286 + } else { 287 + return cloned; 288 + } 289 + } 290 + return response; 291 + } catch (e) { 292 + if (e instanceof Redirect) { 293 + return new Response(void 0, { 294 + status: e.status, 295 + headers: { location: e.location } 296 + }); 297 + } 298 + throw e; 299 + } 300 + } 301 + function is_endpoint_request(event) { 302 + const { method, headers: headers2 } = event.request; 303 + if (ENDPOINT_METHODS.includes(method) && !PAGE_METHODS.includes(method)) { 304 + return true; 305 + } 306 + if (method === "POST" && headers2.get("x-sveltekit-action") === "true") return false; 307 + const accept = event.request.headers.get("accept") ?? "*/*"; 308 + return negotiate(accept, ["*", "text/html"]) !== "text/html"; 309 + } 310 + function compact(arr) { 311 + return arr.filter( 312 + /** @returns {val is NonNullable<T>} */ 313 + (val) => val != null 314 + ); 315 + } 316 + const DATA_SUFFIX = "/__data.json"; 317 + const HTML_DATA_SUFFIX = ".html__data.json"; 318 + function has_data_suffix(pathname) { 319 + return pathname.endsWith(DATA_SUFFIX) || pathname.endsWith(HTML_DATA_SUFFIX); 320 + } 321 + function add_data_suffix(pathname) { 322 + if (pathname.endsWith(".html")) return pathname.replace(/\.html$/, HTML_DATA_SUFFIX); 323 + return pathname.replace(/\/$/, "") + DATA_SUFFIX; 324 + } 325 + function strip_data_suffix(pathname) { 326 + if (pathname.endsWith(HTML_DATA_SUFFIX)) { 327 + return pathname.slice(0, -HTML_DATA_SUFFIX.length) + ".html"; 328 + } 329 + return pathname.slice(0, -DATA_SUFFIX.length); 330 + } 331 + const ROUTE_SUFFIX = "/__route.js"; 332 + function has_resolution_suffix(pathname) { 333 + return pathname.endsWith(ROUTE_SUFFIX); 334 + } 335 + function add_resolution_suffix(pathname) { 336 + return pathname.replace(/\/$/, "") + ROUTE_SUFFIX; 337 + } 338 + function strip_resolution_suffix(pathname) { 339 + return pathname.slice(0, -ROUTE_SUFFIX.length); 340 + } 341 + const noop_span = { 342 + spanContext() { 343 + return noop_span_context; 344 + }, 345 + setAttribute() { 346 + return this; 347 + }, 348 + setAttributes() { 349 + return this; 350 + }, 351 + addEvent() { 352 + return this; 353 + }, 354 + setStatus() { 355 + return this; 356 + }, 357 + updateName() { 358 + return this; 359 + }, 360 + end() { 361 + return this; 362 + }, 363 + isRecording() { 364 + return false; 365 + }, 366 + recordException() { 367 + return this; 368 + }, 369 + addLink() { 370 + return this; 371 + }, 372 + addLinks() { 373 + return this; 374 + } 375 + }; 376 + const noop_span_context = { 377 + traceId: "", 378 + spanId: "", 379 + traceFlags: 0 380 + }; 381 + async function record_span({ name, attributes, fn }) { 382 + { 383 + return fn(noop_span); 384 + } 385 + } 386 + function is_action_json_request(event) { 387 + const accept = negotiate(event.request.headers.get("accept") ?? "*/*", [ 388 + "application/json", 389 + "text/html" 390 + ]); 391 + return accept === "application/json" && event.request.method === "POST"; 392 + } 393 + async function handle_action_json_request(event, event_state, options2, server) { 394 + const actions = server?.actions; 395 + if (!actions) { 396 + const no_actions_error = new SvelteKitError( 397 + 405, 398 + "Method Not Allowed", 399 + `POST method not allowed. No form actions exist for ${"this page"}` 400 + ); 401 + return action_json( 402 + { 403 + type: "error", 404 + error: await handle_error_and_jsonify(event, event_state, options2, no_actions_error) 405 + }, 406 + { 407 + status: no_actions_error.status, 408 + headers: { 409 + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 410 + // "The server must generate an Allow header field in a 405 status code response" 411 + allow: "GET" 412 + } 413 + } 414 + ); 415 + } 416 + check_named_default_separate(actions); 417 + try { 418 + const data = await call_action(event, event_state, actions); 419 + if (DEV) ; 420 + if (data instanceof ActionFailure) { 421 + return action_json({ 422 + type: "failure", 423 + status: data.status, 424 + // @ts-expect-error we assign a string to what is supposed to be an object. That's ok 425 + // because we don't use the object outside, and this way we have better code navigation 426 + // through knowing where the related interface is used. 427 + data: stringify_action_response( 428 + data.data, 429 + /** @type {string} */ 430 + event.route.id, 431 + options2.hooks.transport 432 + ) 433 + }); 434 + } else { 435 + return action_json({ 436 + type: "success", 437 + status: data ? 200 : 204, 438 + // @ts-expect-error see comment above 439 + data: stringify_action_response( 440 + data, 441 + /** @type {string} */ 442 + event.route.id, 443 + options2.hooks.transport 444 + ) 445 + }); 446 + } 447 + } catch (e) { 448 + const err = normalize_error(e); 449 + if (err instanceof Redirect) { 450 + return action_json_redirect(err); 451 + } 452 + return action_json( 453 + { 454 + type: "error", 455 + error: await handle_error_and_jsonify( 456 + event, 457 + event_state, 458 + options2, 459 + check_incorrect_fail_use(err) 460 + ) 461 + }, 462 + { 463 + status: get_status(err) 464 + } 465 + ); 466 + } 467 + } 468 + function check_incorrect_fail_use(error2) { 469 + return error2 instanceof ActionFailure ? new Error('Cannot "throw fail()". Use "return fail()"') : error2; 470 + } 471 + function action_json_redirect(redirect) { 472 + return action_json({ 473 + type: "redirect", 474 + status: redirect.status, 475 + location: redirect.location 476 + }); 477 + } 478 + function action_json(data, init2) { 479 + return json(data, init2); 480 + } 481 + function is_action_request(event) { 482 + return event.request.method === "POST"; 483 + } 484 + async function handle_action_request(event, event_state, server) { 485 + const actions = server?.actions; 486 + if (!actions) { 487 + event.setHeaders({ 488 + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 489 + // "The server must generate an Allow header field in a 405 status code response" 490 + allow: "GET" 491 + }); 492 + return { 493 + type: "error", 494 + error: new SvelteKitError( 495 + 405, 496 + "Method Not Allowed", 497 + `POST method not allowed. No form actions exist for ${"this page"}` 498 + ) 499 + }; 500 + } 501 + check_named_default_separate(actions); 502 + try { 503 + const data = await call_action(event, event_state, actions); 504 + if (DEV) ; 505 + if (data instanceof ActionFailure) { 506 + return { 507 + type: "failure", 508 + status: data.status, 509 + data: data.data 510 + }; 511 + } else { 512 + return { 513 + type: "success", 514 + status: 200, 515 + // @ts-expect-error this will be removed upon serialization, so `undefined` is the same as omission 516 + data 517 + }; 518 + } 519 + } catch (e) { 520 + const err = normalize_error(e); 521 + if (err instanceof Redirect) { 522 + return { 523 + type: "redirect", 524 + status: err.status, 525 + location: err.location 526 + }; 527 + } 528 + return { 529 + type: "error", 530 + error: check_incorrect_fail_use(err) 531 + }; 532 + } 533 + } 534 + function check_named_default_separate(actions) { 535 + if (actions.default && Object.keys(actions).length > 1) { 536 + throw new Error( 537 + "When using named actions, the default action cannot be used. See the docs for more info: https://svelte.dev/docs/kit/form-actions#named-actions" 538 + ); 539 + } 540 + } 541 + async function call_action(event, event_state, actions) { 542 + const url = new URL(event.request.url); 543 + let name = "default"; 544 + for (const param of url.searchParams) { 545 + if (param[0].startsWith("/")) { 546 + name = param[0].slice(1); 547 + if (name === "default") { 548 + throw new Error('Cannot use reserved action name "default"'); 549 + } 550 + break; 551 + } 552 + } 553 + const action = actions[name]; 554 + if (!action) { 555 + throw new SvelteKitError(404, "Not Found", `No action with name '${name}' found`); 556 + } 557 + if (!is_form_content_type(event.request)) { 558 + throw new SvelteKitError( 559 + 415, 560 + "Unsupported Media Type", 561 + `Form actions expect form-encoded data — received ${event.request.headers.get( 562 + "content-type" 563 + )}` 564 + ); 565 + } 566 + return record_span({ 567 + name: "sveltekit.form_action", 568 + attributes: { 569 + "http.route": event.route.id || "unknown" 570 + }, 571 + fn: async (current2) => { 572 + const traced_event = merge_tracing(event, current2); 573 + const result = await with_request_store( 574 + { event: traced_event, state: event_state }, 575 + () => action(traced_event) 576 + ); 577 + if (result instanceof ActionFailure) { 578 + current2.setAttributes({ 579 + "sveltekit.form_action.result.type": "failure", 580 + "sveltekit.form_action.result.status": result.status 581 + }); 582 + } 583 + return result; 584 + } 585 + }); 586 + } 587 + function validate_action_return(data) { 588 + if (data instanceof Redirect) { 589 + throw new Error("Cannot `return redirect(...)` — use `redirect(...)` instead"); 590 + } 591 + if (data instanceof HttpError) { 592 + throw new Error("Cannot `return error(...)` — use `error(...)` or `return fail(...)` instead"); 593 + } 594 + } 595 + function uneval_action_response(data, route_id, transport) { 596 + const replacer = (thing) => { 597 + for (const key2 in transport) { 598 + const encoded = transport[key2].encode(thing); 599 + if (encoded) { 600 + return `app.decode('${key2}', ${devalue.uneval(encoded, replacer)})`; 601 + } 602 + } 603 + }; 604 + return try_serialize(data, (value) => devalue.uneval(value, replacer), route_id); 605 + } 606 + function stringify_action_response(data, route_id, transport) { 607 + const encoders = Object.fromEntries( 608 + Object.entries(transport).map(([key2, value]) => [key2, value.encode]) 609 + ); 610 + return try_serialize(data, (value) => devalue.stringify(value, encoders), route_id); 611 + } 612 + function try_serialize(data, fn, route_id) { 613 + try { 614 + return fn(data); 615 + } catch (e) { 616 + const error2 = ( 617 + /** @type {any} */ 618 + e 619 + ); 620 + if (data instanceof Response) { 621 + throw new Error( 622 + `Data returned from action inside ${route_id} is not serializable. Form actions need to return plain objects or fail(). E.g. return { success: true } or return fail(400, { message: "invalid" });` 623 + ); 624 + } 625 + if ("path" in error2) { 626 + let message = `Data returned from action inside ${route_id} is not serializable: ${error2.message}`; 627 + if (error2.path !== "") message += ` (data.${error2.path})`; 628 + throw new Error(message); 629 + } 630 + throw error2; 631 + } 632 + } 633 + function create_async_iterator() { 634 + let resolved = -1; 635 + let returned = -1; 636 + const deferred = []; 637 + return { 638 + iterate: (transform = (x) => x) => { 639 + return { 640 + [Symbol.asyncIterator]() { 641 + return { 642 + next: async () => { 643 + const next = deferred[++returned]; 644 + if (!next) return { value: null, done: true }; 645 + const value = await next.promise; 646 + return { value: transform(value), done: false }; 647 + } 648 + }; 649 + } 650 + }; 651 + }, 652 + add: (promise) => { 653 + deferred.push(with_resolvers()); 654 + void promise.then((value) => { 655 + deferred[++resolved].resolve(value); 656 + }); 657 + } 658 + }; 659 + } 660 + function server_data_serializer(event, event_state, options2) { 661 + let promise_id = 1; 662 + let max_nodes = -1; 663 + const iterator = create_async_iterator(); 664 + const global = get_global_name(options2); 665 + function get_replacer(index) { 666 + return function replacer(thing) { 667 + if (typeof thing?.then === "function") { 668 + const id = promise_id++; 669 + const promise = thing.then( 670 + /** @param {any} data */ 671 + (data) => ({ data }) 672 + ).catch( 673 + /** @param {any} error */ 674 + async (error2) => ({ 675 + error: await handle_error_and_jsonify(event, event_state, options2, error2) 676 + }) 677 + ).then( 678 + /** 679 + * @param {{data: any; error: any}} result 680 + */ 681 + async ({ data, error: error2 }) => { 682 + let str; 683 + try { 684 + str = devalue.uneval(error2 ? [, error2] : [data], replacer); 685 + } catch { 686 + error2 = await handle_error_and_jsonify( 687 + event, 688 + event_state, 689 + options2, 690 + new Error(`Failed to serialize promise while rendering ${event.route.id}`) 691 + ); 692 + data = void 0; 693 + str = devalue.uneval([, error2], replacer); 694 + } 695 + return { 696 + index, 697 + str: `${global}.resolve(${id}, ${str.includes("app.decode") ? `(app) => ${str}` : `() => ${str}`})` 698 + }; 699 + } 700 + ); 701 + iterator.add(promise); 702 + return `${global}.defer(${id})`; 703 + } else { 704 + for (const key2 in options2.hooks.transport) { 705 + const encoded = options2.hooks.transport[key2].encode(thing); 706 + if (encoded) { 707 + return `app.decode('${key2}', ${devalue.uneval(encoded, replacer)})`; 708 + } 709 + } 710 + } 711 + }; 712 + } 713 + const strings = ( 714 + /** @type {string[]} */ 715 + [] 716 + ); 717 + return { 718 + set_max_nodes(i) { 719 + max_nodes = i; 720 + }, 721 + add_node(i, node) { 722 + try { 723 + if (!node) { 724 + strings[i] = "null"; 725 + return; 726 + } 727 + const payload = { type: "data", data: node.data, uses: serialize_uses(node) }; 728 + if (node.slash) payload.slash = node.slash; 729 + strings[i] = devalue.uneval(payload, get_replacer(i)); 730 + } catch (e) { 731 + e.path = e.path.slice(1); 732 + throw new Error(clarify_devalue_error( 733 + event, 734 + /** @type {any} */ 735 + e 736 + )); 737 + } 738 + }, 739 + get_data(csp) { 740 + const open = `<script${csp.script_needs_nonce ? ` nonce="${csp.nonce}"` : ""}>`; 741 + const close = `<\/script> 742 + `; 743 + return { 744 + data: `[${compact(max_nodes > -1 ? strings.slice(0, max_nodes) : strings).join(",")}]`, 745 + chunks: promise_id > 1 ? iterator.iterate(({ index, str }) => { 746 + if (max_nodes > -1 && index >= max_nodes) { 747 + return ""; 748 + } 749 + return open + str + close; 750 + }) : null 751 + }; 752 + } 753 + }; 754 + } 755 + function server_data_serializer_json(event, event_state, options2) { 756 + let promise_id = 1; 757 + const iterator = create_async_iterator(); 758 + const reducers = { 759 + ...Object.fromEntries( 760 + Object.entries(options2.hooks.transport).map(([key2, value]) => [key2, value.encode]) 761 + ), 762 + /** @param {any} thing */ 763 + Promise: (thing) => { 764 + if (typeof thing?.then !== "function") { 765 + return; 766 + } 767 + const id = promise_id++; 768 + let key2 = "data"; 769 + const promise = thing.catch( 770 + /** @param {any} e */ 771 + async (e) => { 772 + key2 = "error"; 773 + return handle_error_and_jsonify( 774 + event, 775 + event_state, 776 + options2, 777 + /** @type {any} */ 778 + e 779 + ); 780 + } 781 + ).then( 782 + /** @param {any} value */ 783 + async (value) => { 784 + let str; 785 + try { 786 + str = devalue.stringify(value, reducers); 787 + } catch { 788 + const error2 = await handle_error_and_jsonify( 789 + event, 790 + event_state, 791 + options2, 792 + new Error(`Failed to serialize promise while rendering ${event.route.id}`) 793 + ); 794 + key2 = "error"; 795 + str = devalue.stringify(error2, reducers); 796 + } 797 + return `{"type":"chunk","id":${id},"${key2}":${str}} 798 + `; 799 + } 800 + ); 801 + iterator.add(promise); 802 + return id; 803 + } 804 + }; 805 + const strings = ( 806 + /** @type {string[]} */ 807 + [] 808 + ); 809 + return { 810 + add_node(i, node) { 811 + try { 812 + if (!node) { 813 + strings[i] = "null"; 814 + return; 815 + } 816 + if (node.type === "error" || node.type === "skip") { 817 + strings[i] = JSON.stringify(node); 818 + return; 819 + } 820 + strings[i] = `{"type":"data","data":${devalue.stringify(node.data, reducers)},"uses":${JSON.stringify( 821 + serialize_uses(node) 822 + )}${node.slash ? `,"slash":${JSON.stringify(node.slash)}` : ""}}`; 823 + } catch (e) { 824 + e.path = "data" + e.path; 825 + throw new Error(clarify_devalue_error( 826 + event, 827 + /** @type {any} */ 828 + e 829 + )); 830 + } 831 + }, 832 + get_data() { 833 + return { 834 + data: `{"type":"data","nodes":[${strings.join(",")}]} 835 + `, 836 + chunks: promise_id > 1 ? iterator.iterate() : null 837 + }; 838 + } 839 + }; 840 + } 841 + async function load_server_data({ event, event_state, state, node, parent }) { 842 + if (!node?.server) return null; 843 + let is_tracking = true; 844 + const uses = { 845 + dependencies: /* @__PURE__ */ new Set(), 846 + params: /* @__PURE__ */ new Set(), 847 + parent: false, 848 + route: false, 849 + url: false, 850 + search_params: /* @__PURE__ */ new Set() 851 + }; 852 + const load = node.server.load; 853 + const slash = node.server.trailingSlash; 854 + if (!load) { 855 + return { type: "data", data: null, uses, slash }; 856 + } 857 + const url = make_trackable( 858 + event.url, 859 + () => { 860 + if (is_tracking) { 861 + uses.url = true; 862 + } 863 + }, 864 + (param) => { 865 + if (is_tracking) { 866 + uses.search_params.add(param); 867 + } 868 + } 869 + ); 870 + if (state.prerendering) { 871 + disable_search(url); 872 + } 873 + const result = await record_span({ 874 + name: "sveltekit.load", 875 + attributes: { 876 + "sveltekit.load.node_id": node.server_id || "unknown", 877 + "sveltekit.load.node_type": get_node_type(node.server_id), 878 + "http.route": event.route.id || "unknown" 879 + }, 880 + fn: async (current2) => { 881 + const traced_event = merge_tracing(event, current2); 882 + const result2 = await with_request_store( 883 + { event: traced_event, state: event_state }, 884 + () => load.call(null, { 885 + ...traced_event, 886 + fetch: (info, init2) => { 887 + new URL(info instanceof Request ? info.url : info, event.url); 888 + return event.fetch(info, init2); 889 + }, 890 + /** @param {string[]} deps */ 891 + depends: (...deps) => { 892 + for (const dep of deps) { 893 + const { href } = new URL(dep, event.url); 894 + uses.dependencies.add(href); 895 + } 896 + }, 897 + params: new Proxy(event.params, { 898 + get: (target, key2) => { 899 + if (is_tracking) { 900 + uses.params.add(key2); 901 + } 902 + return target[ 903 + /** @type {string} */ 904 + key2 905 + ]; 906 + } 907 + }), 908 + parent: async () => { 909 + if (is_tracking) { 910 + uses.parent = true; 911 + } 912 + return parent(); 913 + }, 914 + route: new Proxy(event.route, { 915 + get: (target, key2) => { 916 + if (is_tracking) { 917 + uses.route = true; 918 + } 919 + return target[ 920 + /** @type {'id'} */ 921 + key2 922 + ]; 923 + } 924 + }), 925 + url, 926 + untrack(fn) { 927 + is_tracking = false; 928 + try { 929 + return fn(); 930 + } finally { 931 + is_tracking = true; 932 + } 933 + } 934 + }) 935 + ); 936 + return result2; 937 + } 938 + }); 939 + return { 940 + type: "data", 941 + data: result ?? null, 942 + uses, 943 + slash 944 + }; 945 + } 946 + async function load_data({ 947 + event, 948 + event_state, 949 + fetched, 950 + node, 951 + parent, 952 + server_data_promise, 953 + state, 954 + resolve_opts, 955 + csr 956 + }) { 957 + const server_data_node = await server_data_promise; 958 + const load = node?.universal?.load; 959 + if (!load) { 960 + return server_data_node?.data ?? null; 961 + } 962 + const result = await record_span({ 963 + name: "sveltekit.load", 964 + attributes: { 965 + "sveltekit.load.node_id": node.universal_id || "unknown", 966 + "sveltekit.load.node_type": get_node_type(node.universal_id), 967 + "http.route": event.route.id || "unknown" 968 + }, 969 + fn: async (current2) => { 970 + const traced_event = merge_tracing(event, current2); 971 + return await with_request_store( 972 + { event: traced_event, state: event_state }, 973 + () => load.call(null, { 974 + url: event.url, 975 + params: event.params, 976 + data: server_data_node?.data ?? null, 977 + route: event.route, 978 + fetch: create_universal_fetch(event, state, fetched, csr, resolve_opts), 979 + setHeaders: event.setHeaders, 980 + depends: () => { 981 + }, 982 + parent, 983 + untrack: (fn) => fn(), 984 + tracing: traced_event.tracing 985 + }) 986 + ); 987 + } 988 + }); 989 + return result ?? null; 990 + } 991 + function create_universal_fetch(event, state, fetched, csr, resolve_opts) { 992 + const universal_fetch = async (input, init2) => { 993 + const cloned_body = input instanceof Request && input.body ? input.clone().body : null; 994 + const cloned_headers = input instanceof Request && [...input.headers].length ? new Headers(input.headers) : init2?.headers; 995 + let response = await event.fetch(input, init2); 996 + const url = new URL(input instanceof Request ? input.url : input, event.url); 997 + const same_origin = url.origin === event.url.origin; 998 + let dependency; 999 + if (same_origin) { 1000 + if (state.prerendering) { 1001 + dependency = { response, body: null }; 1002 + state.prerendering.dependencies.set(url.pathname, dependency); 1003 + } 1004 + } else if (url.protocol === "https:" || url.protocol === "http:") { 1005 + const mode = input instanceof Request ? input.mode : init2?.mode ?? "cors"; 1006 + if (mode === "no-cors") { 1007 + response = new Response("", { 1008 + status: response.status, 1009 + statusText: response.statusText, 1010 + headers: response.headers 1011 + }); 1012 + } else { 1013 + const acao = response.headers.get("access-control-allow-origin"); 1014 + if (!acao || acao !== event.url.origin && acao !== "*") { 1015 + throw new Error( 1016 + `CORS error: ${acao ? "Incorrect" : "No"} 'Access-Control-Allow-Origin' header is present on the requested resource` 1017 + ); 1018 + } 1019 + } 1020 + } 1021 + let teed_body; 1022 + const proxy = new Proxy(response, { 1023 + get(response2, key2, receiver) { 1024 + async function push_fetched(body2, is_b64) { 1025 + const status_number = Number(response2.status); 1026 + if (isNaN(status_number)) { 1027 + throw new Error( 1028 + `response.status is not a number. value: "${response2.status}" type: ${typeof response2.status}` 1029 + ); 1030 + } 1031 + fetched.push({ 1032 + url: same_origin ? url.href.slice(event.url.origin.length) : url.href, 1033 + method: event.request.method, 1034 + request_body: ( 1035 + /** @type {string | ArrayBufferView | undefined} */ 1036 + input instanceof Request && cloned_body ? await stream_to_string(cloned_body) : init2?.body 1037 + ), 1038 + request_headers: cloned_headers, 1039 + response_body: body2, 1040 + response: response2, 1041 + is_b64 1042 + }); 1043 + } 1044 + if (key2 === "body") { 1045 + if (response2.body === null) { 1046 + return null; 1047 + } 1048 + if (teed_body) { 1049 + return teed_body; 1050 + } 1051 + const [a, b] = response2.body.tee(); 1052 + void (async () => { 1053 + let result = new Uint8Array(); 1054 + for await (const chunk of a) { 1055 + const combined = new Uint8Array(result.length + chunk.length); 1056 + combined.set(result, 0); 1057 + combined.set(chunk, result.length); 1058 + result = combined; 1059 + } 1060 + if (dependency) { 1061 + dependency.body = new Uint8Array(result); 1062 + } 1063 + void push_fetched(base64_encode(result), true); 1064 + })(); 1065 + return teed_body = b; 1066 + } 1067 + if (key2 === "arrayBuffer") { 1068 + return async () => { 1069 + const buffer = await response2.arrayBuffer(); 1070 + const bytes = new Uint8Array(buffer); 1071 + if (dependency) { 1072 + dependency.body = bytes; 1073 + } 1074 + if (buffer instanceof ArrayBuffer) { 1075 + await push_fetched(base64_encode(bytes), true); 1076 + } 1077 + return buffer; 1078 + }; 1079 + } 1080 + async function text2() { 1081 + const body2 = await response2.text(); 1082 + if (body2 === "" && NULL_BODY_STATUS.includes(response2.status)) { 1083 + await push_fetched(void 0, false); 1084 + return void 0; 1085 + } 1086 + if (!body2 || typeof body2 === "string") { 1087 + await push_fetched(body2, false); 1088 + } 1089 + if (dependency) { 1090 + dependency.body = body2; 1091 + } 1092 + return body2; 1093 + } 1094 + if (key2 === "text") { 1095 + return text2; 1096 + } 1097 + if (key2 === "json") { 1098 + return async () => { 1099 + const body2 = await text2(); 1100 + return body2 ? JSON.parse(body2) : void 0; 1101 + }; 1102 + } 1103 + const value = Reflect.get(response2, key2, response2); 1104 + if (value instanceof Function) { 1105 + return Object.defineProperties( 1106 + /** 1107 + * @this {any} 1108 + */ 1109 + function() { 1110 + return Reflect.apply(value, this === receiver ? response2 : this, arguments); 1111 + }, 1112 + { 1113 + name: { value: value.name }, 1114 + length: { value: value.length } 1115 + } 1116 + ); 1117 + } 1118 + return value; 1119 + } 1120 + }); 1121 + if (csr) { 1122 + const get = response.headers.get; 1123 + response.headers.get = (key2) => { 1124 + const lower = key2.toLowerCase(); 1125 + const value = get.call(response.headers, lower); 1126 + if (value && !lower.startsWith("x-sveltekit-")) { 1127 + const included = resolve_opts.filterSerializedResponseHeaders(lower, value); 1128 + if (!included) { 1129 + throw new Error( 1130 + `Failed to get response header "${lower}" — it must be included by the \`filterSerializedResponseHeaders\` option: https://svelte.dev/docs/kit/hooks#Server-hooks-handle (at ${event.route.id})` 1131 + ); 1132 + } 1133 + } 1134 + return value; 1135 + }; 1136 + } 1137 + return proxy; 1138 + }; 1139 + return (input, init2) => { 1140 + const response = universal_fetch(input, init2); 1141 + response.catch(() => { 1142 + }); 1143 + return response; 1144 + }; 1145 + } 1146 + async function stream_to_string(stream) { 1147 + let result = ""; 1148 + const reader = stream.getReader(); 1149 + while (true) { 1150 + const { done, value } = await reader.read(); 1151 + if (done) { 1152 + break; 1153 + } 1154 + result += text_decoder.decode(value); 1155 + } 1156 + return result; 1157 + } 1158 + function hash(...values) { 1159 + let hash2 = 5381; 1160 + for (const value of values) { 1161 + if (typeof value === "string") { 1162 + let i = value.length; 1163 + while (i) hash2 = hash2 * 33 ^ value.charCodeAt(--i); 1164 + } else if (ArrayBuffer.isView(value)) { 1165 + const buffer = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); 1166 + let i = buffer.length; 1167 + while (i) hash2 = hash2 * 33 ^ buffer[--i]; 1168 + } else { 1169 + throw new TypeError("value must be a string or TypedArray"); 1170 + } 1171 + } 1172 + return (hash2 >>> 0).toString(36); 1173 + } 1174 + const replacements = { 1175 + "<": "\\u003C", 1176 + "\u2028": "\\u2028", 1177 + "\u2029": "\\u2029" 1178 + }; 1179 + const pattern = new RegExp(`[${Object.keys(replacements).join("")}]`, "g"); 1180 + function serialize_data(fetched, filter, prerendering = false) { 1181 + const headers2 = {}; 1182 + let cache_control = null; 1183 + let age = null; 1184 + let varyAny = false; 1185 + for (const [key2, value] of fetched.response.headers) { 1186 + if (filter(key2, value)) { 1187 + headers2[key2] = value; 1188 + } 1189 + if (key2 === "cache-control") cache_control = value; 1190 + else if (key2 === "age") age = value; 1191 + else if (key2 === "vary" && value.trim() === "*") varyAny = true; 1192 + } 1193 + const payload = { 1194 + status: fetched.response.status, 1195 + statusText: fetched.response.statusText, 1196 + headers: headers2, 1197 + body: fetched.response_body 1198 + }; 1199 + const safe_payload = JSON.stringify(payload).replace(pattern, (match) => replacements[match]); 1200 + const attrs = [ 1201 + 'type="application/json"', 1202 + "data-sveltekit-fetched", 1203 + `data-url="${escape_html(fetched.url, true)}"` 1204 + ]; 1205 + if (fetched.is_b64) { 1206 + attrs.push("data-b64"); 1207 + } 1208 + if (fetched.request_headers || fetched.request_body) { 1209 + const values = []; 1210 + if (fetched.request_headers) { 1211 + values.push([...new Headers(fetched.request_headers)].join(",")); 1212 + } 1213 + if (fetched.request_body) { 1214 + values.push(fetched.request_body); 1215 + } 1216 + attrs.push(`data-hash="${hash(...values)}"`); 1217 + } 1218 + if (!prerendering && fetched.method === "GET" && cache_control && !varyAny) { 1219 + const match = /s-maxage=(\d+)/g.exec(cache_control) ?? /max-age=(\d+)/g.exec(cache_control); 1220 + if (match) { 1221 + const ttl = +match[1] - +(age ?? "0"); 1222 + attrs.push(`data-ttl="${ttl}"`); 1223 + } 1224 + } 1225 + return `<script ${attrs.join(" ")}>${safe_payload}<\/script>`; 1226 + } 1227 + const s = JSON.stringify; 1228 + function sha256(data) { 1229 + if (!key[0]) precompute(); 1230 + const out = init.slice(0); 1231 + const array2 = encode(data); 1232 + for (let i = 0; i < array2.length; i += 16) { 1233 + const w = array2.subarray(i, i + 16); 1234 + let tmp; 1235 + let a; 1236 + let b; 1237 + let out0 = out[0]; 1238 + let out1 = out[1]; 1239 + let out2 = out[2]; 1240 + let out3 = out[3]; 1241 + let out4 = out[4]; 1242 + let out5 = out[5]; 1243 + let out6 = out[6]; 1244 + let out7 = out[7]; 1245 + for (let i2 = 0; i2 < 64; i2++) { 1246 + if (i2 < 16) { 1247 + tmp = w[i2]; 1248 + } else { 1249 + a = w[i2 + 1 & 15]; 1250 + b = w[i2 + 14 & 15]; 1251 + tmp = w[i2 & 15] = (a >>> 7 ^ a >>> 18 ^ a >>> 3 ^ a << 25 ^ a << 14) + (b >>> 17 ^ b >>> 19 ^ b >>> 10 ^ b << 15 ^ b << 13) + w[i2 & 15] + w[i2 + 9 & 15] | 0; 1252 + } 1253 + tmp = tmp + out7 + (out4 >>> 6 ^ out4 >>> 11 ^ out4 >>> 25 ^ out4 << 26 ^ out4 << 21 ^ out4 << 7) + (out6 ^ out4 & (out5 ^ out6)) + key[i2]; 1254 + out7 = out6; 1255 + out6 = out5; 1256 + out5 = out4; 1257 + out4 = out3 + tmp | 0; 1258 + out3 = out2; 1259 + out2 = out1; 1260 + out1 = out0; 1261 + out0 = tmp + (out1 & out2 ^ out3 & (out1 ^ out2)) + (out1 >>> 2 ^ out1 >>> 13 ^ out1 >>> 22 ^ out1 << 30 ^ out1 << 19 ^ out1 << 10) | 0; 1262 + } 1263 + out[0] = out[0] + out0 | 0; 1264 + out[1] = out[1] + out1 | 0; 1265 + out[2] = out[2] + out2 | 0; 1266 + out[3] = out[3] + out3 | 0; 1267 + out[4] = out[4] + out4 | 0; 1268 + out[5] = out[5] + out5 | 0; 1269 + out[6] = out[6] + out6 | 0; 1270 + out[7] = out[7] + out7 | 0; 1271 + } 1272 + const bytes = new Uint8Array(out.buffer); 1273 + reverse_endianness(bytes); 1274 + return btoa(String.fromCharCode(...bytes)); 1275 + } 1276 + const init = new Uint32Array(8); 1277 + const key = new Uint32Array(64); 1278 + function precompute() { 1279 + function frac(x) { 1280 + return (x - Math.floor(x)) * 4294967296; 1281 + } 1282 + let prime = 2; 1283 + for (let i = 0; i < 64; prime++) { 1284 + let is_prime = true; 1285 + for (let factor = 2; factor * factor <= prime; factor++) { 1286 + if (prime % factor === 0) { 1287 + is_prime = false; 1288 + break; 1289 + } 1290 + } 1291 + if (is_prime) { 1292 + if (i < 8) { 1293 + init[i] = frac(prime ** (1 / 2)); 1294 + } 1295 + key[i] = frac(prime ** (1 / 3)); 1296 + i++; 1297 + } 1298 + } 1299 + } 1300 + function reverse_endianness(bytes) { 1301 + for (let i = 0; i < bytes.length; i += 4) { 1302 + const a = bytes[i + 0]; 1303 + const b = bytes[i + 1]; 1304 + const c = bytes[i + 2]; 1305 + const d = bytes[i + 3]; 1306 + bytes[i + 0] = d; 1307 + bytes[i + 1] = c; 1308 + bytes[i + 2] = b; 1309 + bytes[i + 3] = a; 1310 + } 1311 + } 1312 + function encode(str) { 1313 + const encoded = text_encoder.encode(str); 1314 + const length = encoded.length * 8; 1315 + const size = 512 * Math.ceil((length + 65) / 512); 1316 + const bytes = new Uint8Array(size / 8); 1317 + bytes.set(encoded); 1318 + bytes[encoded.length] = 128; 1319 + reverse_endianness(bytes); 1320 + const words = new Uint32Array(bytes.buffer); 1321 + words[words.length - 2] = Math.floor(length / 4294967296); 1322 + words[words.length - 1] = length; 1323 + return words; 1324 + } 1325 + const array = new Uint8Array(16); 1326 + function generate_nonce() { 1327 + crypto.getRandomValues(array); 1328 + return btoa(String.fromCharCode(...array)); 1329 + } 1330 + const quoted = /* @__PURE__ */ new Set([ 1331 + "self", 1332 + "unsafe-eval", 1333 + "unsafe-hashes", 1334 + "unsafe-inline", 1335 + "none", 1336 + "strict-dynamic", 1337 + "report-sample", 1338 + "wasm-unsafe-eval", 1339 + "script" 1340 + ]); 1341 + const crypto_pattern = /^(nonce|sha\d\d\d)-/; 1342 + class BaseProvider { 1343 + /** @type {boolean} */ 1344 + #use_hashes; 1345 + /** @type {boolean} */ 1346 + #script_needs_csp; 1347 + /** @type {boolean} */ 1348 + #script_src_needs_csp; 1349 + /** @type {boolean} */ 1350 + #script_src_elem_needs_csp; 1351 + /** @type {boolean} */ 1352 + #style_needs_csp; 1353 + /** @type {boolean} */ 1354 + #style_src_needs_csp; 1355 + /** @type {boolean} */ 1356 + #style_src_attr_needs_csp; 1357 + /** @type {boolean} */ 1358 + #style_src_elem_needs_csp; 1359 + /** @type {import('types').CspDirectives} */ 1360 + #directives; 1361 + /** @type {import('types').Csp.Source[]} */ 1362 + #script_src; 1363 + /** @type {import('types').Csp.Source[]} */ 1364 + #script_src_elem; 1365 + /** @type {import('types').Csp.Source[]} */ 1366 + #style_src; 1367 + /** @type {import('types').Csp.Source[]} */ 1368 + #style_src_attr; 1369 + /** @type {import('types').Csp.Source[]} */ 1370 + #style_src_elem; 1371 + /** @type {string} */ 1372 + #nonce; 1373 + /** 1374 + * @param {boolean} use_hashes 1375 + * @param {import('types').CspDirectives} directives 1376 + * @param {string} nonce 1377 + */ 1378 + constructor(use_hashes, directives, nonce) { 1379 + this.#use_hashes = use_hashes; 1380 + this.#directives = directives; 1381 + const d = this.#directives; 1382 + this.#script_src = []; 1383 + this.#script_src_elem = []; 1384 + this.#style_src = []; 1385 + this.#style_src_attr = []; 1386 + this.#style_src_elem = []; 1387 + const effective_script_src = d["script-src"] || d["default-src"]; 1388 + const script_src_elem = d["script-src-elem"]; 1389 + const effective_style_src = d["style-src"] || d["default-src"]; 1390 + const style_src_attr = d["style-src-attr"]; 1391 + const style_src_elem = d["style-src-elem"]; 1392 + const needs_csp = (directive) => !!directive && !directive.some((value) => value === "unsafe-inline"); 1393 + this.#script_src_needs_csp = needs_csp(effective_script_src); 1394 + this.#script_src_elem_needs_csp = needs_csp(script_src_elem); 1395 + this.#style_src_needs_csp = needs_csp(effective_style_src); 1396 + this.#style_src_attr_needs_csp = needs_csp(style_src_attr); 1397 + this.#style_src_elem_needs_csp = needs_csp(style_src_elem); 1398 + this.#script_needs_csp = this.#script_src_needs_csp || this.#script_src_elem_needs_csp; 1399 + this.#style_needs_csp = this.#style_src_needs_csp || this.#style_src_attr_needs_csp || this.#style_src_elem_needs_csp; 1400 + this.script_needs_nonce = this.#script_needs_csp && !this.#use_hashes; 1401 + this.style_needs_nonce = this.#style_needs_csp && !this.#use_hashes; 1402 + this.#nonce = nonce; 1403 + } 1404 + /** @param {string} content */ 1405 + add_script(content) { 1406 + if (!this.#script_needs_csp) return; 1407 + const source = this.#use_hashes ? `sha256-${sha256(content)}` : `nonce-${this.#nonce}`; 1408 + if (this.#script_src_needs_csp) { 1409 + this.#script_src.push(source); 1410 + } 1411 + if (this.#script_src_elem_needs_csp) { 1412 + this.#script_src_elem.push(source); 1413 + } 1414 + } 1415 + /** @param {string} content */ 1416 + add_style(content) { 1417 + if (!this.#style_needs_csp) return; 1418 + const source = this.#use_hashes ? `sha256-${sha256(content)}` : `nonce-${this.#nonce}`; 1419 + if (this.#style_src_needs_csp) { 1420 + this.#style_src.push(source); 1421 + } 1422 + if (this.#style_src_attr_needs_csp) { 1423 + this.#style_src_attr.push(source); 1424 + } 1425 + if (this.#style_src_elem_needs_csp) { 1426 + const sha256_empty_comment_hash = "sha256-9OlNO0DNEeaVzHL4RZwCLsBHA8WBQ8toBp/4F5XV2nc="; 1427 + const d = this.#directives; 1428 + if (d["style-src-elem"] && !d["style-src-elem"].includes(sha256_empty_comment_hash) && !this.#style_src_elem.includes(sha256_empty_comment_hash)) { 1429 + this.#style_src_elem.push(sha256_empty_comment_hash); 1430 + } 1431 + if (source !== sha256_empty_comment_hash) { 1432 + this.#style_src_elem.push(source); 1433 + } 1434 + } 1435 + } 1436 + /** 1437 + * @param {boolean} [is_meta] 1438 + */ 1439 + get_header(is_meta = false) { 1440 + const header = []; 1441 + const directives = { ...this.#directives }; 1442 + if (this.#style_src.length > 0) { 1443 + directives["style-src"] = [ 1444 + ...directives["style-src"] || directives["default-src"] || [], 1445 + ...this.#style_src 1446 + ]; 1447 + } 1448 + if (this.#style_src_attr.length > 0) { 1449 + directives["style-src-attr"] = [ 1450 + ...directives["style-src-attr"] || [], 1451 + ...this.#style_src_attr 1452 + ]; 1453 + } 1454 + if (this.#style_src_elem.length > 0) { 1455 + directives["style-src-elem"] = [ 1456 + ...directives["style-src-elem"] || [], 1457 + ...this.#style_src_elem 1458 + ]; 1459 + } 1460 + if (this.#script_src.length > 0) { 1461 + directives["script-src"] = [ 1462 + ...directives["script-src"] || directives["default-src"] || [], 1463 + ...this.#script_src 1464 + ]; 1465 + } 1466 + if (this.#script_src_elem.length > 0) { 1467 + directives["script-src-elem"] = [ 1468 + ...directives["script-src-elem"] || [], 1469 + ...this.#script_src_elem 1470 + ]; 1471 + } 1472 + for (const key2 in directives) { 1473 + if (is_meta && (key2 === "frame-ancestors" || key2 === "report-uri" || key2 === "sandbox")) { 1474 + continue; 1475 + } 1476 + const value = ( 1477 + /** @type {string[] | true} */ 1478 + directives[key2] 1479 + ); 1480 + if (!value) continue; 1481 + const directive = [key2]; 1482 + if (Array.isArray(value)) { 1483 + value.forEach((value2) => { 1484 + if (quoted.has(value2) || crypto_pattern.test(value2)) { 1485 + directive.push(`'${value2}'`); 1486 + } else { 1487 + directive.push(value2); 1488 + } 1489 + }); 1490 + } 1491 + header.push(directive.join(" ")); 1492 + } 1493 + return header.join("; "); 1494 + } 1495 + } 1496 + class CspProvider extends BaseProvider { 1497 + get_meta() { 1498 + const content = this.get_header(true); 1499 + if (!content) { 1500 + return; 1501 + } 1502 + return `<meta http-equiv="content-security-policy" content="${escape_html(content, true)}">`; 1503 + } 1504 + } 1505 + class CspReportOnlyProvider extends BaseProvider { 1506 + /** 1507 + * @param {boolean} use_hashes 1508 + * @param {import('types').CspDirectives} directives 1509 + * @param {string} nonce 1510 + */ 1511 + constructor(use_hashes, directives, nonce) { 1512 + super(use_hashes, directives, nonce); 1513 + if (Object.values(directives).filter((v) => !!v).length > 0) { 1514 + const has_report_to = directives["report-to"]?.length ?? 0 > 0; 1515 + const has_report_uri = directives["report-uri"]?.length ?? 0 > 0; 1516 + if (!has_report_to && !has_report_uri) { 1517 + throw Error( 1518 + "`content-security-policy-report-only` must be specified with either the `report-to` or `report-uri` directives, or both" 1519 + ); 1520 + } 1521 + } 1522 + } 1523 + } 1524 + class Csp { 1525 + /** @readonly */ 1526 + nonce = generate_nonce(); 1527 + /** @type {CspProvider} */ 1528 + csp_provider; 1529 + /** @type {CspReportOnlyProvider} */ 1530 + report_only_provider; 1531 + /** 1532 + * @param {import('./types.js').CspConfig} config 1533 + * @param {import('./types.js').CspOpts} opts 1534 + */ 1535 + constructor({ mode, directives, reportOnly }, { prerender }) { 1536 + const use_hashes = mode === "hash" || mode === "auto" && prerender; 1537 + this.csp_provider = new CspProvider(use_hashes, directives, this.nonce); 1538 + this.report_only_provider = new CspReportOnlyProvider(use_hashes, reportOnly, this.nonce); 1539 + } 1540 + get script_needs_nonce() { 1541 + return this.csp_provider.script_needs_nonce || this.report_only_provider.script_needs_nonce; 1542 + } 1543 + get style_needs_nonce() { 1544 + return this.csp_provider.style_needs_nonce || this.report_only_provider.style_needs_nonce; 1545 + } 1546 + /** @param {string} content */ 1547 + add_script(content) { 1548 + this.csp_provider.add_script(content); 1549 + this.report_only_provider.add_script(content); 1550 + } 1551 + /** @param {string} content */ 1552 + add_style(content) { 1553 + this.csp_provider.add_style(content); 1554 + this.report_only_provider.add_style(content); 1555 + } 1556 + } 1557 + function exec(match, params, matchers) { 1558 + const result = {}; 1559 + const values = match.slice(1); 1560 + const values_needing_match = values.filter((value) => value !== void 0); 1561 + let buffered = 0; 1562 + for (let i = 0; i < params.length; i += 1) { 1563 + const param = params[i]; 1564 + let value = values[i - buffered]; 1565 + if (param.chained && param.rest && buffered) { 1566 + value = values.slice(i - buffered, i + 1).filter((s2) => s2).join("/"); 1567 + buffered = 0; 1568 + } 1569 + if (value === void 0) { 1570 + if (param.rest) result[param.name] = ""; 1571 + continue; 1572 + } 1573 + if (!param.matcher || matchers[param.matcher](value)) { 1574 + result[param.name] = value; 1575 + const next_param = params[i + 1]; 1576 + const next_value = values[i + 1]; 1577 + if (next_param && !next_param.rest && next_param.optional && next_value && param.chained) { 1578 + buffered = 0; 1579 + } 1580 + if (!next_param && !next_value && Object.keys(result).length === values_needing_match.length) { 1581 + buffered = 0; 1582 + } 1583 + continue; 1584 + } 1585 + if (param.optional && param.chained) { 1586 + buffered++; 1587 + continue; 1588 + } 1589 + return; 1590 + } 1591 + if (buffered) return; 1592 + return result; 1593 + } 1594 + function generate_route_object(route, url, manifest) { 1595 + const { errors, layouts, leaf } = route; 1596 + const nodes = [...errors, ...layouts.map((l) => l?.[1]), leaf[1]].filter((n) => typeof n === "number").map((n) => `'${n}': () => ${create_client_import(manifest._.client.nodes?.[n], url)}`).join(",\n "); 1597 + return [ 1598 + `{ 1599 + id: ${s(route.id)}`, 1600 + `errors: ${s(route.errors)}`, 1601 + `layouts: ${s(route.layouts)}`, 1602 + `leaf: ${s(route.leaf)}`, 1603 + `nodes: { 1604 + ${nodes} 1605 + } 1606 + }` 1607 + ].join(",\n "); 1608 + } 1609 + function create_client_import(import_path, url) { 1610 + if (!import_path) return "Promise.resolve({})"; 1611 + if (import_path[0] === "/") { 1612 + return `import('${import_path}')`; 1613 + } 1614 + if (assets !== "") { 1615 + return `import('${assets}/${import_path}')`; 1616 + } 1617 + let path = get_relative_path(url.pathname, `${base}/${import_path}`); 1618 + if (path[0] !== ".") path = `./${path}`; 1619 + return `import('${path}')`; 1620 + } 1621 + async function resolve_route(resolved_path, url, manifest) { 1622 + if (!manifest._.client.routes) { 1623 + return text("Server-side route resolution disabled", { status: 400 }); 1624 + } 1625 + let route = null; 1626 + let params = {}; 1627 + const matchers = await manifest._.matchers(); 1628 + for (const candidate of manifest._.client.routes) { 1629 + const match = candidate.pattern.exec(resolved_path); 1630 + if (!match) continue; 1631 + const matched = exec(match, candidate.params, matchers); 1632 + if (matched) { 1633 + route = candidate; 1634 + params = decode_params(matched); 1635 + break; 1636 + } 1637 + } 1638 + return create_server_routing_response(route, params, url, manifest).response; 1639 + } 1640 + function create_server_routing_response(route, params, url, manifest) { 1641 + const headers2 = new Headers({ 1642 + "content-type": "application/javascript; charset=utf-8" 1643 + }); 1644 + if (route) { 1645 + const csr_route = generate_route_object(route, url, manifest); 1646 + const body2 = `${create_css_import(route, url, manifest)} 1647 + export const route = ${csr_route}; export const params = ${JSON.stringify(params)};`; 1648 + return { response: text(body2, { headers: headers2 }), body: body2 }; 1649 + } else { 1650 + return { response: text("", { headers: headers2 }), body: "" }; 1651 + } 1652 + } 1653 + function create_css_import(route, url, manifest) { 1654 + const { errors, layouts, leaf } = route; 1655 + let css = ""; 1656 + for (const node of [...errors, ...layouts.map((l) => l?.[1]), leaf[1]]) { 1657 + if (typeof node !== "number") continue; 1658 + const node_css = manifest._.client.css?.[node]; 1659 + for (const css_path of node_css ?? []) { 1660 + css += `'${assets || base}/${css_path}',`; 1661 + } 1662 + } 1663 + if (!css) return ""; 1664 + return `${create_client_import( 1665 + /** @type {string} */ 1666 + manifest._.client.start, 1667 + url 1668 + )}.then(x => x.load_css([${css}]));`; 1669 + } 1670 + const updated = { 1671 + ...readable(false), 1672 + check: () => false 1673 + }; 1674 + async function render_response({ 1675 + branch, 1676 + fetched, 1677 + options: options2, 1678 + manifest, 1679 + state, 1680 + page_config, 1681 + status, 1682 + error: error2 = null, 1683 + event, 1684 + event_state, 1685 + resolve_opts, 1686 + action_result, 1687 + data_serializer 1688 + }) { 1689 + if (state.prerendering) { 1690 + if (options2.csp.mode === "nonce") { 1691 + throw new Error('Cannot use prerendering if config.kit.csp.mode === "nonce"'); 1692 + } 1693 + if (options2.app_template_contains_nonce) { 1694 + throw new Error("Cannot use prerendering if page template contains %sveltekit.nonce%"); 1695 + } 1696 + } 1697 + const { client } = manifest._; 1698 + const modulepreloads = new Set(client.imports); 1699 + const stylesheets = new Set(client.stylesheets); 1700 + const fonts = new Set(client.fonts); 1701 + const link_headers = /* @__PURE__ */ new Set(); 1702 + const link_tags = /* @__PURE__ */ new Set(); 1703 + const inline_styles = /* @__PURE__ */ new Map(); 1704 + let rendered; 1705 + const form_value = action_result?.type === "success" || action_result?.type === "failure" ? action_result.data ?? null : null; 1706 + let base$1 = base; 1707 + let assets$1 = assets; 1708 + let base_expression = s(base); 1709 + { 1710 + if (!state.prerendering?.fallback) { 1711 + const segments = event.url.pathname.slice(base.length).split("/").slice(2); 1712 + base$1 = segments.map(() => "..").join("/") || "."; 1713 + base_expression = `new URL(${s(base$1)}, location).pathname.slice(0, -1)`; 1714 + if (!assets || assets[0] === "/" && assets !== SVELTE_KIT_ASSETS) { 1715 + assets$1 = base$1; 1716 + } 1717 + } else if (options2.hash_routing) { 1718 + base_expression = "new URL('.', location).pathname.slice(0, -1)"; 1719 + } 1720 + } 1721 + if (page_config.ssr) { 1722 + const props = { 1723 + stores: { 1724 + page: writable(null), 1725 + navigating: writable(null), 1726 + updated 1727 + }, 1728 + constructors: await Promise.all( 1729 + branch.map(({ node }) => { 1730 + if (!node.component) { 1731 + throw new Error(`Missing +page.svelte component for route ${event.route.id}`); 1732 + } 1733 + return node.component(); 1734 + }) 1735 + ), 1736 + form: form_value 1737 + }; 1738 + let data2 = {}; 1739 + for (let i = 0; i < branch.length; i += 1) { 1740 + data2 = { ...data2, ...branch[i].data }; 1741 + props[`data_${i}`] = data2; 1742 + } 1743 + props.page = { 1744 + error: error2, 1745 + params: ( 1746 + /** @type {Record<string, any>} */ 1747 + event.params 1748 + ), 1749 + route: event.route, 1750 + status, 1751 + url: event.url, 1752 + data: data2, 1753 + form: form_value, 1754 + state: {} 1755 + }; 1756 + const render_opts = { 1757 + context: /* @__PURE__ */ new Map([ 1758 + [ 1759 + "__request__", 1760 + { 1761 + page: props.page 1762 + } 1763 + ] 1764 + ]) 1765 + }; 1766 + const fetch2 = globalThis.fetch; 1767 + try { 1768 + if (DEV) ; 1769 + rendered = await with_request_store({ event, state: event_state }, async () => { 1770 + if (relative) override({ base: base$1, assets: assets$1 }); 1771 + const maybe_promise = options2.root.render(props, render_opts); 1772 + const rendered2 = options2.async && "then" in maybe_promise ? ( 1773 + /** @type {ReturnType<typeof options.root.render> & Promise<any>} */ 1774 + maybe_promise.then((r) => r) 1775 + ) : maybe_promise; 1776 + if (options2.async) { 1777 + reset(); 1778 + } 1779 + const { head: head2, html: html2, css } = options2.async ? await rendered2 : rendered2; 1780 + return { head: head2, html: html2, css }; 1781 + }); 1782 + } finally { 1783 + reset(); 1784 + } 1785 + for (const { node } of branch) { 1786 + for (const url of node.imports) modulepreloads.add(url); 1787 + for (const url of node.stylesheets) stylesheets.add(url); 1788 + for (const url of node.fonts) fonts.add(url); 1789 + if (node.inline_styles && !client.inline) { 1790 + Object.entries(await node.inline_styles()).forEach(([k, v]) => inline_styles.set(k, v)); 1791 + } 1792 + } 1793 + } else { 1794 + rendered = { head: "", html: "", css: { code: "", map: null } }; 1795 + } 1796 + let head = ""; 1797 + let body2 = rendered.html; 1798 + const csp = new Csp(options2.csp, { 1799 + prerender: !!state.prerendering 1800 + }); 1801 + const prefixed = (path) => { 1802 + if (path.startsWith("/")) { 1803 + return base + path; 1804 + } 1805 + return `${assets$1}/${path}`; 1806 + }; 1807 + const style = client.inline ? client.inline?.style : Array.from(inline_styles.values()).join("\n"); 1808 + if (style) { 1809 + const attributes = []; 1810 + if (csp.style_needs_nonce) attributes.push(` nonce="${csp.nonce}"`); 1811 + csp.add_style(style); 1812 + head += ` 1813 + <style${attributes.join("")}>${style}</style>`; 1814 + } 1815 + for (const dep of stylesheets) { 1816 + const path = prefixed(dep); 1817 + const attributes = ['rel="stylesheet"']; 1818 + if (inline_styles.has(dep)) { 1819 + attributes.push("disabled", 'media="(max-width: 0)"'); 1820 + } else { 1821 + if (resolve_opts.preload({ type: "css", path })) { 1822 + link_headers.add(`<${encodeURI(path)}>; rel="preload"; as="style"; nopush`); 1823 + } 1824 + } 1825 + head += ` 1826 + <link href="${path}" ${attributes.join(" ")}>`; 1827 + } 1828 + for (const dep of fonts) { 1829 + const path = prefixed(dep); 1830 + if (resolve_opts.preload({ type: "font", path })) { 1831 + const ext = dep.slice(dep.lastIndexOf(".") + 1); 1832 + link_tags.add(`<link rel="preload" as="font" type="font/${ext}" href="${path}" crossorigin>`); 1833 + link_headers.add( 1834 + `<${encodeURI(path)}>; rel="preload"; as="font"; type="font/${ext}"; crossorigin; nopush` 1835 + ); 1836 + } 1837 + } 1838 + const global = get_global_name(options2); 1839 + const { data, chunks } = data_serializer.get_data(csp); 1840 + if (page_config.ssr && page_config.csr) { 1841 + body2 += ` 1842 + ${fetched.map( 1843 + (item) => serialize_data(item, resolve_opts.filterSerializedResponseHeaders, !!state.prerendering) 1844 + ).join("\n ")}`; 1845 + } 1846 + if (page_config.csr) { 1847 + const route = manifest._.client.routes?.find((r) => r.id === event.route.id) ?? null; 1848 + if (client.uses_env_dynamic_public && state.prerendering) { 1849 + modulepreloads.add(`${app_dir}/env.js`); 1850 + } 1851 + if (!client.inline) { 1852 + const included_modulepreloads = Array.from(modulepreloads, (dep) => prefixed(dep)).filter( 1853 + (path) => resolve_opts.preload({ type: "js", path }) 1854 + ); 1855 + for (const path of included_modulepreloads) { 1856 + link_headers.add(`<${encodeURI(path)}>; rel="modulepreload"; nopush`); 1857 + if (options2.preload_strategy !== "modulepreload") { 1858 + head += ` 1859 + <link rel="preload" as="script" crossorigin="anonymous" href="${path}">`; 1860 + } else { 1861 + link_tags.add(`<link rel="modulepreload" href="${path}">`); 1862 + } 1863 + } 1864 + } 1865 + if (state.prerendering && link_tags.size > 0) { 1866 + head += Array.from(link_tags).map((tag) => ` 1867 + ${tag}`).join(""); 1868 + } 1869 + if (manifest._.client.routes && state.prerendering && !state.prerendering.fallback) { 1870 + const pathname = add_resolution_suffix(event.url.pathname); 1871 + state.prerendering.dependencies.set( 1872 + pathname, 1873 + create_server_routing_response(route, event.params, new URL(pathname, event.url), manifest) 1874 + ); 1875 + } 1876 + const blocks = []; 1877 + const load_env_eagerly = client.uses_env_dynamic_public && state.prerendering; 1878 + const properties = [`base: ${base_expression}`]; 1879 + if (assets) { 1880 + properties.push(`assets: ${s(assets)}`); 1881 + } 1882 + if (client.uses_env_dynamic_public) { 1883 + properties.push(`env: ${load_env_eagerly ? "null" : s(public_env)}`); 1884 + } 1885 + if (chunks) { 1886 + blocks.push("const deferred = new Map();"); 1887 + properties.push(`defer: (id) => new Promise((fulfil, reject) => { 1888 + deferred.set(id, { fulfil, reject }); 1889 + })`); 1890 + let app_declaration = ""; 1891 + if (Object.keys(options2.hooks.transport).length > 0) { 1892 + if (client.inline) { 1893 + app_declaration = `const app = __sveltekit_${options2.version_hash}.app.app;`; 1894 + } else if (client.app) { 1895 + app_declaration = `const app = await import(${s(prefixed(client.app))});`; 1896 + } else { 1897 + app_declaration = `const { app } = await import(${s(prefixed(client.start))});`; 1898 + } 1899 + } 1900 + const prelude = app_declaration ? `${app_declaration} 1901 + const [data, error] = fn(app);` : `const [data, error] = fn();`; 1902 + properties.push(`resolve: async (id, fn) => { 1903 + ${prelude} 1904 + 1905 + const try_to_resolve = () => { 1906 + if (!deferred.has(id)) { 1907 + setTimeout(try_to_resolve, 0); 1908 + return; 1909 + } 1910 + const { fulfil, reject } = deferred.get(id); 1911 + deferred.delete(id); 1912 + if (error) reject(error); 1913 + else fulfil(data); 1914 + } 1915 + try_to_resolve(); 1916 + }`); 1917 + } 1918 + blocks.push(`${global} = { 1919 + ${properties.join(",\n ")} 1920 + };`); 1921 + const args = ["element"]; 1922 + blocks.push("const element = document.currentScript.parentElement;"); 1923 + if (page_config.ssr) { 1924 + const serialized = { form: "null", error: "null" }; 1925 + if (form_value) { 1926 + serialized.form = uneval_action_response( 1927 + form_value, 1928 + /** @type {string} */ 1929 + event.route.id, 1930 + options2.hooks.transport 1931 + ); 1932 + } 1933 + if (error2) { 1934 + serialized.error = devalue.uneval(error2); 1935 + } 1936 + const hydrate = [ 1937 + `node_ids: [${branch.map(({ node }) => node.index).join(", ")}]`, 1938 + `data: ${data}`, 1939 + `form: ${serialized.form}`, 1940 + `error: ${serialized.error}` 1941 + ]; 1942 + if (status !== 200) { 1943 + hydrate.push(`status: ${status}`); 1944 + } 1945 + if (manifest._.client.routes) { 1946 + if (route) { 1947 + const stringified = generate_route_object(route, event.url, manifest).replaceAll( 1948 + "\n", 1949 + "\n " 1950 + ); 1951 + hydrate.push(`params: ${devalue.uneval(event.params)}`, `server_route: ${stringified}`); 1952 + } 1953 + } else if (options2.embedded) { 1954 + hydrate.push(`params: ${devalue.uneval(event.params)}`, `route: ${s(event.route)}`); 1955 + } 1956 + const indent = " ".repeat(load_env_eagerly ? 7 : 6); 1957 + args.push(`{ 1958 + ${indent} ${hydrate.join(`, 1959 + ${indent} `)} 1960 + ${indent}}`); 1961 + } 1962 + const { remote_data: remote_cache } = event_state; 1963 + let serialized_remote_data = ""; 1964 + if (remote_cache) { 1965 + const remote = {}; 1966 + for (const [info, cache] of remote_cache) { 1967 + if (!info.id) continue; 1968 + for (const key2 in cache) { 1969 + remote[create_remote_key(info.id, key2)] = await cache[key2]; 1970 + } 1971 + } 1972 + const replacer = (thing) => { 1973 + for (const key2 in options2.hooks.transport) { 1974 + const encoded = options2.hooks.transport[key2].encode(thing); 1975 + if (encoded) { 1976 + return `app.decode('${key2}', ${devalue.uneval(encoded, replacer)})`; 1977 + } 1978 + } 1979 + }; 1980 + serialized_remote_data = `${global}.data = ${devalue.uneval(remote, replacer)}; 1981 + 1982 + `; 1983 + } 1984 + const boot = client.inline ? `${client.inline.script} 1985 + 1986 + ${serialized_remote_data}${global}.app.start(${args.join(", ")});` : client.app ? `Promise.all([ 1987 + import(${s(prefixed(client.start))}), 1988 + import(${s(prefixed(client.app))}) 1989 + ]).then(([kit, app]) => { 1990 + ${serialized_remote_data}kit.start(app, ${args.join(", ")}); 1991 + });` : `import(${s(prefixed(client.start))}).then((app) => { 1992 + ${serialized_remote_data}app.start(${args.join(", ")}) 1993 + });`; 1994 + if (load_env_eagerly) { 1995 + blocks.push(`import(${s(`${base$1}/${app_dir}/env.js`)}).then(({ env }) => { 1996 + ${global}.env = env; 1997 + 1998 + ${boot.replace(/\n/g, "\n ")} 1999 + });`); 2000 + } else { 2001 + blocks.push(boot); 2002 + } 2003 + if (options2.service_worker) { 2004 + let opts = ""; 2005 + if (options2.service_worker_options != null) { 2006 + const service_worker_options = { ...options2.service_worker_options }; 2007 + opts = `, ${s(service_worker_options)}`; 2008 + } 2009 + blocks.push(`if ('serviceWorker' in navigator) { 2010 + addEventListener('load', function () { 2011 + navigator.serviceWorker.register('${prefixed("service-worker.js")}'${opts}); 2012 + }); 2013 + }`); 2014 + } 2015 + const init_app = ` 2016 + { 2017 + ${blocks.join("\n\n ")} 2018 + } 2019 + `; 2020 + csp.add_script(init_app); 2021 + body2 += ` 2022 + <script${csp.script_needs_nonce ? ` nonce="${csp.nonce}"` : ""}>${init_app}<\/script> 2023 + `; 2024 + } 2025 + const headers2 = new Headers({ 2026 + "x-sveltekit-page": "true", 2027 + "content-type": "text/html" 2028 + }); 2029 + if (state.prerendering) { 2030 + const http_equiv = []; 2031 + const csp_headers = csp.csp_provider.get_meta(); 2032 + if (csp_headers) { 2033 + http_equiv.push(csp_headers); 2034 + } 2035 + if (state.prerendering.cache) { 2036 + http_equiv.push(`<meta http-equiv="cache-control" content="${state.prerendering.cache}">`); 2037 + } 2038 + if (http_equiv.length > 0) { 2039 + head = http_equiv.join("\n") + head; 2040 + } 2041 + } else { 2042 + const csp_header = csp.csp_provider.get_header(); 2043 + if (csp_header) { 2044 + headers2.set("content-security-policy", csp_header); 2045 + } 2046 + const report_only_header = csp.report_only_provider.get_header(); 2047 + if (report_only_header) { 2048 + headers2.set("content-security-policy-report-only", report_only_header); 2049 + } 2050 + if (link_headers.size) { 2051 + headers2.set("link", Array.from(link_headers).join(", ")); 2052 + } 2053 + } 2054 + head += rendered.head; 2055 + const html = options2.templates.app({ 2056 + head, 2057 + body: body2, 2058 + assets: assets$1, 2059 + nonce: ( 2060 + /** @type {string} */ 2061 + csp.nonce 2062 + ), 2063 + env: public_env 2064 + }); 2065 + const transformed = await resolve_opts.transformPageChunk({ 2066 + html, 2067 + done: true 2068 + }) || ""; 2069 + if (!chunks) { 2070 + headers2.set("etag", `"${hash(transformed)}"`); 2071 + } 2072 + return !chunks ? text(transformed, { 2073 + status, 2074 + headers: headers2 2075 + }) : new Response( 2076 + new ReadableStream({ 2077 + async start(controller) { 2078 + controller.enqueue(text_encoder.encode(transformed + "\n")); 2079 + for await (const chunk of chunks) { 2080 + if (chunk.length) controller.enqueue(text_encoder.encode(chunk)); 2081 + } 2082 + controller.close(); 2083 + }, 2084 + type: "bytes" 2085 + }), 2086 + { 2087 + headers: headers2 2088 + } 2089 + ); 2090 + } 2091 + class PageNodes { 2092 + data; 2093 + /** 2094 + * @param {Array<import('types').SSRNode | undefined>} nodes 2095 + */ 2096 + constructor(nodes) { 2097 + this.data = nodes; 2098 + } 2099 + layouts() { 2100 + return this.data.slice(0, -1); 2101 + } 2102 + page() { 2103 + return this.data.at(-1); 2104 + } 2105 + validate() { 2106 + for (const layout of this.layouts()) { 2107 + if (layout) { 2108 + validate_layout_server_exports( 2109 + layout.server, 2110 + /** @type {string} */ 2111 + layout.server_id 2112 + ); 2113 + validate_layout_exports( 2114 + layout.universal, 2115 + /** @type {string} */ 2116 + layout.universal_id 2117 + ); 2118 + } 2119 + } 2120 + const page = this.page(); 2121 + if (page) { 2122 + validate_page_server_exports( 2123 + page.server, 2124 + /** @type {string} */ 2125 + page.server_id 2126 + ); 2127 + validate_page_exports( 2128 + page.universal, 2129 + /** @type {string} */ 2130 + page.universal_id 2131 + ); 2132 + } 2133 + } 2134 + /** 2135 + * @template {'prerender' | 'ssr' | 'csr' | 'trailingSlash'} Option 2136 + * @param {Option} option 2137 + * @returns {Value | undefined} 2138 + */ 2139 + #get_option(option) { 2140 + return this.data.reduce( 2141 + (value, node) => { 2142 + return node?.universal?.[option] ?? node?.server?.[option] ?? value; 2143 + }, 2144 + /** @type {Value | undefined} */ 2145 + void 0 2146 + ); 2147 + } 2148 + csr() { 2149 + return this.#get_option("csr") ?? true; 2150 + } 2151 + ssr() { 2152 + return this.#get_option("ssr") ?? true; 2153 + } 2154 + prerender() { 2155 + return this.#get_option("prerender") ?? false; 2156 + } 2157 + trailing_slash() { 2158 + return this.#get_option("trailingSlash") ?? "never"; 2159 + } 2160 + get_config() { 2161 + let current2 = {}; 2162 + for (const node of this.data) { 2163 + if (!node?.universal?.config && !node?.server?.config) continue; 2164 + current2 = { 2165 + ...current2, 2166 + // TODO: should we override the server config value with the universal value similar to other page options? 2167 + ...node?.universal?.config, 2168 + ...node?.server?.config 2169 + }; 2170 + } 2171 + return Object.keys(current2).length ? current2 : void 0; 2172 + } 2173 + should_prerender_data() { 2174 + return this.data.some( 2175 + // prerender in case of trailingSlash because the client retrieves that value from the server 2176 + (node) => node?.server?.load || node?.server?.trailingSlash !== void 0 2177 + ); 2178 + } 2179 + } 2180 + async function respond_with_error({ 2181 + event, 2182 + event_state, 2183 + options: options2, 2184 + manifest, 2185 + state, 2186 + status, 2187 + error: error2, 2188 + resolve_opts 2189 + }) { 2190 + if (event.request.headers.get("x-sveltekit-error")) { 2191 + return static_error_page( 2192 + options2, 2193 + status, 2194 + /** @type {Error} */ 2195 + error2.message 2196 + ); 2197 + } 2198 + const fetched = []; 2199 + try { 2200 + const branch = []; 2201 + const default_layout = await manifest._.nodes[0](); 2202 + const nodes = new PageNodes([default_layout]); 2203 + const ssr = nodes.ssr(); 2204 + const csr = nodes.csr(); 2205 + const data_serializer = server_data_serializer(event, event_state, options2); 2206 + if (ssr) { 2207 + state.error = true; 2208 + const server_data_promise = load_server_data({ 2209 + event, 2210 + event_state, 2211 + state, 2212 + node: default_layout, 2213 + // eslint-disable-next-line @typescript-eslint/require-await 2214 + parent: async () => ({}) 2215 + }); 2216 + const server_data = await server_data_promise; 2217 + data_serializer.add_node(0, server_data); 2218 + const data = await load_data({ 2219 + event, 2220 + event_state, 2221 + fetched, 2222 + node: default_layout, 2223 + // eslint-disable-next-line @typescript-eslint/require-await 2224 + parent: async () => ({}), 2225 + resolve_opts, 2226 + server_data_promise, 2227 + state, 2228 + csr 2229 + }); 2230 + branch.push( 2231 + { 2232 + node: default_layout, 2233 + server_data, 2234 + data 2235 + }, 2236 + { 2237 + node: await manifest._.nodes[1](), 2238 + // 1 is always the root error 2239 + data: null, 2240 + server_data: null 2241 + } 2242 + ); 2243 + } 2244 + return await render_response({ 2245 + options: options2, 2246 + manifest, 2247 + state, 2248 + page_config: { 2249 + ssr, 2250 + csr 2251 + }, 2252 + status, 2253 + error: await handle_error_and_jsonify(event, event_state, options2, error2), 2254 + branch, 2255 + fetched, 2256 + event, 2257 + event_state, 2258 + resolve_opts, 2259 + data_serializer 2260 + }); 2261 + } catch (e) { 2262 + if (e instanceof Redirect) { 2263 + return redirect_response(e.status, e.location); 2264 + } 2265 + return static_error_page( 2266 + options2, 2267 + get_status(e), 2268 + (await handle_error_and_jsonify(event, event_state, options2, e)).message 2269 + ); 2270 + } 2271 + } 2272 + async function handle_remote_call(event, state, options2, manifest, id) { 2273 + return record_span({ 2274 + name: "sveltekit.remote.call", 2275 + attributes: {}, 2276 + fn: (current2) => { 2277 + const traced_event = merge_tracing(event, current2); 2278 + return with_request_store( 2279 + { event: traced_event, state }, 2280 + () => handle_remote_call_internal(traced_event, state, options2, manifest, id) 2281 + ); 2282 + } 2283 + }); 2284 + } 2285 + async function handle_remote_call_internal(event, state, options2, manifest, id) { 2286 + const [hash2, name, additional_args] = id.split("/"); 2287 + const remotes = manifest._.remotes; 2288 + if (!remotes[hash2]) error(404); 2289 + const module = await remotes[hash2](); 2290 + const fn = module.default[name]; 2291 + if (!fn) error(404); 2292 + const info = fn.__; 2293 + const transport = options2.hooks.transport; 2294 + event.tracing.current.setAttributes({ 2295 + "sveltekit.remote.call.type": info.type, 2296 + "sveltekit.remote.call.name": info.name 2297 + }); 2298 + let form_client_refreshes; 2299 + try { 2300 + if (info.type === "query_batch") { 2301 + if (event.request.method !== "POST") { 2302 + throw new SvelteKitError( 2303 + 405, 2304 + "Method Not Allowed", 2305 + `\`query.batch\` functions must be invoked via POST request, not ${event.request.method}` 2306 + ); 2307 + } 2308 + const { payloads } = await event.request.json(); 2309 + const args = payloads.map((payload2) => parse_remote_arg(payload2, transport)); 2310 + const get_result = await with_request_store({ event, state }, () => info.run(args)); 2311 + const results = await Promise.all( 2312 + args.map(async (arg, i) => { 2313 + try { 2314 + return { type: "result", data: get_result(arg, i) }; 2315 + } catch (error2) { 2316 + return { 2317 + type: "error", 2318 + error: await handle_error_and_jsonify(event, state, options2, error2), 2319 + status: error2 instanceof HttpError || error2 instanceof SvelteKitError ? error2.status : 500 2320 + }; 2321 + } 2322 + }) 2323 + ); 2324 + return json( 2325 + /** @type {RemoteFunctionResponse} */ 2326 + { 2327 + type: "result", 2328 + result: stringify(results, transport) 2329 + } 2330 + ); 2331 + } 2332 + if (info.type === "form") { 2333 + if (event.request.method !== "POST") { 2334 + throw new SvelteKitError( 2335 + 405, 2336 + "Method Not Allowed", 2337 + `\`form\` functions must be invoked via POST request, not ${event.request.method}` 2338 + ); 2339 + } 2340 + if (!is_form_content_type(event.request)) { 2341 + throw new SvelteKitError( 2342 + 415, 2343 + "Unsupported Media Type", 2344 + `\`form\` functions expect form-encoded data — received ${event.request.headers.get( 2345 + "content-type" 2346 + )}` 2347 + ); 2348 + } 2349 + const { data: data2, meta, form_data } = await deserialize_binary_form(event.request); 2350 + if (additional_args && !("id" in data2)) { 2351 + data2.id = JSON.parse(decodeURIComponent(additional_args)); 2352 + } 2353 + const fn2 = info.fn; 2354 + const result = await with_request_store({ event, state }, () => fn2(data2, meta, form_data)); 2355 + return json( 2356 + /** @type {RemoteFunctionResponse} */ 2357 + { 2358 + type: "result", 2359 + result: stringify(result, transport), 2360 + refreshes: result.issues ? void 0 : await serialize_refreshes(meta.remote_refreshes) 2361 + } 2362 + ); 2363 + } 2364 + if (info.type === "command") { 2365 + const { payload: payload2, refreshes } = await event.request.json(); 2366 + const arg = parse_remote_arg(payload2, transport); 2367 + const data2 = await with_request_store({ event, state }, () => fn(arg)); 2368 + return json( 2369 + /** @type {RemoteFunctionResponse} */ 2370 + { 2371 + type: "result", 2372 + result: stringify(data2, transport), 2373 + refreshes: await serialize_refreshes(refreshes) 2374 + } 2375 + ); 2376 + } 2377 + const payload = info.type === "prerender" ? additional_args : ( 2378 + /** @type {string} */ 2379 + // new URL(...) necessary because we're hiding the URL from the user in the event object 2380 + new URL(event.request.url).searchParams.get("payload") 2381 + ); 2382 + const data = await with_request_store( 2383 + { event, state }, 2384 + () => fn(parse_remote_arg(payload, transport)) 2385 + ); 2386 + return json( 2387 + /** @type {RemoteFunctionResponse} */ 2388 + { 2389 + type: "result", 2390 + result: stringify(data, transport) 2391 + } 2392 + ); 2393 + } catch (error2) { 2394 + if (error2 instanceof Redirect) { 2395 + return json( 2396 + /** @type {RemoteFunctionResponse} */ 2397 + { 2398 + type: "redirect", 2399 + location: error2.location, 2400 + refreshes: await serialize_refreshes(form_client_refreshes) 2401 + } 2402 + ); 2403 + } 2404 + const status = error2 instanceof HttpError || error2 instanceof SvelteKitError ? error2.status : 500; 2405 + return json( 2406 + /** @type {RemoteFunctionResponse} */ 2407 + { 2408 + type: "error", 2409 + error: await handle_error_and_jsonify(event, state, options2, error2), 2410 + status 2411 + }, 2412 + { 2413 + // By setting a non-200 during prerendering we fail the prerender process (unless handleHttpError handles it). 2414 + // Errors at runtime will be passed to the client and are handled there 2415 + status: state.prerendering ? status : void 0, 2416 + headers: { 2417 + "cache-control": "private, no-store" 2418 + } 2419 + } 2420 + ); 2421 + } 2422 + async function serialize_refreshes(client_refreshes) { 2423 + const refreshes = state.refreshes ?? {}; 2424 + if (client_refreshes) { 2425 + for (const key2 of client_refreshes) { 2426 + if (refreshes[key2] !== void 0) continue; 2427 + const [hash3, name2, payload] = key2.split("/"); 2428 + const loader = manifest._.remotes[hash3]; 2429 + const fn2 = (await loader?.())?.default?.[name2]; 2430 + if (!fn2) error(400, "Bad Request"); 2431 + refreshes[key2] = with_request_store( 2432 + { event, state }, 2433 + () => fn2(parse_remote_arg(payload, transport)) 2434 + ); 2435 + } 2436 + } 2437 + if (Object.keys(refreshes).length === 0) { 2438 + return void 0; 2439 + } 2440 + return stringify( 2441 + Object.fromEntries( 2442 + await Promise.all( 2443 + Object.entries(refreshes).map(async ([key2, promise]) => [key2, await promise]) 2444 + ) 2445 + ), 2446 + transport 2447 + ); 2448 + } 2449 + } 2450 + async function handle_remote_form_post(event, state, manifest, id) { 2451 + return record_span({ 2452 + name: "sveltekit.remote.form.post", 2453 + attributes: {}, 2454 + fn: (current2) => { 2455 + const traced_event = merge_tracing(event, current2); 2456 + return with_request_store( 2457 + { event: traced_event, state }, 2458 + () => handle_remote_form_post_internal(traced_event, state, manifest, id) 2459 + ); 2460 + } 2461 + }); 2462 + } 2463 + async function handle_remote_form_post_internal(event, state, manifest, id) { 2464 + const [hash2, name, action_id] = id.split("/"); 2465 + const remotes = manifest._.remotes; 2466 + const module = await remotes[hash2]?.(); 2467 + let form = ( 2468 + /** @type {RemoteForm<any, any>} */ 2469 + module?.default[name] 2470 + ); 2471 + if (!form) { 2472 + event.setHeaders({ 2473 + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 2474 + // "The server must generate an Allow header field in a 405 status code response" 2475 + allow: "GET" 2476 + }); 2477 + return { 2478 + type: "error", 2479 + error: new SvelteKitError( 2480 + 405, 2481 + "Method Not Allowed", 2482 + `POST method not allowed. No form actions exist for ${"this page"}` 2483 + ) 2484 + }; 2485 + } 2486 + if (action_id) { 2487 + form = with_request_store({ event, state }, () => form.for(JSON.parse(action_id))); 2488 + } 2489 + try { 2490 + const fn = ( 2491 + /** @type {RemoteInfo & { type: 'form' }} */ 2492 + /** @type {any} */ 2493 + form.__.fn 2494 + ); 2495 + const { data, meta, form_data } = await deserialize_binary_form(event.request); 2496 + if (action_id && !("id" in data)) { 2497 + data.id = JSON.parse(decodeURIComponent(action_id)); 2498 + } 2499 + await with_request_store({ event, state }, () => fn(data, meta, form_data)); 2500 + return { 2501 + type: "success", 2502 + status: 200 2503 + }; 2504 + } catch (e) { 2505 + const err = normalize_error(e); 2506 + if (err instanceof Redirect) { 2507 + return { 2508 + type: "redirect", 2509 + status: err.status, 2510 + location: err.location 2511 + }; 2512 + } 2513 + return { 2514 + type: "error", 2515 + error: check_incorrect_fail_use(err) 2516 + }; 2517 + } 2518 + } 2519 + function get_remote_id(url) { 2520 + return url.pathname.startsWith(`${base}/${app_dir}/remote/`) && url.pathname.replace(`${base}/${app_dir}/remote/`, ""); 2521 + } 2522 + function get_remote_action(url) { 2523 + return url.searchParams.get("/remote"); 2524 + } 2525 + const MAX_DEPTH = 10; 2526 + async function render_page(event, event_state, page, options2, manifest, state, nodes, resolve_opts) { 2527 + if (state.depth > MAX_DEPTH) { 2528 + return text(`Not found: ${event.url.pathname}`, { 2529 + status: 404 2530 + // TODO in some cases this should be 500. not sure how to differentiate 2531 + }); 2532 + } 2533 + if (is_action_json_request(event)) { 2534 + const node = await manifest._.nodes[page.leaf](); 2535 + return handle_action_json_request(event, event_state, options2, node?.server); 2536 + } 2537 + try { 2538 + const leaf_node = ( 2539 + /** @type {import('types').SSRNode} */ 2540 + nodes.page() 2541 + ); 2542 + let status = 200; 2543 + let action_result = void 0; 2544 + if (is_action_request(event)) { 2545 + const remote_id = get_remote_action(event.url); 2546 + if (remote_id) { 2547 + action_result = await handle_remote_form_post(event, event_state, manifest, remote_id); 2548 + } else { 2549 + action_result = await handle_action_request(event, event_state, leaf_node.server); 2550 + } 2551 + if (action_result?.type === "redirect") { 2552 + return redirect_response(action_result.status, action_result.location); 2553 + } 2554 + if (action_result?.type === "error") { 2555 + status = get_status(action_result.error); 2556 + } 2557 + if (action_result?.type === "failure") { 2558 + status = action_result.status; 2559 + } 2560 + } 2561 + const should_prerender = nodes.prerender(); 2562 + if (should_prerender) { 2563 + const mod = leaf_node.server; 2564 + if (mod?.actions) { 2565 + throw new Error("Cannot prerender pages with actions"); 2566 + } 2567 + } else if (state.prerendering) { 2568 + return new Response(void 0, { 2569 + status: 204 2570 + }); 2571 + } 2572 + state.prerender_default = should_prerender; 2573 + const should_prerender_data = nodes.should_prerender_data(); 2574 + const data_pathname = add_data_suffix(event.url.pathname); 2575 + const fetched = []; 2576 + const ssr = nodes.ssr(); 2577 + const csr = nodes.csr(); 2578 + if (ssr === false && !(state.prerendering && should_prerender_data)) { 2579 + if (DEV && action_result && !event.request.headers.has("x-sveltekit-action")) ; 2580 + return await render_response({ 2581 + branch: [], 2582 + fetched, 2583 + page_config: { 2584 + ssr: false, 2585 + csr 2586 + }, 2587 + status, 2588 + error: null, 2589 + event, 2590 + event_state, 2591 + options: options2, 2592 + manifest, 2593 + state, 2594 + resolve_opts, 2595 + data_serializer: server_data_serializer(event, event_state, options2) 2596 + }); 2597 + } 2598 + const branch = []; 2599 + let load_error = null; 2600 + const data_serializer = server_data_serializer(event, event_state, options2); 2601 + const data_serializer_json = state.prerendering && should_prerender_data ? server_data_serializer_json(event, event_state, options2) : null; 2602 + const server_promises = nodes.data.map((node, i) => { 2603 + if (load_error) { 2604 + throw load_error; 2605 + } 2606 + return Promise.resolve().then(async () => { 2607 + try { 2608 + if (node === leaf_node && action_result?.type === "error") { 2609 + throw action_result.error; 2610 + } 2611 + const server_data = await load_server_data({ 2612 + event, 2613 + event_state, 2614 + state, 2615 + node, 2616 + parent: async () => { 2617 + const data = {}; 2618 + for (let j = 0; j < i; j += 1) { 2619 + const parent = await server_promises[j]; 2620 + if (parent) Object.assign(data, parent.data); 2621 + } 2622 + return data; 2623 + } 2624 + }); 2625 + if (node) { 2626 + data_serializer.add_node(i, server_data); 2627 + } 2628 + data_serializer_json?.add_node(i, server_data); 2629 + return server_data; 2630 + } catch (e) { 2631 + load_error = /** @type {Error} */ 2632 + e; 2633 + throw load_error; 2634 + } 2635 + }); 2636 + }); 2637 + const load_promises = nodes.data.map((node, i) => { 2638 + if (load_error) throw load_error; 2639 + return Promise.resolve().then(async () => { 2640 + try { 2641 + return await load_data({ 2642 + event, 2643 + event_state, 2644 + fetched, 2645 + node, 2646 + parent: async () => { 2647 + const data = {}; 2648 + for (let j = 0; j < i; j += 1) { 2649 + Object.assign(data, await load_promises[j]); 2650 + } 2651 + return data; 2652 + }, 2653 + resolve_opts, 2654 + server_data_promise: server_promises[i], 2655 + state, 2656 + csr 2657 + }); 2658 + } catch (e) { 2659 + load_error = /** @type {Error} */ 2660 + e; 2661 + throw load_error; 2662 + } 2663 + }); 2664 + }); 2665 + for (const p of server_promises) p.catch(() => { 2666 + }); 2667 + for (const p of load_promises) p.catch(() => { 2668 + }); 2669 + for (let i = 0; i < nodes.data.length; i += 1) { 2670 + const node = nodes.data[i]; 2671 + if (node) { 2672 + try { 2673 + const server_data = await server_promises[i]; 2674 + const data = await load_promises[i]; 2675 + branch.push({ node, server_data, data }); 2676 + } catch (e) { 2677 + const err = normalize_error(e); 2678 + if (err instanceof Redirect) { 2679 + if (state.prerendering && should_prerender_data) { 2680 + const body2 = JSON.stringify({ 2681 + type: "redirect", 2682 + location: err.location 2683 + }); 2684 + state.prerendering.dependencies.set(data_pathname, { 2685 + response: text(body2), 2686 + body: body2 2687 + }); 2688 + } 2689 + return redirect_response(err.status, err.location); 2690 + } 2691 + const status2 = get_status(err); 2692 + const error2 = await handle_error_and_jsonify(event, event_state, options2, err); 2693 + while (i--) { 2694 + if (page.errors[i]) { 2695 + const index = ( 2696 + /** @type {number} */ 2697 + page.errors[i] 2698 + ); 2699 + const node2 = await manifest._.nodes[index](); 2700 + let j = i; 2701 + while (!branch[j]) j -= 1; 2702 + data_serializer.set_max_nodes(j + 1); 2703 + const layouts = compact(branch.slice(0, j + 1)); 2704 + const nodes2 = new PageNodes(layouts.map((layout) => layout.node)); 2705 + return await render_response({ 2706 + event, 2707 + event_state, 2708 + options: options2, 2709 + manifest, 2710 + state, 2711 + resolve_opts, 2712 + page_config: { 2713 + ssr: nodes2.ssr(), 2714 + csr: nodes2.csr() 2715 + }, 2716 + status: status2, 2717 + error: error2, 2718 + branch: layouts.concat({ 2719 + node: node2, 2720 + data: null, 2721 + server_data: null 2722 + }), 2723 + fetched, 2724 + data_serializer 2725 + }); 2726 + } 2727 + } 2728 + return static_error_page(options2, status2, error2.message); 2729 + } 2730 + } else { 2731 + branch.push(null); 2732 + } 2733 + } 2734 + if (state.prerendering && data_serializer_json) { 2735 + let { data, chunks } = data_serializer_json.get_data(); 2736 + if (chunks) { 2737 + for await (const chunk of chunks) { 2738 + data += chunk; 2739 + } 2740 + } 2741 + state.prerendering.dependencies.set(data_pathname, { 2742 + response: text(data), 2743 + body: data 2744 + }); 2745 + } 2746 + return await render_response({ 2747 + event, 2748 + event_state, 2749 + options: options2, 2750 + manifest, 2751 + state, 2752 + resolve_opts, 2753 + page_config: { 2754 + csr, 2755 + ssr 2756 + }, 2757 + status, 2758 + error: null, 2759 + branch: ssr === false ? [] : compact(branch), 2760 + action_result, 2761 + fetched, 2762 + data_serializer: ssr === false ? server_data_serializer(event, event_state, options2) : data_serializer 2763 + }); 2764 + } catch (e) { 2765 + return await respond_with_error({ 2766 + event, 2767 + event_state, 2768 + options: options2, 2769 + manifest, 2770 + state, 2771 + status: 500, 2772 + error: e, 2773 + resolve_opts 2774 + }); 2775 + } 2776 + } 2777 + function once(fn) { 2778 + let done = false; 2779 + let result; 2780 + return () => { 2781 + if (done) return result; 2782 + done = true; 2783 + return result = fn(); 2784 + }; 2785 + } 2786 + async function render_data(event, event_state, route, options2, manifest, state, invalidated_data_nodes, trailing_slash) { 2787 + if (!route.page) { 2788 + return new Response(void 0, { 2789 + status: 404 2790 + }); 2791 + } 2792 + try { 2793 + const node_ids = [...route.page.layouts, route.page.leaf]; 2794 + const invalidated = invalidated_data_nodes ?? node_ids.map(() => true); 2795 + let aborted = false; 2796 + const url = new URL(event.url); 2797 + url.pathname = normalize_path(url.pathname, trailing_slash); 2798 + const new_event = { ...event, url }; 2799 + const functions = node_ids.map((n, i) => { 2800 + return once(async () => { 2801 + try { 2802 + if (aborted) { 2803 + return ( 2804 + /** @type {import('types').ServerDataSkippedNode} */ 2805 + { 2806 + type: "skip" 2807 + } 2808 + ); 2809 + } 2810 + const node = n == void 0 ? n : await manifest._.nodes[n](); 2811 + return load_server_data({ 2812 + event: new_event, 2813 + event_state, 2814 + state, 2815 + node, 2816 + parent: async () => { 2817 + const data2 = {}; 2818 + for (let j = 0; j < i; j += 1) { 2819 + const parent = ( 2820 + /** @type {import('types').ServerDataNode | null} */ 2821 + await functions[j]() 2822 + ); 2823 + if (parent) { 2824 + Object.assign(data2, parent.data); 2825 + } 2826 + } 2827 + return data2; 2828 + } 2829 + }); 2830 + } catch (e) { 2831 + aborted = true; 2832 + throw e; 2833 + } 2834 + }); 2835 + }); 2836 + const promises = functions.map(async (fn, i) => { 2837 + if (!invalidated[i]) { 2838 + return ( 2839 + /** @type {import('types').ServerDataSkippedNode} */ 2840 + { 2841 + type: "skip" 2842 + } 2843 + ); 2844 + } 2845 + return fn(); 2846 + }); 2847 + let length = promises.length; 2848 + const nodes = await Promise.all( 2849 + promises.map( 2850 + (p, i) => p.catch(async (error2) => { 2851 + if (error2 instanceof Redirect) { 2852 + throw error2; 2853 + } 2854 + length = Math.min(length, i + 1); 2855 + return ( 2856 + /** @type {import('types').ServerErrorNode} */ 2857 + { 2858 + type: "error", 2859 + error: await handle_error_and_jsonify(event, event_state, options2, error2), 2860 + status: error2 instanceof HttpError || error2 instanceof SvelteKitError ? error2.status : void 0 2861 + } 2862 + ); 2863 + }) 2864 + ) 2865 + ); 2866 + const data_serializer = server_data_serializer_json(event, event_state, options2); 2867 + for (let i = 0; i < nodes.length; i++) data_serializer.add_node(i, nodes[i]); 2868 + const { data, chunks } = data_serializer.get_data(); 2869 + if (!chunks) { 2870 + return json_response(data); 2871 + } 2872 + return new Response( 2873 + new ReadableStream({ 2874 + async start(controller) { 2875 + controller.enqueue(text_encoder.encode(data)); 2876 + for await (const chunk of chunks) { 2877 + controller.enqueue(text_encoder.encode(chunk)); 2878 + } 2879 + controller.close(); 2880 + }, 2881 + type: "bytes" 2882 + }), 2883 + { 2884 + headers: { 2885 + // we use a proprietary content type to prevent buffering. 2886 + // the `text` prefix makes it inspectable 2887 + "content-type": "text/sveltekit-data", 2888 + "cache-control": "private, no-store" 2889 + } 2890 + } 2891 + ); 2892 + } catch (e) { 2893 + const error2 = normalize_error(e); 2894 + if (error2 instanceof Redirect) { 2895 + return redirect_json_response(error2); 2896 + } else { 2897 + return json_response(await handle_error_and_jsonify(event, event_state, options2, error2), 500); 2898 + } 2899 + } 2900 + } 2901 + function json_response(json2, status = 200) { 2902 + return text(typeof json2 === "string" ? json2 : JSON.stringify(json2), { 2903 + status, 2904 + headers: { 2905 + "content-type": "application/json", 2906 + "cache-control": "private, no-store" 2907 + } 2908 + }); 2909 + } 2910 + function redirect_json_response(redirect) { 2911 + return json_response( 2912 + /** @type {import('types').ServerRedirectNode} */ 2913 + { 2914 + type: "redirect", 2915 + location: redirect.location 2916 + } 2917 + ); 2918 + } 2919 + const INVALID_COOKIE_CHARACTER_REGEX = /[\x00-\x1F\x7F()<>@,;:"/[\]?={} \t]/; 2920 + function validate_options(options2) { 2921 + if (options2?.path === void 0) { 2922 + throw new Error("You must specify a `path` when setting, deleting or serializing cookies"); 2923 + } 2924 + } 2925 + function generate_cookie_key(domain, path, name) { 2926 + return `${domain || ""}${path}?${encodeURIComponent(name)}`; 2927 + } 2928 + function get_cookies(request, url) { 2929 + const header = request.headers.get("cookie") ?? ""; 2930 + const initial_cookies = parse(header, { decode: (value) => value }); 2931 + let normalized_url; 2932 + const new_cookies = /* @__PURE__ */ new Map(); 2933 + const defaults = { 2934 + httpOnly: true, 2935 + sameSite: "lax", 2936 + secure: url.hostname === "localhost" && url.protocol === "http:" ? false : true 2937 + }; 2938 + const cookies = { 2939 + // The JSDoc param annotations appearing below for get, set and delete 2940 + // are necessary to expose the `cookie` library types to 2941 + // typescript users. `@type {import('@sveltejs/kit').Cookies}` above is not 2942 + // sufficient to do so. 2943 + /** 2944 + * @param {string} name 2945 + * @param {import('cookie').CookieParseOptions} [opts] 2946 + */ 2947 + get(name, opts) { 2948 + const best_match = Array.from(new_cookies.values()).filter((c) => { 2949 + return c.name === name && domain_matches(url.hostname, c.options.domain) && path_matches(url.pathname, c.options.path); 2950 + }).sort((a, b) => b.options.path.length - a.options.path.length)[0]; 2951 + if (best_match) { 2952 + return best_match.options.maxAge === 0 ? void 0 : best_match.value; 2953 + } 2954 + const req_cookies = parse(header, { decode: opts?.decode }); 2955 + const cookie = req_cookies[name]; 2956 + return cookie; 2957 + }, 2958 + /** 2959 + * @param {import('cookie').CookieParseOptions} [opts] 2960 + */ 2961 + getAll(opts) { 2962 + const cookies2 = parse(header, { decode: opts?.decode }); 2963 + const lookup = /* @__PURE__ */ new Map(); 2964 + for (const c of new_cookies.values()) { 2965 + if (domain_matches(url.hostname, c.options.domain) && path_matches(url.pathname, c.options.path)) { 2966 + const existing = lookup.get(c.name); 2967 + if (!existing || c.options.path.length > existing.options.path.length) { 2968 + lookup.set(c.name, c); 2969 + } 2970 + } 2971 + } 2972 + for (const c of lookup.values()) { 2973 + cookies2[c.name] = c.value; 2974 + } 2975 + return Object.entries(cookies2).map(([name, value]) => ({ name, value })); 2976 + }, 2977 + /** 2978 + * @param {string} name 2979 + * @param {string} value 2980 + * @param {import('./page/types.js').Cookie['options']} options 2981 + */ 2982 + set(name, value, options2) { 2983 + const illegal_characters = name.match(INVALID_COOKIE_CHARACTER_REGEX); 2984 + if (illegal_characters) { 2985 + console.warn( 2986 + `The cookie name "${name}" will be invalid in SvelteKit 3.0 as it contains ${illegal_characters.join( 2987 + " and " 2988 + )}. See RFC 2616 for more details https://datatracker.ietf.org/doc/html/rfc2616#section-2.2` 2989 + ); 2990 + } 2991 + validate_options(options2); 2992 + set_internal(name, value, { ...defaults, ...options2 }); 2993 + }, 2994 + /** 2995 + * @param {string} name 2996 + * @param {import('./page/types.js').Cookie['options']} options 2997 + */ 2998 + delete(name, options2) { 2999 + validate_options(options2); 3000 + cookies.set(name, "", { ...options2, maxAge: 0 }); 3001 + }, 3002 + /** 3003 + * @param {string} name 3004 + * @param {string} value 3005 + * @param {import('./page/types.js').Cookie['options']} options 3006 + */ 3007 + serialize(name, value, options2) { 3008 + validate_options(options2); 3009 + let path = options2.path; 3010 + if (!options2.domain || options2.domain === url.hostname) { 3011 + if (!normalized_url) { 3012 + throw new Error("Cannot serialize cookies until after the route is determined"); 3013 + } 3014 + path = resolve(normalized_url, path); 3015 + } 3016 + return serialize(name, value, { ...defaults, ...options2, path }); 3017 + } 3018 + }; 3019 + function get_cookie_header(destination, header2) { 3020 + const combined_cookies = { 3021 + // cookies sent by the user agent have lowest precedence 3022 + ...initial_cookies 3023 + }; 3024 + for (const cookie of new_cookies.values()) { 3025 + if (!domain_matches(destination.hostname, cookie.options.domain)) continue; 3026 + if (!path_matches(destination.pathname, cookie.options.path)) continue; 3027 + const encoder = cookie.options.encode || encodeURIComponent; 3028 + combined_cookies[cookie.name] = encoder(cookie.value); 3029 + } 3030 + if (header2) { 3031 + const parsed = parse(header2, { decode: (value) => value }); 3032 + for (const name in parsed) { 3033 + combined_cookies[name] = parsed[name]; 3034 + } 3035 + } 3036 + return Object.entries(combined_cookies).map(([name, value]) => `${name}=${value}`).join("; "); 3037 + } 3038 + const internal_queue = []; 3039 + function set_internal(name, value, options2) { 3040 + if (!normalized_url) { 3041 + internal_queue.push(() => set_internal(name, value, options2)); 3042 + return; 3043 + } 3044 + let path = options2.path; 3045 + if (!options2.domain || options2.domain === url.hostname) { 3046 + path = resolve(normalized_url, path); 3047 + } 3048 + const cookie_key = generate_cookie_key(options2.domain, path, name); 3049 + const cookie = { name, value, options: { ...options2, path } }; 3050 + new_cookies.set(cookie_key, cookie); 3051 + } 3052 + function set_trailing_slash(trailing_slash) { 3053 + normalized_url = normalize_path(url.pathname, trailing_slash); 3054 + internal_queue.forEach((fn) => fn()); 3055 + } 3056 + return { cookies, new_cookies, get_cookie_header, set_internal, set_trailing_slash }; 3057 + } 3058 + function domain_matches(hostname, constraint) { 3059 + if (!constraint) return true; 3060 + const normalized = constraint[0] === "." ? constraint.slice(1) : constraint; 3061 + if (hostname === normalized) return true; 3062 + return hostname.endsWith("." + normalized); 3063 + } 3064 + function path_matches(path, constraint) { 3065 + if (!constraint) return true; 3066 + const normalized = constraint.endsWith("/") ? constraint.slice(0, -1) : constraint; 3067 + if (path === normalized) return true; 3068 + return path.startsWith(normalized + "/"); 3069 + } 3070 + function add_cookies_to_headers(headers2, cookies) { 3071 + for (const new_cookie of cookies) { 3072 + const { name, value, options: options2 } = new_cookie; 3073 + headers2.append("set-cookie", serialize(name, value, options2)); 3074 + if (options2.path.endsWith(".html")) { 3075 + const path = add_data_suffix(options2.path); 3076 + headers2.append("set-cookie", serialize(name, value, { ...options2, path })); 3077 + } 3078 + } 3079 + } 3080 + function create_fetch({ event, options: options2, manifest, state, get_cookie_header, set_internal }) { 3081 + const server_fetch = async (info, init2) => { 3082 + const original_request = normalize_fetch_input(info, init2, event.url); 3083 + let mode = (info instanceof Request ? info.mode : init2?.mode) ?? "cors"; 3084 + let credentials = (info instanceof Request ? info.credentials : init2?.credentials) ?? "same-origin"; 3085 + return options2.hooks.handleFetch({ 3086 + event, 3087 + request: original_request, 3088 + fetch: async (info2, init3) => { 3089 + const request = normalize_fetch_input(info2, init3, event.url); 3090 + const url = new URL(request.url); 3091 + if (!request.headers.has("origin")) { 3092 + request.headers.set("origin", event.url.origin); 3093 + } 3094 + if (info2 !== original_request) { 3095 + mode = (info2 instanceof Request ? info2.mode : init3?.mode) ?? "cors"; 3096 + credentials = (info2 instanceof Request ? info2.credentials : init3?.credentials) ?? "same-origin"; 3097 + } 3098 + if ((request.method === "GET" || request.method === "HEAD") && (mode === "no-cors" && url.origin !== event.url.origin || url.origin === event.url.origin)) { 3099 + request.headers.delete("origin"); 3100 + } 3101 + if (url.origin !== event.url.origin) { 3102 + if (`.${url.hostname}`.endsWith(`.${event.url.hostname}`) && credentials !== "omit") { 3103 + const cookie = get_cookie_header(url, request.headers.get("cookie")); 3104 + if (cookie) request.headers.set("cookie", cookie); 3105 + } 3106 + return fetch(request); 3107 + } 3108 + const prefix = assets || base; 3109 + const decoded = decodeURIComponent(url.pathname); 3110 + const filename = (decoded.startsWith(prefix) ? decoded.slice(prefix.length) : decoded).slice(1); 3111 + const filename_html = `${filename}/index.html`; 3112 + const is_asset = manifest.assets.has(filename) || filename in manifest._.server_assets; 3113 + const is_asset_html = manifest.assets.has(filename_html) || filename_html in manifest._.server_assets; 3114 + if (is_asset || is_asset_html) { 3115 + const file = is_asset ? filename : filename_html; 3116 + if (state.read) { 3117 + const type = is_asset ? manifest.mimeTypes[filename.slice(filename.lastIndexOf("."))] : "text/html"; 3118 + return new Response(state.read(file), { 3119 + headers: type ? { "content-type": type } : {} 3120 + }); 3121 + } else if (read_implementation && file in manifest._.server_assets) { 3122 + const length = manifest._.server_assets[file]; 3123 + const type = manifest.mimeTypes[file.slice(file.lastIndexOf("."))]; 3124 + return new Response(read_implementation(file), { 3125 + headers: { 3126 + "Content-Length": "" + length, 3127 + "Content-Type": type 3128 + } 3129 + }); 3130 + } 3131 + return await fetch(request); 3132 + } 3133 + if (has_prerendered_path(manifest, base + decoded)) { 3134 + return await fetch(request); 3135 + } 3136 + if (credentials !== "omit") { 3137 + const cookie = get_cookie_header(url, request.headers.get("cookie")); 3138 + if (cookie) { 3139 + request.headers.set("cookie", cookie); 3140 + } 3141 + const authorization = event.request.headers.get("authorization"); 3142 + if (authorization && !request.headers.has("authorization")) { 3143 + request.headers.set("authorization", authorization); 3144 + } 3145 + } 3146 + if (!request.headers.has("accept")) { 3147 + request.headers.set("accept", "*/*"); 3148 + } 3149 + if (!request.headers.has("accept-language")) { 3150 + request.headers.set( 3151 + "accept-language", 3152 + /** @type {string} */ 3153 + event.request.headers.get("accept-language") 3154 + ); 3155 + } 3156 + const response = await internal_fetch(request, options2, manifest, state); 3157 + const set_cookie = response.headers.get("set-cookie"); 3158 + if (set_cookie) { 3159 + for (const str of set_cookie_parser.splitCookiesString(set_cookie)) { 3160 + const { name, value, ...options3 } = set_cookie_parser.parseString(str, { 3161 + decodeValues: false 3162 + }); 3163 + const path = options3.path ?? (url.pathname.split("/").slice(0, -1).join("/") || "/"); 3164 + set_internal(name, value, { 3165 + path, 3166 + encode: (value2) => value2, 3167 + .../** @type {import('cookie').CookieSerializeOptions} */ 3168 + options3 3169 + }); 3170 + } 3171 + } 3172 + return response; 3173 + } 3174 + }); 3175 + }; 3176 + return (input, init2) => { 3177 + const response = server_fetch(input, init2); 3178 + response.catch(() => { 3179 + }); 3180 + return response; 3181 + }; 3182 + } 3183 + function normalize_fetch_input(info, init2, url) { 3184 + if (info instanceof Request) { 3185 + return info; 3186 + } 3187 + return new Request(typeof info === "string" ? new URL(info, url) : info, init2); 3188 + } 3189 + async function internal_fetch(request, options2, manifest, state) { 3190 + if (request.signal) { 3191 + if (request.signal.aborted) { 3192 + throw new DOMException("The operation was aborted.", "AbortError"); 3193 + } 3194 + let remove_abort_listener = () => { 3195 + }; 3196 + const abort_promise = new Promise((_, reject) => { 3197 + const on_abort = () => { 3198 + reject(new DOMException("The operation was aborted.", "AbortError")); 3199 + }; 3200 + request.signal.addEventListener("abort", on_abort, { once: true }); 3201 + remove_abort_listener = () => request.signal.removeEventListener("abort", on_abort); 3202 + }); 3203 + const result = await Promise.race([ 3204 + respond(request, options2, manifest, { 3205 + ...state, 3206 + depth: state.depth + 1 3207 + }), 3208 + abort_promise 3209 + ]); 3210 + remove_abort_listener(); 3211 + return result; 3212 + } else { 3213 + return await respond(request, options2, manifest, { 3214 + ...state, 3215 + depth: state.depth + 1 3216 + }); 3217 + } 3218 + } 3219 + let body; 3220 + let etag; 3221 + let headers; 3222 + function get_public_env(request) { 3223 + body ??= `export const env=${JSON.stringify(public_env)}`; 3224 + etag ??= `W/${Date.now()}`; 3225 + headers ??= new Headers({ 3226 + "content-type": "application/javascript; charset=utf-8", 3227 + etag 3228 + }); 3229 + if (request.headers.get("if-none-match") === etag) { 3230 + return new Response(void 0, { status: 304, headers }); 3231 + } 3232 + return new Response(body, { headers }); 3233 + } 3234 + const default_transform = ({ html }) => html; 3235 + const default_filter = () => false; 3236 + const default_preload = ({ type }) => type === "js" || type === "css"; 3237 + const page_methods = /* @__PURE__ */ new Set(["GET", "HEAD", "POST"]); 3238 + const allowed_page_methods = /* @__PURE__ */ new Set(["GET", "HEAD", "OPTIONS"]); 3239 + let warned_on_devtools_json_request = false; 3240 + const respond = propagate_context(internal_respond); 3241 + async function internal_respond(request, options2, manifest, state) { 3242 + const url = new URL(request.url); 3243 + const is_route_resolution_request = has_resolution_suffix(url.pathname); 3244 + const is_data_request = has_data_suffix(url.pathname); 3245 + const remote_id = get_remote_id(url); 3246 + { 3247 + const request_origin = request.headers.get("origin"); 3248 + if (remote_id) { 3249 + if (request.method !== "GET" && request_origin !== url.origin) { 3250 + const message = "Cross-site remote requests are forbidden"; 3251 + return json({ message }, { status: 403 }); 3252 + } 3253 + } else if (options2.csrf_check_origin) { 3254 + const forbidden = is_form_content_type(request) && (request.method === "POST" || request.method === "PUT" || request.method === "PATCH" || request.method === "DELETE") && request_origin !== url.origin && (!request_origin || !options2.csrf_trusted_origins.includes(request_origin)); 3255 + if (forbidden) { 3256 + const message = `Cross-site ${request.method} form submissions are forbidden`; 3257 + const opts = { status: 403 }; 3258 + if (request.headers.get("accept") === "application/json") { 3259 + return json({ message }, opts); 3260 + } 3261 + return text(message, opts); 3262 + } 3263 + } 3264 + } 3265 + if (options2.hash_routing && url.pathname !== base + "/" && url.pathname !== "/[fallback]") { 3266 + return text("Not found", { status: 404 }); 3267 + } 3268 + let invalidated_data_nodes; 3269 + if (is_route_resolution_request) { 3270 + url.pathname = strip_resolution_suffix(url.pathname); 3271 + } else if (is_data_request) { 3272 + url.pathname = strip_data_suffix(url.pathname) + (url.searchParams.get(TRAILING_SLASH_PARAM) === "1" ? "/" : "") || "/"; 3273 + url.searchParams.delete(TRAILING_SLASH_PARAM); 3274 + invalidated_data_nodes = url.searchParams.get(INVALIDATED_PARAM)?.split("").map((node) => node === "1"); 3275 + url.searchParams.delete(INVALIDATED_PARAM); 3276 + } else if (remote_id) { 3277 + url.pathname = request.headers.get("x-sveltekit-pathname") ?? base; 3278 + url.search = request.headers.get("x-sveltekit-search") ?? ""; 3279 + } 3280 + const headers2 = {}; 3281 + const { cookies, new_cookies, get_cookie_header, set_internal, set_trailing_slash } = get_cookies( 3282 + request, 3283 + url 3284 + ); 3285 + const event_state = { 3286 + prerendering: state.prerendering, 3287 + transport: options2.hooks.transport, 3288 + handleValidationError: options2.hooks.handleValidationError, 3289 + tracing: { 3290 + record_span 3291 + }, 3292 + is_in_remote_function: false 3293 + }; 3294 + const event = { 3295 + cookies, 3296 + // @ts-expect-error `fetch` needs to be created after the `event` itself 3297 + fetch: null, 3298 + getClientAddress: state.getClientAddress || (() => { 3299 + throw new Error( 3300 + `${"@sveltejs/adapter-static"} does not specify getClientAddress. Please raise an issue` 3301 + ); 3302 + }), 3303 + locals: {}, 3304 + params: {}, 3305 + platform: state.platform, 3306 + request, 3307 + route: { id: null }, 3308 + setHeaders: (new_headers) => { 3309 + for (const key2 in new_headers) { 3310 + const lower = key2.toLowerCase(); 3311 + const value = new_headers[key2]; 3312 + if (lower === "set-cookie") { 3313 + throw new Error( 3314 + "Use `event.cookies.set(name, value, options)` instead of `event.setHeaders` to set cookies" 3315 + ); 3316 + } else if (lower in headers2) { 3317 + if (lower === "server-timing") { 3318 + headers2[lower] += ", " + value; 3319 + } else { 3320 + throw new Error(`"${key2}" header is already set`); 3321 + } 3322 + } else { 3323 + headers2[lower] = value; 3324 + if (state.prerendering && lower === "cache-control") { 3325 + state.prerendering.cache = /** @type {string} */ 3326 + value; 3327 + } 3328 + } 3329 + } 3330 + }, 3331 + url, 3332 + isDataRequest: is_data_request, 3333 + isSubRequest: state.depth > 0, 3334 + isRemoteRequest: !!remote_id 3335 + }; 3336 + event.fetch = create_fetch({ 3337 + event, 3338 + options: options2, 3339 + manifest, 3340 + state, 3341 + get_cookie_header, 3342 + set_internal 3343 + }); 3344 + if (state.emulator?.platform) { 3345 + event.platform = await state.emulator.platform({ 3346 + config: {}, 3347 + prerender: !!state.prerendering?.fallback 3348 + }); 3349 + } 3350 + let resolved_path = url.pathname; 3351 + if (!remote_id) { 3352 + const prerendering_reroute_state = state.prerendering?.inside_reroute; 3353 + try { 3354 + if (state.prerendering) state.prerendering.inside_reroute = true; 3355 + resolved_path = await options2.hooks.reroute({ url: new URL(url), fetch: event.fetch }) ?? url.pathname; 3356 + } catch { 3357 + return text("Internal Server Error", { 3358 + status: 500 3359 + }); 3360 + } finally { 3361 + if (state.prerendering) state.prerendering.inside_reroute = prerendering_reroute_state; 3362 + } 3363 + } 3364 + try { 3365 + resolved_path = decode_pathname(resolved_path); 3366 + } catch { 3367 + return text("Malformed URI", { status: 400 }); 3368 + } 3369 + if (resolved_path !== url.pathname && !state.prerendering?.fallback && has_prerendered_path(manifest, resolved_path)) { 3370 + const url2 = new URL(request.url); 3371 + url2.pathname = is_data_request ? add_data_suffix(resolved_path) : is_route_resolution_request ? add_resolution_suffix(resolved_path) : resolved_path; 3372 + const response = await fetch(url2, request); 3373 + const headers22 = new Headers(response.headers); 3374 + if (headers22.has("content-encoding")) { 3375 + headers22.delete("content-encoding"); 3376 + headers22.delete("content-length"); 3377 + } 3378 + return new Response(response.body, { 3379 + headers: headers22, 3380 + status: response.status, 3381 + statusText: response.statusText 3382 + }); 3383 + } 3384 + let route = null; 3385 + if (base && !state.prerendering?.fallback) { 3386 + if (!resolved_path.startsWith(base)) { 3387 + return text("Not found", { status: 404 }); 3388 + } 3389 + resolved_path = resolved_path.slice(base.length) || "/"; 3390 + } 3391 + if (is_route_resolution_request) { 3392 + return resolve_route(resolved_path, new URL(request.url), manifest); 3393 + } 3394 + if (resolved_path === `/${app_dir}/env.js`) { 3395 + return get_public_env(request); 3396 + } 3397 + if (!remote_id && resolved_path.startsWith(`/${app_dir}`)) { 3398 + const headers22 = new Headers(); 3399 + headers22.set("cache-control", "public, max-age=0, must-revalidate"); 3400 + return text("Not found", { status: 404, headers: headers22 }); 3401 + } 3402 + if (!state.prerendering?.fallback) { 3403 + const matchers = await manifest._.matchers(); 3404 + for (const candidate of manifest._.routes) { 3405 + const match = candidate.pattern.exec(resolved_path); 3406 + if (!match) continue; 3407 + const matched = exec(match, candidate.params, matchers); 3408 + if (matched) { 3409 + route = candidate; 3410 + event.route = { id: route.id }; 3411 + event.params = decode_params(matched); 3412 + break; 3413 + } 3414 + } 3415 + } 3416 + let resolve_opts = { 3417 + transformPageChunk: default_transform, 3418 + filterSerializedResponseHeaders: default_filter, 3419 + preload: default_preload 3420 + }; 3421 + let trailing_slash = "never"; 3422 + try { 3423 + const page_nodes = route?.page ? new PageNodes(await load_page_nodes(route.page, manifest)) : void 0; 3424 + if (route && !remote_id) { 3425 + if (url.pathname === base || url.pathname === base + "/") { 3426 + trailing_slash = "always"; 3427 + } else if (page_nodes) { 3428 + if (DEV) ; 3429 + trailing_slash = page_nodes.trailing_slash(); 3430 + } else if (route.endpoint) { 3431 + const node = await route.endpoint(); 3432 + trailing_slash = node.trailingSlash ?? "never"; 3433 + if (DEV) ; 3434 + } 3435 + if (!is_data_request) { 3436 + const normalized = normalize_path(url.pathname, trailing_slash); 3437 + if (normalized !== url.pathname && !state.prerendering?.fallback) { 3438 + return new Response(void 0, { 3439 + status: 308, 3440 + headers: { 3441 + "x-sveltekit-normalize": "1", 3442 + location: ( 3443 + // ensure paths starting with '//' are not treated as protocol-relative 3444 + (normalized.startsWith("//") ? url.origin + normalized : normalized) + (url.search === "?" ? "" : url.search) 3445 + ) 3446 + } 3447 + }); 3448 + } 3449 + } 3450 + if (state.before_handle || state.emulator?.platform) { 3451 + let config = {}; 3452 + let prerender = false; 3453 + if (route.endpoint) { 3454 + const node = await route.endpoint(); 3455 + config = node.config ?? config; 3456 + prerender = node.prerender ?? prerender; 3457 + } else if (page_nodes) { 3458 + config = page_nodes.get_config() ?? config; 3459 + prerender = page_nodes.prerender(); 3460 + } 3461 + if (state.before_handle) { 3462 + state.before_handle(event, config, prerender); 3463 + } 3464 + if (state.emulator?.platform) { 3465 + event.platform = await state.emulator.platform({ config, prerender }); 3466 + } 3467 + } 3468 + } 3469 + set_trailing_slash(trailing_slash); 3470 + if (state.prerendering && !state.prerendering.fallback && !state.prerendering.inside_reroute) { 3471 + disable_search(url); 3472 + } 3473 + const response = await record_span({ 3474 + name: "sveltekit.handle.root", 3475 + attributes: { 3476 + "http.route": event.route.id || "unknown", 3477 + "http.method": event.request.method, 3478 + "http.url": event.url.href, 3479 + "sveltekit.is_data_request": is_data_request, 3480 + "sveltekit.is_sub_request": event.isSubRequest 3481 + }, 3482 + fn: async (root_span) => { 3483 + const traced_event = { 3484 + ...event, 3485 + tracing: { 3486 + enabled: false, 3487 + root: root_span, 3488 + current: root_span 3489 + } 3490 + }; 3491 + return await with_request_store( 3492 + { event: traced_event, state: event_state }, 3493 + () => options2.hooks.handle({ 3494 + event: traced_event, 3495 + resolve: (event2, opts) => { 3496 + return record_span({ 3497 + name: "sveltekit.resolve", 3498 + attributes: { 3499 + "http.route": event2.route.id || "unknown" 3500 + }, 3501 + fn: (resolve_span) => { 3502 + return with_request_store( 3503 + null, 3504 + () => resolve2(merge_tracing(event2, resolve_span), page_nodes, opts).then( 3505 + (response2) => { 3506 + for (const key2 in headers2) { 3507 + const value = headers2[key2]; 3508 + response2.headers.set( 3509 + key2, 3510 + /** @type {string} */ 3511 + value 3512 + ); 3513 + } 3514 + add_cookies_to_headers(response2.headers, new_cookies.values()); 3515 + if (state.prerendering && event2.route.id !== null) { 3516 + response2.headers.set("x-sveltekit-routeid", encodeURI(event2.route.id)); 3517 + } 3518 + resolve_span.setAttributes({ 3519 + "http.response.status_code": response2.status, 3520 + "http.response.body.size": response2.headers.get("content-length") || "unknown" 3521 + }); 3522 + return response2; 3523 + } 3524 + ) 3525 + ); 3526 + } 3527 + }); 3528 + } 3529 + }) 3530 + ); 3531 + } 3532 + }); 3533 + if (response.status === 200 && response.headers.has("etag")) { 3534 + let if_none_match_value = request.headers.get("if-none-match"); 3535 + if (if_none_match_value?.startsWith('W/"')) { 3536 + if_none_match_value = if_none_match_value.substring(2); 3537 + } 3538 + const etag2 = ( 3539 + /** @type {string} */ 3540 + response.headers.get("etag") 3541 + ); 3542 + if (if_none_match_value === etag2) { 3543 + const headers22 = new Headers({ etag: etag2 }); 3544 + for (const key2 of [ 3545 + "cache-control", 3546 + "content-location", 3547 + "date", 3548 + "expires", 3549 + "vary", 3550 + "set-cookie" 3551 + ]) { 3552 + const value = response.headers.get(key2); 3553 + if (value) headers22.set(key2, value); 3554 + } 3555 + return new Response(void 0, { 3556 + status: 304, 3557 + headers: headers22 3558 + }); 3559 + } 3560 + } 3561 + if (is_data_request && response.status >= 300 && response.status <= 308) { 3562 + const location = response.headers.get("location"); 3563 + if (location) { 3564 + return redirect_json_response(new Redirect( 3565 + /** @type {any} */ 3566 + response.status, 3567 + location 3568 + )); 3569 + } 3570 + } 3571 + return response; 3572 + } catch (e) { 3573 + if (e instanceof Redirect) { 3574 + const response = is_data_request || remote_id ? redirect_json_response(e) : route?.page && is_action_json_request(event) ? action_json_redirect(e) : redirect_response(e.status, e.location); 3575 + add_cookies_to_headers(response.headers, new_cookies.values()); 3576 + return response; 3577 + } 3578 + return await handle_fatal_error(event, event_state, options2, e); 3579 + } 3580 + async function resolve2(event2, page_nodes, opts) { 3581 + try { 3582 + if (opts) { 3583 + resolve_opts = { 3584 + transformPageChunk: opts.transformPageChunk || default_transform, 3585 + filterSerializedResponseHeaders: opts.filterSerializedResponseHeaders || default_filter, 3586 + preload: opts.preload || default_preload 3587 + }; 3588 + } 3589 + if (options2.hash_routing || state.prerendering?.fallback) { 3590 + return await render_response({ 3591 + event: event2, 3592 + event_state, 3593 + options: options2, 3594 + manifest, 3595 + state, 3596 + page_config: { ssr: false, csr: true }, 3597 + status: 200, 3598 + error: null, 3599 + branch: [], 3600 + fetched: [], 3601 + resolve_opts, 3602 + data_serializer: server_data_serializer(event2, event_state, options2) 3603 + }); 3604 + } 3605 + if (remote_id) { 3606 + return await handle_remote_call(event2, event_state, options2, manifest, remote_id); 3607 + } 3608 + if (route) { 3609 + const method = ( 3610 + /** @type {import('types').HttpMethod} */ 3611 + event2.request.method 3612 + ); 3613 + let response2; 3614 + if (is_data_request) { 3615 + response2 = await render_data( 3616 + event2, 3617 + event_state, 3618 + route, 3619 + options2, 3620 + manifest, 3621 + state, 3622 + invalidated_data_nodes, 3623 + trailing_slash 3624 + ); 3625 + } else if (route.endpoint && (!route.page || is_endpoint_request(event2))) { 3626 + response2 = await render_endpoint(event2, event_state, await route.endpoint(), state); 3627 + } else if (route.page) { 3628 + if (!page_nodes) { 3629 + throw new Error("page_nodes not found. This should never happen"); 3630 + } else if (page_methods.has(method)) { 3631 + response2 = await render_page( 3632 + event2, 3633 + event_state, 3634 + route.page, 3635 + options2, 3636 + manifest, 3637 + state, 3638 + page_nodes, 3639 + resolve_opts 3640 + ); 3641 + } else { 3642 + const allowed_methods2 = new Set(allowed_page_methods); 3643 + const node = await manifest._.nodes[route.page.leaf](); 3644 + if (node?.server?.actions) { 3645 + allowed_methods2.add("POST"); 3646 + } 3647 + if (method === "OPTIONS") { 3648 + response2 = new Response(null, { 3649 + status: 204, 3650 + headers: { 3651 + allow: Array.from(allowed_methods2.values()).join(", ") 3652 + } 3653 + }); 3654 + } else { 3655 + const mod = [...allowed_methods2].reduce( 3656 + (acc, curr) => { 3657 + acc[curr] = true; 3658 + return acc; 3659 + }, 3660 + /** @type {Record<string, any>} */ 3661 + {} 3662 + ); 3663 + response2 = method_not_allowed(mod, method); 3664 + } 3665 + } 3666 + } else { 3667 + throw new Error("Route is neither page nor endpoint. This should never happen"); 3668 + } 3669 + if (request.method === "GET" && route.page && route.endpoint) { 3670 + const vary = response2.headers.get("vary")?.split(",")?.map((v) => v.trim().toLowerCase()); 3671 + if (!(vary?.includes("accept") || vary?.includes("*"))) { 3672 + response2 = new Response(response2.body, { 3673 + status: response2.status, 3674 + statusText: response2.statusText, 3675 + headers: new Headers(response2.headers) 3676 + }); 3677 + response2.headers.append("Vary", "Accept"); 3678 + } 3679 + } 3680 + return response2; 3681 + } 3682 + if (state.error && event2.isSubRequest) { 3683 + const headers22 = new Headers(request.headers); 3684 + headers22.set("x-sveltekit-error", "true"); 3685 + return await fetch(request, { headers: headers22 }); 3686 + } 3687 + if (state.error) { 3688 + return text("Internal Server Error", { 3689 + status: 500 3690 + }); 3691 + } 3692 + if (state.depth === 0) { 3693 + if (DEV && event2.url.pathname === "/.well-known/appspecific/com.chrome.devtools.json") ; 3694 + return await respond_with_error({ 3695 + event: event2, 3696 + event_state, 3697 + options: options2, 3698 + manifest, 3699 + state, 3700 + status: 404, 3701 + error: new SvelteKitError(404, "Not Found", `Not found: ${event2.url.pathname}`), 3702 + resolve_opts 3703 + }); 3704 + } 3705 + if (state.prerendering) { 3706 + return text("not found", { status: 404 }); 3707 + } 3708 + const response = await fetch(request); 3709 + return new Response(response.body, response); 3710 + } catch (e) { 3711 + return await handle_fatal_error(event2, event_state, options2, e); 3712 + } finally { 3713 + event2.cookies.set = () => { 3714 + throw new Error("Cannot use `cookies.set(...)` after the response has been generated"); 3715 + }; 3716 + event2.setHeaders = () => { 3717 + throw new Error("Cannot use `setHeaders(...)` after the response has been generated"); 3718 + }; 3719 + } 3720 + } 3721 + } 3722 + function load_page_nodes(page, manifest) { 3723 + return Promise.all([ 3724 + // we use == here rather than === because [undefined] serializes as "[null]" 3725 + ...page.layouts.map((n) => n == void 0 ? n : manifest._.nodes[n]()), 3726 + manifest._.nodes[page.leaf]() 3727 + ]); 3728 + } 3729 + function propagate_context(fn) { 3730 + return async (req, ...rest) => { 3731 + { 3732 + return fn(req, ...rest); 3733 + } 3734 + }; 3735 + } 3736 + function filter_env(env, allowed, disallowed) { 3737 + return Object.fromEntries( 3738 + Object.entries(env).filter( 3739 + ([k]) => k.startsWith(allowed) && (disallowed === "" || !k.startsWith(disallowed)) 3740 + ) 3741 + ); 3742 + } 3743 + function set_app(value) { 3744 + } 3745 + let init_promise; 3746 + let current = null; 3747 + class Server { 3748 + /** @type {import('types').SSROptions} */ 3749 + #options; 3750 + /** @type {import('@sveltejs/kit').SSRManifest} */ 3751 + #manifest; 3752 + /** @param {import('@sveltejs/kit').SSRManifest} manifest */ 3753 + constructor(manifest) { 3754 + this.#options = options; 3755 + this.#manifest = manifest; 3756 + if (IN_WEBCONTAINER) { 3757 + const respond2 = this.respond.bind(this); 3758 + this.respond = async (...args) => { 3759 + const { promise, resolve: resolve2 } = ( 3760 + /** @type {PromiseWithResolvers<void>} */ 3761 + with_resolvers() 3762 + ); 3763 + const previous = current; 3764 + current = promise; 3765 + await previous; 3766 + return respond2(...args).finally(resolve2); 3767 + }; 3768 + } 3769 + } 3770 + /** 3771 + * @param {import('@sveltejs/kit').ServerInitOptions} opts 3772 + */ 3773 + async init({ env, read }) { 3774 + const { env_public_prefix, env_private_prefix } = this.#options; 3775 + set_private_env(filter_env(env, env_private_prefix, env_public_prefix)); 3776 + set_public_env(filter_env(env, env_public_prefix, env_private_prefix)); 3777 + if (read) { 3778 + const wrapped_read = (file) => { 3779 + const result = read(file); 3780 + if (result instanceof ReadableStream) { 3781 + return result; 3782 + } else { 3783 + return new ReadableStream({ 3784 + async start(controller) { 3785 + try { 3786 + const stream = await Promise.resolve(result); 3787 + if (!stream) { 3788 + controller.close(); 3789 + return; 3790 + } 3791 + const reader = stream.getReader(); 3792 + while (true) { 3793 + const { done, value } = await reader.read(); 3794 + if (done) break; 3795 + controller.enqueue(value); 3796 + } 3797 + controller.close(); 3798 + } catch (error2) { 3799 + controller.error(error2); 3800 + } 3801 + } 3802 + }); 3803 + } 3804 + }; 3805 + set_read_implementation(wrapped_read); 3806 + } 3807 + await (init_promise ??= (async () => { 3808 + try { 3809 + const module = await get_hooks(); 3810 + this.#options.hooks = { 3811 + handle: module.handle || (({ event, resolve: resolve2 }) => resolve2(event)), 3812 + handleError: module.handleError || (({ status, error: error2, event }) => { 3813 + const error_message = format_server_error( 3814 + status, 3815 + /** @type {Error} */ 3816 + error2, 3817 + event 3818 + ); 3819 + console.error(error_message); 3820 + }), 3821 + handleFetch: module.handleFetch || (({ request, fetch: fetch2 }) => fetch2(request)), 3822 + handleValidationError: module.handleValidationError || (({ issues }) => { 3823 + console.error("Remote function schema validation failed:", issues); 3824 + return { message: "Bad Request" }; 3825 + }), 3826 + reroute: module.reroute || (() => { 3827 + }), 3828 + transport: module.transport || {} 3829 + }; 3830 + set_app({ 3831 + decoders: module.transport ? Object.fromEntries(Object.entries(module.transport).map(([k, v]) => [k, v.decode])) : {} 3832 + }); 3833 + if (module.init) { 3834 + await module.init(); 3835 + } 3836 + } catch (e) { 3837 + { 3838 + throw e; 3839 + } 3840 + } 3841 + })()); 3842 + } 3843 + /** 3844 + * @param {Request} request 3845 + * @param {import('types').RequestOptions} options 3846 + */ 3847 + async respond(request, options2) { 3848 + return respond(request, this.#options, this.#manifest, { 3849 + ...options2, 3850 + error: false, 3851 + depth: 0 3852 + }); 3853 + } 3854 + } 3855 + export { 3856 + Server 3857 + };
+13
app/.svelte-kit/output/server/internal.js
··· 1 + import { g, o, c, s, a, b } from "./chunks/internal.js"; 2 + import { s as s2, e, f } from "./chunks/environment.js"; 3 + export { 4 + g as get_hooks, 5 + o as options, 6 + s2 as set_assets, 7 + e as set_building, 8 + c as set_manifest, 9 + f as set_prerendering, 10 + s as set_private_env, 11 + a as set_public_env, 12 + b as set_read_implementation 13 + };
+72
app/.svelte-kit/output/server/manifest-full.js
··· 1 + export const manifest = (() => { 2 + function __memo(fn) { 3 + let value; 4 + return () => value ??= (value = fn()); 5 + } 6 + 7 + return { 8 + appDir: "_app", 9 + appPath: "_app", 10 + assets: new Set(["favicon.png"]), 11 + mimeTypes: {".png":"image/png"}, 12 + _: { 13 + client: {start:"_app/immutable/entry/start.B5rkkVvb.js",app:"_app/immutable/entry/app.v3Vgvfg_.js",imports:["_app/immutable/entry/start.B5rkkVvb.js","_app/immutable/chunks/BXN2zbQS.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/F8Rf94kU.js","_app/immutable/chunks/CmPt_qt9.js","_app/immutable/entry/app.v3Vgvfg_.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Zp7FgOxX.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/CmPt_qt9.js","_app/immutable/chunks/BxqNGrrm.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/DIcbJqE8.js","_app/immutable/chunks/IrKOPqpB.js","_app/immutable/chunks/F8Rf94kU.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false}, 14 + nodes: [ 15 + __memo(() => import('./nodes/0.js')), 16 + __memo(() => import('./nodes/1.js')), 17 + __memo(() => import('./nodes/2.js')), 18 + __memo(() => import('./nodes/3.js')), 19 + __memo(() => import('./nodes/4.js')), 20 + __memo(() => import('./nodes/5.js')), 21 + __memo(() => import('./nodes/6.js')), 22 + __memo(() => import('./nodes/7.js')) 23 + ], 24 + remotes: { 25 + 26 + }, 27 + routes: [ 28 + { 29 + id: "/", 30 + pattern: /^\/$/, 31 + params: [], 32 + page: { layouts: [0,], errors: [1,], leaf: 3 }, 33 + endpoint: null 34 + }, 35 + { 36 + id: "/cards", 37 + pattern: /^\/cards\/?$/, 38 + params: [], 39 + page: { layouts: [0,], errors: [1,], leaf: 6 }, 40 + endpoint: null 41 + }, 42 + { 43 + id: "/(socket)/field/[fieldId=FieldId]", 44 + pattern: /^\/field\/([^/]+?)\/?$/, 45 + params: [{"name":"fieldId","matcher":"FieldId","optional":false,"rest":false,"chained":false}], 46 + page: { layouts: [0,2,], errors: [1,,], leaf: 4 }, 47 + endpoint: null 48 + }, 49 + { 50 + id: "/(socket)/overworld", 51 + pattern: /^\/overworld\/?$/, 52 + params: [], 53 + page: { layouts: [0,2,], errors: [1,,], leaf: 5 }, 54 + endpoint: null 55 + }, 56 + { 57 + id: "/play", 58 + pattern: /^\/play\/?$/, 59 + params: [], 60 + page: { layouts: [0,], errors: [1,], leaf: 7 }, 61 + endpoint: null 62 + } 63 + ], 64 + prerendered_routes: new Set([]), 65 + matchers: async () => { 66 + const { match: FieldId } = await import ('./entries/matchers/FieldId.js') 67 + return { FieldId }; 68 + }, 69 + server_assets: {} 70 + } 71 + } 72 + })();
+13
app/.svelte-kit/output/server/nodes/0.js
··· 1 + 2 + 3 + export const index = 0; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default; 6 + export const universal = { 7 + "ssr": false, 8 + "prerender": true 9 + }; 10 + export const universal_id = "src/routes/+layout.ts"; 11 + export const imports = ["_app/immutable/nodes/0.Bpyn17vy.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/C3Bw9t1P.js"]; 12 + export const stylesheets = []; 13 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/1.js
··· 1 + 2 + 3 + export const index = 1; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/1.zAvY42iv.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Dwwks_Q7.js","_app/immutable/chunks/Zp7FgOxX.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/BfVwtNtA.js","_app/immutable/chunks/BXN2zbQS.js","_app/immutable/chunks/F8Rf94kU.js","_app/immutable/chunks/CmPt_qt9.js"]; 7 + export const stylesheets = []; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/2.js
··· 1 + 2 + 3 + export const index = 2; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/(socket)/_layout.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/2.B3v9Uros.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/Disko3h9.js"]; 7 + export const stylesheets = []; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/3.js
··· 1 + 2 + 3 + export const index = 3; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/3.rm3kMfwl.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Dwwks_Q7.js"]; 7 + export const stylesheets = ["_app/immutable/assets/3.DHpgJXmb.css"]; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/4.js
··· 1 + 2 + 3 + export const index = 4; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/(socket)/field/_fieldId_FieldId_/_page.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/4.DThprzVs.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/IrKOPqpB.js","_app/immutable/chunks/F8Rf94kU.js","_app/immutable/chunks/BXN2zbQS.js","_app/immutable/chunks/CmPt_qt9.js","_app/immutable/chunks/CFNKoBvp.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/Ni3ygk_w.js","_app/immutable/chunks/Disko3h9.js","_app/immutable/chunks/Du5sam5i.js"]; 7 + export const stylesheets = ["_app/immutable/assets/DragWindow.Ct7pKWbu.css"]; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/5.js
··· 1 + 2 + 3 + export const index = 5; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/(socket)/overworld/_page.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/5.QeLDNF63.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Zp7FgOxX.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/BxqNGrrm.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/DTiiyNL4.js","_app/immutable/chunks/Ni3ygk_w.js","_app/immutable/chunks/BXN2zbQS.js","_app/immutable/chunks/F8Rf94kU.js","_app/immutable/chunks/CmPt_qt9.js","_app/immutable/chunks/B5ZTdtgC.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/IrKOPqpB.js","_app/immutable/chunks/CFNKoBvp.js","_app/immutable/chunks/Disko3h9.js","_app/immutable/chunks/Du5sam5i.js"]; 7 + export const stylesheets = ["_app/immutable/assets/GridLines.Cmy_IU9Y.css","_app/immutable/assets/DragWindow.Ct7pKWbu.css","_app/immutable/assets/5.BH-JXrvf.css"]; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/6.js
··· 1 + 2 + 3 + export const index = 6; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/cards/_page.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/6.BjAi8SzL.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Dwwks_Q7.js","_app/immutable/chunks/BfVwtNtA.js","_app/immutable/chunks/CvUAJ54q.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/BxqNGrrm.js","_app/immutable/chunks/Zp7FgOxX.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/DTiiyNL4.js","_app/immutable/chunks/Ni3ygk_w.js","_app/immutable/chunks/IrKOPqpB.js","_app/immutable/chunks/F8Rf94kU.js"]; 7 + export const stylesheets = ["_app/immutable/assets/CardGrid.DkTs1kla.css","_app/immutable/assets/6.DYvKU7Oc.css"]; 8 + export const fonts = [];
+8
app/.svelte-kit/output/server/nodes/7.js
··· 1 + 2 + 3 + export const index = 7; 4 + let component_cache; 5 + export const component = async () => component_cache ??= (await import('../entries/pages/play/_page.svelte.js')).default; 6 + export const imports = ["_app/immutable/nodes/7.DyXTg_vC.js","_app/immutable/chunks/DTjTDYf3.js","_app/immutable/chunks/Cy0nnqwK.js","_app/immutable/chunks/Dwwks_Q7.js","_app/immutable/chunks/VCyrUZ76.js","_app/immutable/chunks/C3Bw9t1P.js","_app/immutable/chunks/wnUvJIYz.js","_app/immutable/chunks/CvUAJ54q.js","_app/immutable/chunks/BxqNGrrm.js","_app/immutable/chunks/Zp7FgOxX.js","_app/immutable/chunks/DTiiyNL4.js","_app/immutable/chunks/Ni3ygk_w.js","_app/immutable/chunks/IrKOPqpB.js","_app/immutable/chunks/F8Rf94kU.js","_app/immutable/chunks/B5ZTdtgC.js","_app/immutable/chunks/CFNKoBvp.js","_app/immutable/chunks/DIcbJqE8.js"]; 7 + export const stylesheets = ["_app/immutable/assets/CardGrid.DkTs1kla.css","_app/immutable/assets/GridLines.Cmy_IU9Y.css","_app/immutable/assets/DragWindow.Ct7pKWbu.css","_app/immutable/assets/7.DSn3KEp4.css"]; 8 + export const fonts = [];
+562
app/.svelte-kit/output/server/remote-entry.js
··· 1 + import { get_request_store, with_request_store } from "@sveltejs/kit/internal/server"; 2 + import { parse } from "devalue"; 3 + import { error, json } from "@sveltejs/kit"; 4 + import { a as stringify_remote_arg, f as flatten_issues, b as create_field_proxy, n as normalize_issue, e as set_nested_value, g as deep_set, s as stringify, c as create_remote_key } from "./chunks/shared.js"; 5 + import { ValidationError } from "@sveltejs/kit/internal"; 6 + import { D as DEV } from "./chunks/false.js"; 7 + import { b as base, c as app_dir, p as prerendering } from "./chunks/environment.js"; 8 + function create_validator(validate_or_fn, maybe_fn) { 9 + if (!maybe_fn) { 10 + return (arg) => { 11 + if (arg !== void 0) { 12 + error(400, "Bad Request"); 13 + } 14 + }; 15 + } 16 + if (validate_or_fn === "unchecked") { 17 + return (arg) => arg; 18 + } 19 + if ("~standard" in validate_or_fn) { 20 + return async (arg) => { 21 + const { event, state } = get_request_store(); 22 + const result = await validate_or_fn["~standard"].validate(arg); 23 + if (result.issues) { 24 + error( 25 + 400, 26 + await state.handleValidationError({ 27 + issues: result.issues, 28 + event 29 + }) 30 + ); 31 + } 32 + return result.value; 33 + }; 34 + } 35 + throw new Error( 36 + 'Invalid validator passed to remote function. Expected "unchecked" or a Standard Schema (https://standardschema.dev)' 37 + ); 38 + } 39 + async function get_response(info, arg, state, get_result) { 40 + await 0; 41 + const cache = get_cache(info, state); 42 + return cache[stringify_remote_arg(arg, state.transport)] ??= get_result(); 43 + } 44 + function parse_remote_response(data, transport) { 45 + const revivers = {}; 46 + for (const key in transport) { 47 + revivers[key] = transport[key].decode; 48 + } 49 + return parse(data, revivers); 50 + } 51 + async function run_remote_function(event, state, allow_cookies, arg, validate, fn) { 52 + const store = { 53 + event: { 54 + ...event, 55 + setHeaders: () => { 56 + throw new Error("setHeaders is not allowed in remote functions"); 57 + }, 58 + cookies: { 59 + ...event.cookies, 60 + set: (name, value, opts) => { 61 + if (!allow_cookies) { 62 + throw new Error("Cannot set cookies in `query` or `prerender` functions"); 63 + } 64 + if (opts.path && !opts.path.startsWith("/")) { 65 + throw new Error("Cookies set in remote functions must have an absolute path"); 66 + } 67 + return event.cookies.set(name, value, opts); 68 + }, 69 + delete: (name, opts) => { 70 + if (!allow_cookies) { 71 + throw new Error("Cannot delete cookies in `query` or `prerender` functions"); 72 + } 73 + if (opts.path && !opts.path.startsWith("/")) { 74 + throw new Error("Cookies deleted in remote functions must have an absolute path"); 75 + } 76 + return event.cookies.delete(name, opts); 77 + } 78 + } 79 + }, 80 + state: { 81 + ...state, 82 + is_in_remote_function: true 83 + } 84 + }; 85 + const validated = await with_request_store(store, () => validate(arg)); 86 + return with_request_store(store, () => fn(validated)); 87 + } 88 + function get_cache(info, state = get_request_store().state) { 89 + let cache = state.remote_data?.get(info); 90 + if (cache === void 0) { 91 + cache = {}; 92 + (state.remote_data ??= /* @__PURE__ */ new Map()).set(info, cache); 93 + } 94 + return cache; 95 + } 96 + // @__NO_SIDE_EFFECTS__ 97 + function command(validate_or_fn, maybe_fn) { 98 + const fn = maybe_fn ?? validate_or_fn; 99 + const validate = create_validator(validate_or_fn, maybe_fn); 100 + const __ = { type: "command", id: "", name: "" }; 101 + const wrapper = (arg) => { 102 + const { event, state } = get_request_store(); 103 + if (state.is_endpoint_request) { 104 + if (!["POST", "PUT", "PATCH", "DELETE"].includes(event.request.method)) { 105 + throw new Error( 106 + `Cannot call a command (\`${__.name}(${maybe_fn ? "..." : ""})\`) from a ${event.request.method} handler` 107 + ); 108 + } 109 + } else if (!event.isRemoteRequest) { 110 + throw new Error( 111 + `Cannot call a command (\`${__.name}(${maybe_fn ? "..." : ""})\`) during server-side rendering` 112 + ); 113 + } 114 + state.refreshes ??= {}; 115 + const promise = Promise.resolve(run_remote_function(event, state, true, arg, validate, fn)); 116 + promise.updates = () => { 117 + throw new Error(`Cannot call '${__.name}(...).updates(...)' on the server`); 118 + }; 119 + return ( 120 + /** @type {ReturnType<RemoteCommand<Input, Output>>} */ 121 + promise 122 + ); 123 + }; 124 + Object.defineProperty(wrapper, "__", { value: __ }); 125 + Object.defineProperty(wrapper, "pending", { 126 + get: () => 0 127 + }); 128 + return wrapper; 129 + } 130 + // @__NO_SIDE_EFFECTS__ 131 + function form(validate_or_fn, maybe_fn) { 132 + const fn = maybe_fn ?? validate_or_fn; 133 + const schema = !maybe_fn || validate_or_fn === "unchecked" ? null : ( 134 + /** @type {any} */ 135 + validate_or_fn 136 + ); 137 + function create_instance(key) { 138 + const instance = {}; 139 + instance.method = "POST"; 140 + Object.defineProperty(instance, "enhance", { 141 + value: () => { 142 + return { action: instance.action, method: instance.method }; 143 + } 144 + }); 145 + const button_props = { 146 + type: "submit", 147 + onclick: () => { 148 + } 149 + }; 150 + Object.defineProperty(button_props, "enhance", { 151 + value: () => { 152 + return { type: "submit", formaction: instance.buttonProps.formaction, onclick: () => { 153 + } }; 154 + } 155 + }); 156 + Object.defineProperty(instance, "buttonProps", { 157 + value: button_props 158 + }); 159 + const __ = { 160 + type: "form", 161 + name: "", 162 + id: "", 163 + fn: async (data, meta, form_data) => { 164 + const output = {}; 165 + output.submission = true; 166 + const { event, state } = get_request_store(); 167 + const validated = await schema?.["~standard"].validate(data); 168 + if (meta.validate_only) { 169 + return validated?.issues?.map((issue) => normalize_issue(issue, true)) ?? []; 170 + } 171 + if (validated?.issues !== void 0) { 172 + handle_issues(output, validated.issues, form_data); 173 + } else { 174 + if (validated !== void 0) { 175 + data = validated.value; 176 + } 177 + state.refreshes ??= {}; 178 + const issue = create_issues(); 179 + try { 180 + output.result = await run_remote_function( 181 + event, 182 + state, 183 + true, 184 + data, 185 + (d) => d, 186 + (data2) => !maybe_fn ? fn() : fn(data2, issue) 187 + ); 188 + } catch (e) { 189 + if (e instanceof ValidationError) { 190 + handle_issues(output, e.issues, form_data); 191 + } else { 192 + throw e; 193 + } 194 + } 195 + } 196 + if (!event.isRemoteRequest) { 197 + get_cache(__, state)[""] ??= output; 198 + } 199 + return output; 200 + } 201 + }; 202 + Object.defineProperty(instance, "__", { value: __ }); 203 + Object.defineProperty(instance, "action", { 204 + get: () => `?/remote=${__.id}`, 205 + enumerable: true 206 + }); 207 + Object.defineProperty(button_props, "formaction", { 208 + get: () => `?/remote=${__.id}`, 209 + enumerable: true 210 + }); 211 + Object.defineProperty(instance, "fields", { 212 + get() { 213 + const data = get_cache(__)?.[""]; 214 + const issues = flatten_issues(data?.issues ?? []); 215 + return create_field_proxy( 216 + {}, 217 + () => data?.input ?? {}, 218 + (path, value) => { 219 + if (data?.submission) { 220 + return; 221 + } 222 + const input = path.length === 0 ? value : deep_set(data?.input ?? {}, path.map(String), value); 223 + (get_cache(__)[""] ??= {}).input = input; 224 + }, 225 + () => issues 226 + ); 227 + } 228 + }); 229 + Object.defineProperty(instance, "result", { 230 + get() { 231 + try { 232 + return get_cache(__)?.[""]?.result; 233 + } catch { 234 + return void 0; 235 + } 236 + } 237 + }); 238 + Object.defineProperty(instance, "pending", { 239 + get: () => 0 240 + }); 241 + Object.defineProperty(button_props, "pending", { 242 + get: () => 0 243 + }); 244 + Object.defineProperty(instance, "preflight", { 245 + // preflight is a noop on the server 246 + value: () => instance 247 + }); 248 + Object.defineProperty(instance, "validate", { 249 + value: () => { 250 + throw new Error("Cannot call validate() on the server"); 251 + } 252 + }); 253 + if (key == void 0) { 254 + Object.defineProperty(instance, "for", { 255 + /** @type {RemoteForm<any, any>['for']} */ 256 + value: (key2) => { 257 + const { state } = get_request_store(); 258 + const cache_key = __.id + "|" + JSON.stringify(key2); 259 + let instance2 = (state.form_instances ??= /* @__PURE__ */ new Map()).get(cache_key); 260 + if (!instance2) { 261 + instance2 = create_instance(key2); 262 + instance2.__.id = `${__.id}/${encodeURIComponent(JSON.stringify(key2))}`; 263 + instance2.__.name = __.name; 264 + state.form_instances.set(cache_key, instance2); 265 + } 266 + return instance2; 267 + } 268 + }); 269 + } 270 + return instance; 271 + } 272 + return create_instance(); 273 + } 274 + function handle_issues(output, issues, form_data) { 275 + output.issues = issues.map((issue) => normalize_issue(issue, true)); 276 + if (form_data) { 277 + output.input = {}; 278 + for (let key of form_data.keys()) { 279 + if (/^[.\]]?_/.test(key)) continue; 280 + const is_array = key.endsWith("[]"); 281 + const values = form_data.getAll(key).filter((value) => typeof value === "string"); 282 + if (is_array) key = key.slice(0, -2); 283 + set_nested_value( 284 + /** @type {Record<string, any>} */ 285 + output.input, 286 + key, 287 + is_array ? values : values[0] 288 + ); 289 + } 290 + } 291 + } 292 + function create_issues() { 293 + return ( 294 + /** @type {InvalidField<any>} */ 295 + new Proxy( 296 + /** @param {string} message */ 297 + (message) => { 298 + if (typeof message !== "string") { 299 + throw new Error( 300 + "`invalid` should now be imported from `@sveltejs/kit` to throw validation issues. The second parameter provided to the form function (renamed to `issue`) is still used to construct issues, e.g. `invalid(issue.field('message'))`. For more info see https://github.com/sveltejs/kit/pulls/14768" 301 + ); 302 + } 303 + return create_issue(message); 304 + }, 305 + { 306 + get(target, prop) { 307 + if (typeof prop === "symbol") return ( 308 + /** @type {any} */ 309 + target[prop] 310 + ); 311 + return create_issue_proxy(prop, []); 312 + } 313 + } 314 + ) 315 + ); 316 + function create_issue(message, path = []) { 317 + return { 318 + message, 319 + path 320 + }; 321 + } 322 + function create_issue_proxy(key, path) { 323 + const new_path = [...path, key]; 324 + const issue_func = (message) => create_issue(message, new_path); 325 + return new Proxy(issue_func, { 326 + get(target, prop) { 327 + if (typeof prop === "symbol") return ( 328 + /** @type {any} */ 329 + target[prop] 330 + ); 331 + if (/^\d+$/.test(prop)) { 332 + return create_issue_proxy(parseInt(prop, 10), new_path); 333 + } 334 + return create_issue_proxy(prop, new_path); 335 + } 336 + }); 337 + } 338 + } 339 + // @__NO_SIDE_EFFECTS__ 340 + function prerender(validate_or_fn, fn_or_options, maybe_options) { 341 + const maybe_fn = typeof fn_or_options === "function" ? fn_or_options : void 0; 342 + const options = maybe_options ?? (maybe_fn ? void 0 : fn_or_options); 343 + const fn = maybe_fn ?? validate_or_fn; 344 + const validate = create_validator(validate_or_fn, maybe_fn); 345 + const __ = { 346 + type: "prerender", 347 + id: "", 348 + name: "", 349 + has_arg: !!maybe_fn, 350 + inputs: options?.inputs, 351 + dynamic: options?.dynamic 352 + }; 353 + const wrapper = (arg) => { 354 + const promise = (async () => { 355 + const { event, state } = get_request_store(); 356 + const payload = stringify_remote_arg(arg, state.transport); 357 + const id = __.id; 358 + const url = `${base}/${app_dir}/remote/${id}${payload ? `/${payload}` : ""}`; 359 + if (!state.prerendering && !DEV && !event.isRemoteRequest) { 360 + try { 361 + return await get_response(__, arg, state, async () => { 362 + const key = stringify_remote_arg(arg, state.transport); 363 + const cache = get_cache(__, state); 364 + const promise3 = cache[key] ??= fetch(new URL(url, event.url.origin).href).then( 365 + async (response) => { 366 + if (!response.ok) { 367 + throw new Error("Prerendered response not found"); 368 + } 369 + const prerendered = await response.json(); 370 + if (prerendered.type === "error") { 371 + error(prerendered.status, prerendered.error); 372 + } 373 + return prerendered.result; 374 + } 375 + ); 376 + return parse_remote_response(await promise3, state.transport); 377 + }); 378 + } catch { 379 + } 380 + } 381 + if (state.prerendering?.remote_responses.has(url)) { 382 + return ( 383 + /** @type {Promise<any>} */ 384 + state.prerendering.remote_responses.get(url) 385 + ); 386 + } 387 + const promise2 = get_response( 388 + __, 389 + arg, 390 + state, 391 + () => run_remote_function(event, state, false, arg, validate, fn) 392 + ); 393 + if (state.prerendering) { 394 + state.prerendering.remote_responses.set(url, promise2); 395 + } 396 + const result = await promise2; 397 + if (state.prerendering) { 398 + const body = { type: "result", result: stringify(result, state.transport) }; 399 + state.prerendering.dependencies.set(url, { 400 + body: JSON.stringify(body), 401 + response: json(body) 402 + }); 403 + } 404 + return result; 405 + })(); 406 + promise.catch(() => { 407 + }); 408 + return ( 409 + /** @type {RemoteResource<Output>} */ 410 + promise 411 + ); 412 + }; 413 + Object.defineProperty(wrapper, "__", { value: __ }); 414 + return wrapper; 415 + } 416 + // @__NO_SIDE_EFFECTS__ 417 + function query(validate_or_fn, maybe_fn) { 418 + const fn = maybe_fn ?? validate_or_fn; 419 + const validate = create_validator(validate_or_fn, maybe_fn); 420 + const __ = { type: "query", id: "", name: "" }; 421 + const wrapper = (arg) => { 422 + if (prerendering) { 423 + throw new Error( 424 + `Cannot call query '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead` 425 + ); 426 + } 427 + const { event, state } = get_request_store(); 428 + const get_remote_function_result = () => run_remote_function(event, state, false, arg, validate, fn); 429 + const promise = get_response(__, arg, state, get_remote_function_result); 430 + promise.catch(() => { 431 + }); 432 + promise.set = (value) => update_refresh_value(get_refresh_context(__, "set", arg), value); 433 + promise.refresh = () => { 434 + const refresh_context = get_refresh_context(__, "refresh", arg); 435 + const is_immediate_refresh = !refresh_context.cache[refresh_context.cache_key]; 436 + const value = is_immediate_refresh ? promise : get_remote_function_result(); 437 + return update_refresh_value(refresh_context, value, is_immediate_refresh); 438 + }; 439 + promise.withOverride = () => { 440 + throw new Error(`Cannot call '${__.name}.withOverride()' on the server`); 441 + }; 442 + return ( 443 + /** @type {RemoteQuery<Output>} */ 444 + promise 445 + ); 446 + }; 447 + Object.defineProperty(wrapper, "__", { value: __ }); 448 + return wrapper; 449 + } 450 + // @__NO_SIDE_EFFECTS__ 451 + function batch(validate_or_fn, maybe_fn) { 452 + const fn = maybe_fn ?? validate_or_fn; 453 + const validate = create_validator(validate_or_fn, maybe_fn); 454 + const __ = { 455 + type: "query_batch", 456 + id: "", 457 + name: "", 458 + run: (args) => { 459 + const { event, state } = get_request_store(); 460 + return run_remote_function( 461 + event, 462 + state, 463 + false, 464 + args, 465 + (array) => Promise.all(array.map(validate)), 466 + fn 467 + ); 468 + } 469 + }; 470 + let batching = { args: [], resolvers: [] }; 471 + const wrapper = (arg) => { 472 + if (prerendering) { 473 + throw new Error( 474 + `Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead` 475 + ); 476 + } 477 + const { event, state } = get_request_store(); 478 + const get_remote_function_result = () => { 479 + return new Promise((resolve, reject) => { 480 + batching.args.push(arg); 481 + batching.resolvers.push({ resolve, reject }); 482 + if (batching.args.length > 1) return; 483 + setTimeout(async () => { 484 + const batched = batching; 485 + batching = { args: [], resolvers: [] }; 486 + try { 487 + const get_result = await run_remote_function( 488 + event, 489 + state, 490 + false, 491 + batched.args, 492 + (array) => Promise.all(array.map(validate)), 493 + fn 494 + ); 495 + for (let i = 0; i < batched.resolvers.length; i++) { 496 + try { 497 + batched.resolvers[i].resolve(get_result(batched.args[i], i)); 498 + } catch (error2) { 499 + batched.resolvers[i].reject(error2); 500 + } 501 + } 502 + } catch (error2) { 503 + for (const resolver of batched.resolvers) { 504 + resolver.reject(error2); 505 + } 506 + } 507 + }, 0); 508 + }); 509 + }; 510 + const promise = get_response(__, arg, state, get_remote_function_result); 511 + promise.catch(() => { 512 + }); 513 + promise.set = (value) => update_refresh_value(get_refresh_context(__, "set", arg), value); 514 + promise.refresh = () => { 515 + const refresh_context = get_refresh_context(__, "refresh", arg); 516 + const is_immediate_refresh = !refresh_context.cache[refresh_context.cache_key]; 517 + const value = is_immediate_refresh ? promise : get_remote_function_result(); 518 + return update_refresh_value(refresh_context, value, is_immediate_refresh); 519 + }; 520 + promise.withOverride = () => { 521 + throw new Error(`Cannot call '${__.name}.withOverride()' on the server`); 522 + }; 523 + return ( 524 + /** @type {RemoteQuery<Output>} */ 525 + promise 526 + ); 527 + }; 528 + Object.defineProperty(wrapper, "__", { value: __ }); 529 + return wrapper; 530 + } 531 + Object.defineProperty(query, "batch", { value: batch, enumerable: true }); 532 + function get_refresh_context(__, action, arg) { 533 + const { state } = get_request_store(); 534 + const { refreshes } = state; 535 + if (!refreshes) { 536 + const name = __.type === "query_batch" ? `query.batch '${__.name}'` : `query '${__.name}'`; 537 + throw new Error( 538 + `Cannot call ${action} on ${name} because it is not executed in the context of a command/form remote function` 539 + ); 540 + } 541 + const cache = get_cache(__, state); 542 + const cache_key = stringify_remote_arg(arg, state.transport); 543 + const refreshes_key = create_remote_key(__.id, cache_key); 544 + return { __, state, refreshes, refreshes_key, cache, cache_key }; 545 + } 546 + function update_refresh_value({ __, refreshes, refreshes_key, cache, cache_key }, value, is_immediate_refresh = false) { 547 + const promise = Promise.resolve(value); 548 + if (!is_immediate_refresh) { 549 + cache[cache_key] = promise; 550 + } 551 + if (__.id) { 552 + refreshes[refreshes_key] = promise; 553 + } 554 + return promise.then(() => { 555 + }); 556 + } 557 + export { 558 + command, 559 + form, 560 + prerender, 561 + query 562 + };
+52
app/.svelte-kit/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "paths": { 4 + "$lib": [ 5 + "../src/lib" 6 + ], 7 + "$lib/*": [ 8 + "../src/lib/*" 9 + ], 10 + "$app/types": [ 11 + "./types/index.d.ts" 12 + ] 13 + }, 14 + "rootDirs": [ 15 + "..", 16 + "./types" 17 + ], 18 + "verbatimModuleSyntax": true, 19 + "isolatedModules": true, 20 + "lib": [ 21 + "esnext", 22 + "DOM", 23 + "DOM.Iterable" 24 + ], 25 + "moduleResolution": "bundler", 26 + "module": "esnext", 27 + "noEmit": true, 28 + "target": "esnext" 29 + }, 30 + "include": [ 31 + "ambient.d.ts", 32 + "non-ambient.d.ts", 33 + "./types/**/$types.d.ts", 34 + "../vite.config.js", 35 + "../vite.config.ts", 36 + "../src/**/*.js", 37 + "../src/**/*.ts", 38 + "../src/**/*.svelte", 39 + "../tests/**/*.js", 40 + "../tests/**/*.ts", 41 + "../tests/**/*.svelte" 42 + ], 43 + "exclude": [ 44 + "../node_modules/**", 45 + "../src/service-worker.js", 46 + "../src/service-worker/**/*.js", 47 + "../src/service-worker.ts", 48 + "../src/service-worker/**/*.ts", 49 + "../src/service-worker.d.ts", 50 + "../src/service-worker/**/*.d.ts" 51 + ] 52 + }
+21
app/.svelte-kit/types/route_meta_data.json
··· 1 + { 2 + "/(socket)": [ 3 + "src/routes/+layout.ts" 4 + ], 5 + "/": [ 6 + "src/routes/+layout.ts", 7 + "src/routes/+layout.ts" 8 + ], 9 + "/cards": [ 10 + "src/routes/+layout.ts" 11 + ], 12 + "/(socket)/field/[fieldId=FieldId]": [ 13 + "src/routes/+layout.ts" 14 + ], 15 + "/(socket)/overworld": [ 16 + "src/routes/+layout.ts" 17 + ], 18 + "/play": [ 19 + "src/routes/+layout.ts" 20 + ] 21 + }
+26
app/.svelte-kit/types/src/routes/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { }; 7 + type RouteId = '/'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type PageParentData = EnsureDefined<LayoutData>; 15 + type LayoutRouteId = RouteId | "/" | "/(socket)/field/[fieldId=FieldId]" | "/(socket)/overworld" | "/cards" | "/play" | null 16 + type LayoutParams = RouteParams & { fieldId?: MatcherParam<typeof import('../../../../src/params/FieldId.js').match> } 17 + type LayoutParentData = EnsureDefined<{}>; 18 + 19 + export type PageServerData = null; 20 + export type PageData = Expand<PageParentData>; 21 + export type PageProps = { params: RouteParams; data: PageData } 22 + export type LayoutServerData = null; 23 + export type LayoutLoad<OutputData extends OutputDataShape<LayoutParentData> = OutputDataShape<LayoutParentData>> = Kit.Load<LayoutParams, LayoutServerData, LayoutParentData, OutputData, LayoutRouteId>; 24 + export type LayoutLoadEvent = Parameters<LayoutLoad>[0]; 25 + export type LayoutData = Expand<Omit<LayoutParentData, keyof LayoutParentData & EnsureDefined<LayoutServerData>> & OptionalUnion<EnsureDefined<LayoutParentData & EnsureDefined<LayoutServerData>>>>; 26 + export type LayoutProps = { params: LayoutParams; data: LayoutData; children: import("svelte").Snippet }
+20
app/.svelte-kit/types/src/routes/(socket)/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { }; 7 + type RouteId = '/(socket)'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type LayoutRouteId = RouteId | "/(socket)/field/[fieldId=FieldId]" | "/(socket)/overworld" 15 + type LayoutParams = RouteParams & { fieldId?: MatcherParam<typeof import('../../../../../src/params/FieldId.js').match> } 16 + type LayoutParentData = EnsureDefined<import('../$types.js').LayoutData>; 17 + 18 + export type LayoutServerData = null; 19 + export type LayoutData = Expand<LayoutParentData>; 20 + export type LayoutProps = { params: LayoutParams; data: LayoutData; children: import("svelte").Snippet }
+19
app/.svelte-kit/types/src/routes/(socket)/field/[fieldId=FieldId]/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { fieldId: MatcherParam<typeof import('../../../../../../../src/params/FieldId.js').match> }; 7 + type RouteId = '/(socket)/field/[fieldId=FieldId]'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type PageParentData = Omit<EnsureDefined<import('../../../$types.js').LayoutData>, keyof import('../../$types.js').LayoutData> & EnsureDefined<import('../../$types.js').LayoutData>; 15 + 16 + export type EntryGenerator = () => Promise<Array<RouteParams>> | Array<RouteParams>; 17 + export type PageServerData = null; 18 + export type PageData = Expand<PageParentData>; 19 + export type PageProps = { params: RouteParams; data: PageData }
+18
app/.svelte-kit/types/src/routes/(socket)/overworld/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { }; 7 + type RouteId = '/(socket)/overworld'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type PageParentData = Omit<EnsureDefined<import('../../$types.js').LayoutData>, keyof import('../$types.js').LayoutData> & EnsureDefined<import('../$types.js').LayoutData>; 15 + 16 + export type PageServerData = null; 17 + export type PageData = Expand<PageParentData>; 18 + export type PageProps = { params: RouteParams; data: PageData }
+18
app/.svelte-kit/types/src/routes/cards/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { }; 7 + type RouteId = '/cards'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type PageParentData = EnsureDefined<import('../$types.js').LayoutData>; 15 + 16 + export type PageServerData = null; 17 + export type PageData = Expand<PageParentData>; 18 + export type PageProps = { params: RouteParams; data: PageData }
+18
app/.svelte-kit/types/src/routes/play/$types.d.ts
··· 1 + import type * as Kit from '@sveltejs/kit'; 2 + 3 + type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never; 4 + // @ts-ignore 5 + type MatcherParam<M> = M extends (param : string) => param is infer U ? U extends string ? U : string : string; 6 + type RouteParams = { }; 7 + type RouteId = '/play'; 8 + type MaybeWithVoid<T> = {} extends T ? T | void : T; 9 + export type RequiredKeys<T> = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; 10 + type OutputDataShape<T> = MaybeWithVoid<Omit<App.PageData, RequiredKeys<T>> & Partial<Pick<App.PageData, keyof T & keyof App.PageData>> & Record<string, any>> 11 + type EnsureDefined<T> = T extends null | undefined ? {} : T; 12 + type OptionalUnion<U extends Record<string, any>, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude<A, keyof U>]?: never } & U : never; 13 + export type Snapshot<T = any> = Kit.Snapshot<T>; 14 + type PageParentData = EnsureDefined<import('../$types.js').LayoutData>; 15 + 16 + export type PageServerData = null; 17 + export type PageData = Expand<PageParentData>; 18 + export type PageProps = { params: RouteParams; data: PageData }
eslint.config.js app/eslint.config.js
package-lock.json app/package-lock.json
package.json app/package.json
prettier.config.js app/prettier.config.js
src/app.d.ts app/src/app.d.ts
src/app.html app/src/app.html
src/app.test.ts app/src/app.test.ts
src/lib/Random.ts app/src/lib/Random.ts
src/lib/ReactiveEventTarget.svelte.ts app/src/lib/ReactiveEventTarget.svelte.ts
src/lib/algorithm/choose.ts app/src/lib/algorithm/choose.ts
src/lib/algorithm/nearestEdge.ts app/src/lib/algorithm/nearestEdge.ts
src/lib/algorithm/range.ts app/src/lib/algorithm/range.ts
src/lib/algorithm/reducer.ts app/src/lib/algorithm/reducer.ts
src/lib/appserver/provideSocket.svelte.ts app/src/lib/appserver/provideSocket.svelte.ts
src/lib/appserver/socket/AuthEvent.ts app/src/lib/appserver/socket/AuthEvent.ts
src/lib/appserver/socket/MessageEvent.ts app/src/lib/appserver/socket/MessageEvent.ts
src/lib/appserver/socket/MessageStream.svelte.ts app/src/lib/appserver/socket/MessageStream.svelte.ts
src/lib/appserver/socket/SocketV1.svelte.ts app/src/lib/appserver/socket/SocketV1.svelte.ts
src/lib/appserver/socket/SocketV1Protocol.ts app/src/lib/appserver/socket/SocketV1Protocol.ts
src/lib/components/Card.svelte app/src/lib/components/Card.svelte
src/lib/components/CardBack.svelte app/src/lib/components/CardBack.svelte
src/lib/components/CardGrid.svelte app/src/lib/components/CardGrid.svelte
src/lib/components/CardRef.svelte app/src/lib/components/CardRef.svelte
src/lib/components/DragTile.svelte app/src/lib/components/DragTile.svelte
src/lib/components/DragWindow.svelte app/src/lib/components/DragWindow.svelte
src/lib/components/Grid.svelte app/src/lib/components/Grid.svelte
src/lib/components/GridLines.svelte app/src/lib/components/GridLines.svelte
src/lib/components/Modal.svelte app/src/lib/components/Modal.svelte
src/lib/components/MoneyRef.svelte app/src/lib/components/MoneyRef.svelte
src/lib/components/Pack.svelte app/src/lib/components/Pack.svelte
src/lib/components/PackRef.svelte app/src/lib/components/PackRef.svelte
src/lib/components/ResourceRef.svelte app/src/lib/components/ResourceRef.svelte
src/lib/components/Row.svelte app/src/lib/components/Row.svelte
src/lib/components/Shimmer.svelte app/src/lib/components/Shimmer.svelte
src/lib/components/ShimmerBox.svelte app/src/lib/components/ShimmerBox.svelte
src/lib/components/ShimmerModal.svelte app/src/lib/components/ShimmerModal.svelte
src/lib/components/SpeciesRef.svelte app/src/lib/components/SpeciesRef.svelte
src/lib/components/TerrainRef.svelte app/src/lib/components/TerrainRef.svelte
src/lib/data/cards.ts app/src/lib/data/cards.ts
src/lib/data/resources.ts app/src/lib/data/resources.ts
src/lib/data/species.ts app/src/lib/data/species.ts
src/lib/data/terrains.ts app/src/lib/data/terrains.ts
src/lib/engine/Card.ts app/src/lib/engine/Card.ts
src/lib/engine/Citizen.ts app/src/lib/engine/Citizen.ts
src/lib/engine/DeckCard.ts app/src/lib/engine/DeckCard.ts
src/lib/engine/Employment.ts app/src/lib/engine/Employment.ts
src/lib/engine/FieldCard.ts app/src/lib/engine/FieldCard.ts
src/lib/engine/Flow.ts app/src/lib/engine/Flow.ts
src/lib/engine/Pack.ts app/src/lib/engine/Pack.ts
src/lib/events.ts app/src/lib/events.ts
src/lib/events/BuyPackEvent.ts app/src/lib/events/BuyPackEvent.ts
src/lib/events/CardFieldedEvent.ts app/src/lib/events/CardFieldedEvent.ts
src/lib/events/CardFocusEvent.ts app/src/lib/events/CardFocusEvent.ts
src/lib/events/CardPlacedEvent.ts app/src/lib/events/CardPlacedEvent.ts
src/lib/events/CardsReceivedEvent.ts app/src/lib/events/CardsReceivedEvent.ts
src/lib/events/CreateFlowEvent.ts app/src/lib/events/CreateFlowEvent.ts
src/lib/events/DeckOpenedEvent.ts app/src/lib/events/DeckOpenedEvent.ts
src/lib/events/DeleteFlowEvent.ts app/src/lib/events/DeleteFlowEvent.ts
src/lib/events/ShopOpenedEvent.ts app/src/lib/events/ShopOpenedEvent.ts
src/lib/events/StartFlowEvent.ts app/src/lib/events/StartFlowEvent.ts
src/lib/game/AppStateProvider.svelte app/src/lib/game/AppStateProvider.svelte
src/lib/game/CardField.svelte app/src/lib/game/CardField.svelte
src/lib/game/CardFlow.svelte app/src/lib/game/CardFlow.svelte
src/lib/game/CardTile.svelte app/src/lib/game/CardTile.svelte
src/lib/game/FlowLine.svelte app/src/lib/game/FlowLine.svelte
src/lib/game/GameStateProvider.svelte app/src/lib/game/GameStateProvider.svelte
src/lib/game/GameWindow.svelte app/src/lib/game/GameWindow.svelte
src/lib/game/ProductionOverlay.svelte app/src/lib/game/ProductionOverlay.svelte
src/lib/game/ResourceStateProvider.svelte app/src/lib/game/ResourceStateProvider.svelte
src/lib/hud/CardFocusDialog.svelte app/src/lib/hud/CardFocusDialog.svelte
src/lib/hud/CardRewardDialog.svelte app/src/lib/hud/CardRewardDialog.svelte
src/lib/hud/DeckDialog.svelte app/src/lib/hud/DeckDialog.svelte
src/lib/hud/Hud.svelte app/src/lib/hud/Hud.svelte
src/lib/hud/ProductionReport.svelte app/src/lib/hud/ProductionReport.svelte
src/lib/hud/ProductionReportDialog.svelte app/src/lib/hud/ProductionReportDialog.svelte
src/lib/hud/ShopDialog.svelte app/src/lib/hud/ShopDialog.svelte
src/lib/tutorial/Tutorial.svelte app/src/lib/tutorial/Tutorial.svelte
src/lib/tutorial/TutorialDialog.svelte app/src/lib/tutorial/TutorialDialog.svelte
src/lib/types.ts app/src/lib/types.ts
src/routes/(socket)/+layout.svelte app/src/routes/(socket)/+layout.svelte
src/routes/(socket)/play/+page.svelte app/src/routes/(socket)/play/+page.svelte
src/routes/(socket)/play/components/FieldView.svelte app/src/routes/(socket)/play/components/FieldView.svelte
src/routes/(socket)/play/components/PlayPage.svelte app/src/routes/(socket)/play/components/PlayPage.svelte
src/routes/+layout.svelte app/src/routes/+layout.svelte
src/routes/+layout.ts app/src/routes/+layout.ts
src/routes/+page.svelte app/src/routes/+page.svelte
src/routes/cards/+page.svelte app/src/routes/cards/+page.svelte
src/routes/demo/+page.svelte app/src/routes/demo/+page.svelte
static/favicon.png app/static/favicon.png
svelte.config.js app/svelte.config.js
tsconfig.json app/tsconfig.json
vite.config.ts app/vite.config.ts