blanchon commited on
Commit
95e3d2a
·
1 Parent(s): fe2e832

Nerfies-style home, paper-style match header, prettier setup, dataset README

Browse files

- Redesign home page: centered title, author + links, abstract, motivation cards, BibTeX
- Slim down match-page header to a minimal back-link + theme toggle
- Replace ternary class injections with data-attributes (score, match-info, view mode)
- Drop unused shadcn surface (accordion, alert-dialog, breadcrumb, ...) and pnpm artifacts
- Expand README with usage, schema, dev/build, viewer internals, BibTeX
- Improve <svelte:head> meta tags and robots.txt
- Add Prettier with svelte + tailwindcss plugins; format the entire codebase

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .agents/skills/hf-cli/.hf-skill-manifest.json +0 -4
  2. .agents/skills/hf-cli/SKILL.md +0 -195
  3. .claude/skills/hf-cli +0 -1
  4. .claude/skills/huggingface-doc/SKILL.md +0 -6
  5. .dockerignore +47 -1
  6. .gitignore +29 -11
  7. .prettierignore +17 -0
  8. .prettierrc +13 -0
  9. README.md +107 -20
  10. bun.lock +7 -210
  11. package.json +10 -7
  12. pnpm-lock.yaml +0 -2444
  13. pnpm-workspace.yaml +0 -3
  14. serve.ts +1 -0
  15. src/app.html +1 -2
  16. src/lib/api/hf.ts +4 -8
  17. src/lib/api/hub.ts +1 -1
  18. src/lib/api/world.ts +3 -3
  19. src/lib/assets/favicon.svg +5 -1
  20. src/lib/components/grid-tile.svelte +24 -11
  21. src/lib/components/header.svelte +23 -53
  22. src/lib/components/map-preview.svelte +15 -14
  23. src/lib/components/match-card.svelte +0 -91
  24. src/lib/components/match-info.svelte +15 -7
  25. src/lib/components/match-table/cells/duration-cell.svelte +3 -1
  26. src/lib/components/match-table/cells/event-cell.svelte +1 -1
  27. src/lib/components/match-table/cells/map-cell.svelte +3 -2
  28. src/lib/components/match-table/cells/maps-list-cell.svelte +3 -2
  29. src/lib/components/match-table/cells/rounds-played-cell.svelte +1 -1
  30. src/lib/components/match-table/cells/score-cell.svelte +13 -6
  31. src/lib/components/match-table/cells/teams-cell.svelte +7 -7
  32. src/lib/components/match-table/cells/winner-side-cell.svelte +2 -2
  33. src/lib/components/match-table/columns.ts +11 -22
  34. src/lib/components/match-table/data-table-pagination.svelte +4 -4
  35. src/lib/components/match-table/data-table-plain-header.svelte +1 -1
  36. src/lib/components/match-table/data-table-sort-header.svelte +2 -2
  37. src/lib/components/match-table/data-table-toolbar.svelte +3 -2
  38. src/lib/components/match-table/match-table.svelte +5 -5
  39. src/lib/components/match-table/rows.ts +4 -3
  40. src/lib/components/perspective-grid.svelte +176 -177
  41. src/lib/components/player-grid.svelte +14 -9
  42. src/lib/components/round-list.svelte +4 -2
  43. src/lib/components/timeline-bar.svelte +11 -12
  44. src/lib/components/ui/accordion/accordion-content.svelte +0 -27
  45. src/lib/components/ui/accordion/accordion-item.svelte +0 -17
  46. src/lib/components/ui/accordion/accordion-trigger.svelte +0 -32
  47. src/lib/components/ui/accordion/accordion.svelte +0 -19
  48. src/lib/components/ui/accordion/index.ts +0 -16
  49. src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +0 -27
  50. src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +0 -27
.agents/skills/hf-cli/.hf-skill-manifest.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "installed_revision": "377a0d3f596ece474d3c5082dd4057219cc726dc",
3
- "schema_version": 1
4
- }
 
 
 
 
 
.agents/skills/hf-cli/SKILL.md DELETED
@@ -1,195 +0,0 @@
1
- ---
2
- name: hf-cli
3
- description: "Hugging Face Hub CLI (`hf`) for downloading, uploading, and managing models, datasets, spaces, buckets, repos, papers, jobs, and more on the Hugging Face Hub. Use when: handling authentication; managing local cache; managing Hugging Face Buckets; running or scheduling jobs on Hugging Face infrastructure; managing Hugging Face repos; discussions and pull requests; browsing models, datasets and spaces; reading, searching, or browsing academic papers; managing collections; querying datasets; configuring spaces; setting up webhooks; or deploying and managing HF Inference Endpoints. Make sure to use this skill whenever the user mentions 'hf', 'huggingface', 'Hugging Face', 'huggingface-cli', or 'hugging face cli', or wants to do anything related to the Hugging Face ecosystem and to AI and ML in general. Also use for cloud storage needs like training checkpoints, data pipelines, or agent traces. Use even if the user doesn't explicitly ask for a CLI command. Replaces the deprecated `huggingface-cli`."
4
- ---
5
-
6
- Install: `curl -LsSf https://hf.co/cli/install.sh | bash -s`.
7
-
8
- The Hugging Face Hub CLI tool `hf` is available. IMPORTANT: The `hf` command replaces the deprecated `huggingface-cli` command.
9
-
10
- Use `hf --help` to view available functions. Note that auth commands are now all under `hf auth` e.g. `hf auth whoami`.
11
-
12
- Generated with `huggingface_hub v1.12.0`. Run `hf skills add --force` to regenerate.
13
-
14
- ## Commands
15
-
16
- - `hf download REPO_ID` — Download files from the Hub. `[--type CHOICE --revision TEXT --include TEXT --exclude TEXT --cache-dir TEXT --local-dir TEXT --force-download --dry-run --max-workers INTEGER --format CHOICE]`
17
- - `hf env` — Print information about the environment.
18
- - `hf sync` — Sync files between local directory and a bucket. `[--delete --ignore-times --ignore-sizes --plan TEXT --apply TEXT --dry-run --include TEXT --exclude TEXT --filter-from TEXT --existing --ignore-existing --verbose --quiet]`
19
- - `hf upload REPO_ID` — Upload a file or a folder to the Hub. Recommended for single-commit uploads. `[--type CHOICE --revision TEXT --private --include TEXT --exclude TEXT --delete TEXT --commit-message TEXT --commit-description TEXT --create-pr --every FLOAT --format CHOICE]`
20
- - `hf upload-large-folder REPO_ID LOCAL_PATH` — Upload a large folder to the Hub. Recommended for resumable uploads. `[--type CHOICE --revision TEXT --private --include TEXT --exclude TEXT --num-workers INTEGER --no-report --no-bars --format CHOICE]`
21
- - `hf version` — Print information about the hf version.
22
-
23
- ### `hf auth` — Manage authentication (login, logout, etc.).
24
-
25
- - `hf auth list` — List all stored access tokens.
26
- - `hf auth login` — Login using a token from huggingface.co/settings/tokens. `[--add-to-git-credential --force]`
27
- - `hf auth logout` — Logout from a specific token. `[--token-name TEXT]`
28
- - `hf auth switch` — Switch between access tokens. `[--token-name TEXT --add-to-git-credential]`
29
- - `hf auth token` — Print the current access token to stdout.
30
- - `hf auth whoami` — Find out which huggingface.co account you are logged in as. `[--format CHOICE]`
31
-
32
- ### `hf buckets` — Commands to interact with buckets.
33
-
34
- - `hf buckets cp SRC` — Copy files to or from buckets. `[--format CHOICE]`
35
- - `hf buckets create BUCKET_ID` — Create a new bucket. `[--private --exist-ok --format CHOICE]`
36
- - `hf buckets delete BUCKET_ID` — Delete a bucket. `[--yes --missing-ok --format CHOICE]`
37
- - `hf buckets info BUCKET_ID` — Get info about a bucket. `[--format CHOICE]`
38
- - `hf buckets list` — List buckets or files in a bucket. `[--human-readable --tree --recursive --search TEXT --format CHOICE]`
39
- - `hf buckets move FROM_ID TO_ID` — Move (rename) a bucket to a new name or namespace. `[--format CHOICE]`
40
- - `hf buckets remove ARGUMENT` — Remove files from a bucket. `[--recursive --yes --dry-run --include TEXT --exclude TEXT --format CHOICE]`
41
- - `hf buckets sync` — Sync files between local directory and a bucket. `[--delete --ignore-times --ignore-sizes --plan TEXT --apply TEXT --dry-run --include TEXT --exclude TEXT --filter-from TEXT --existing --ignore-existing --verbose --quiet]`
42
-
43
- ### `hf cache` — Manage local cache directory.
44
-
45
- - `hf cache list` — List cached repositories or revisions. `[--cache-dir TEXT --revisions --filter TEXT --format CHOICE --sort CHOICE --limit INTEGER]`
46
- - `hf cache prune` — Remove detached revisions from the cache. `[--cache-dir TEXT --yes --dry-run --format CHOICE]`
47
- - `hf cache rm TARGETS` — Remove cached repositories or revisions. `[--cache-dir TEXT --yes --dry-run --format CHOICE]`
48
- - `hf cache verify REPO_ID` — Verify checksums for a single repo revision from cache or a local directory. `[--type CHOICE --revision TEXT --cache-dir TEXT --local-dir TEXT --fail-on-missing-files --fail-on-extra-files --format CHOICE]`
49
-
50
- ### `hf collections` — Interact with collections on the Hub.
51
-
52
- - `hf collections add-item COLLECTION_SLUG ITEM_ID ITEM_TYPE` — Add an item to a collection. `[--note TEXT --exists-ok --format CHOICE]`
53
- - `hf collections create TITLE` — Create a new collection on the Hub. `[--namespace TEXT --description TEXT --private --exists-ok --format CHOICE]`
54
- - `hf collections delete COLLECTION_SLUG` — Delete a collection from the Hub. `[--missing-ok --format CHOICE]`
55
- - `hf collections delete-item COLLECTION_SLUG ITEM_OBJECT_ID` — Delete an item from a collection. `[--missing-ok --format CHOICE]`
56
- - `hf collections info COLLECTION_SLUG` — Get info about a collection on the Hub. `[--format CHOICE]`
57
- - `hf collections list` — List collections on the Hub. `[--owner TEXT --item TEXT --sort CHOICE --limit INTEGER --format CHOICE]`
58
- - `hf collections update COLLECTION_SLUG` — Update a collection's metadata on the Hub. `[--title TEXT --description TEXT --position INTEGER --private --theme TEXT --format CHOICE]`
59
- - `hf collections update-item COLLECTION_SLUG ITEM_OBJECT_ID` — Update an item in a collection. `[--note TEXT --position INTEGER --format CHOICE]`
60
-
61
- ### `hf datasets` — Interact with datasets on the Hub.
62
-
63
- - `hf datasets info DATASET_ID` — Get info about a dataset on the Hub. `[--revision TEXT --expand TEXT --format CHOICE]`
64
- - `hf datasets list` — List datasets on the Hub. `[--search TEXT --author TEXT --filter TEXT --sort CHOICE --limit INTEGER --expand TEXT --format CHOICE]`
65
- - `hf datasets parquet DATASET_ID` — List parquet file URLs available for a dataset. `[--subset TEXT --split TEXT --format CHOICE]`
66
- - `hf datasets sql SQL` — Execute a raw SQL query with DuckDB against dataset parquet URLs. `[--format CHOICE]`
67
-
68
- ### `hf discussions` — Manage discussions and pull requests on the Hub.
69
-
70
- - `hf discussions close REPO_ID NUM` — Close a discussion or pull request. `[--comment TEXT --yes --type CHOICE --format CHOICE]`
71
- - `hf discussions comment REPO_ID NUM` — Comment on a discussion or pull request. `[--body TEXT --body-file PATH --type CHOICE --format CHOICE]`
72
- - `hf discussions create REPO_ID --title TEXT` — Create a new discussion or pull request on a repo. `[--body TEXT --body-file PATH --pull-request --type CHOICE --format CHOICE]`
73
- - `hf discussions diff REPO_ID NUM` — Show the diff of a pull request. `[--type CHOICE --format CHOICE]`
74
- - `hf discussions info REPO_ID NUM` — Get info about a discussion or pull request. `[--type CHOICE --format CHOICE]`
75
- - `hf discussions list REPO_ID` — List discussions and pull requests on a repo. `[--status CHOICE --kind CHOICE --author TEXT --limit INTEGER --type CHOICE --format CHOICE]`
76
- - `hf discussions merge REPO_ID NUM` — Merge a pull request. `[--comment TEXT --yes --type CHOICE --format CHOICE]`
77
- - `hf discussions rename REPO_ID NUM NEW_TITLE` — Rename a discussion or pull request. `[--type CHOICE --format CHOICE]`
78
- - `hf discussions reopen REPO_ID NUM` — Reopen a closed discussion or pull request. `[--comment TEXT --yes --type CHOICE --format CHOICE]`
79
-
80
- ### `hf endpoints` — Manage Hugging Face Inference Endpoints.
81
-
82
- - `hf endpoints catalog deploy --repo TEXT` — Deploy an Inference Endpoint from the Model Catalog. `[--name TEXT --accelerator TEXT --namespace TEXT --format CHOICE]`
83
- - `hf endpoints catalog list` — List available Catalog models. `[--format CHOICE]`
84
- - `hf endpoints delete NAME` — Delete an Inference Endpoint permanently. `[--namespace TEXT --yes --format CHOICE]`
85
- - `hf endpoints deploy NAME --repo TEXT --framework TEXT --accelerator TEXT --instance-size TEXT --instance-type TEXT --region TEXT --vendor TEXT` — Deploy an Inference Endpoint from a Hub repository. `[--namespace TEXT --task TEXT --format CHOICE --min-replica INTEGER --max-replica INTEGER --scale-to-zero-timeout INTEGER --scaling-metric CHOICE --scaling-threshold FLOAT]`
86
- - `hf endpoints describe NAME` — Get information about an existing endpoint. `[--namespace TEXT --format CHOICE]`
87
- - `hf endpoints list` — Lists all Inference Endpoints for the given namespace. `[--namespace TEXT --format CHOICE]`
88
- - `hf endpoints pause NAME` — Pause an Inference Endpoint. `[--namespace TEXT --format CHOICE]`
89
- - `hf endpoints resume NAME` — Resume an Inference Endpoint. `[--namespace TEXT --fail-if-already-running --format CHOICE]`
90
- - `hf endpoints scale-to-zero NAME` — Scale an Inference Endpoint to zero. `[--namespace TEXT --format CHOICE]`
91
- - `hf endpoints update NAME` — Update an existing endpoint. `[--namespace TEXT --repo TEXT --accelerator TEXT --instance-size TEXT --instance-type TEXT --framework TEXT --revision TEXT --task TEXT --min-replica INTEGER --max-replica INTEGER --scale-to-zero-timeout INTEGER --scaling-metric CHOICE --scaling-threshold FLOAT --format CHOICE]`
92
-
93
- ### `hf extensions` — Manage hf CLI extensions.
94
-
95
- - `hf extensions exec NAME` — Execute an installed extension.
96
- - `hf extensions install REPO_ID` — Install an extension from a public GitHub repository. `[--force]`
97
- - `hf extensions list` — List installed extension commands. `[--format CHOICE]`
98
- - `hf extensions remove NAME` — Remove an installed extension.
99
- - `hf extensions search` — Search extensions available on GitHub (tagged with 'hf-extension' topic). `[--format CHOICE]`
100
-
101
- ### `hf jobs` — Run and manage Jobs on the Hub.
102
-
103
- - `hf jobs cancel JOB_ID` — Cancel a Job `[--namespace TEXT]`
104
- - `hf jobs hardware` — List available hardware options for Jobs
105
- - `hf jobs inspect JOB_IDS` — Display detailed information on one or more Jobs `[--namespace TEXT]`
106
- - `hf jobs logs JOB_ID` — Fetch the logs of a Job. `[--follow --tail INTEGER --namespace TEXT]`
107
- - `hf jobs ps` — List Jobs. `[--all --namespace TEXT --filter TEXT --format TEXT --quiet]`
108
- - `hf jobs run IMAGE COMMAND` — Run a Job. `[--env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --flavor CHOICE --timeout TEXT --detach --namespace TEXT]`
109
- - `hf jobs scheduled delete SCHEDULED_JOB_ID` — Delete a scheduled Job. `[--namespace TEXT]`
110
- - `hf jobs scheduled inspect SCHEDULED_JOB_IDS` — Display detailed information on one or more scheduled Jobs `[--namespace TEXT]`
111
- - `hf jobs scheduled ps` — List scheduled Jobs `[--all --namespace TEXT --filter TEXT --format TEXT --quiet]`
112
- - `hf jobs scheduled resume SCHEDULED_JOB_ID` — Resume (unpause) a scheduled Job. `[--namespace TEXT]`
113
- - `hf jobs scheduled run SCHEDULE IMAGE COMMAND` — Schedule a Job. `[--suspend --concurrency --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --flavor CHOICE --timeout TEXT --namespace TEXT]`
114
- - `hf jobs scheduled suspend SCHEDULED_JOB_ID` — Suspend (pause) a scheduled Job. `[--namespace TEXT]`
115
- - `hf jobs scheduled uv run SCHEDULE SCRIPT` — Run a UV script (local file or URL) on HF infrastructure `[--suspend --concurrency --image TEXT --flavor CHOICE --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --timeout TEXT --namespace TEXT --with TEXT --python TEXT]`
116
- - `hf jobs stats` — Fetch the resource usage statistics and metrics of Jobs `[--namespace TEXT]`
117
- - `hf jobs uv run SCRIPT` — Run a UV script (local file or URL) on HF infrastructure `[--image TEXT --flavor CHOICE --env TEXT --secrets TEXT --label TEXT --volume TEXT --env-file TEXT --secrets-file TEXT --timeout TEXT --detach --namespace TEXT --with TEXT --python TEXT]`
118
-
119
- ### `hf models` — Interact with models on the Hub.
120
-
121
- - `hf models info MODEL_ID` — Get info about a model on the Hub. `[--revision TEXT --expand TEXT --format CHOICE]`
122
- - `hf models list` — List models on the Hub. `[--search TEXT --author TEXT --filter TEXT --num-parameters TEXT --sort CHOICE --limit INTEGER --expand TEXT --format CHOICE]`
123
-
124
- ### `hf papers` — Interact with papers on the Hub.
125
-
126
- - `hf papers info PAPER_ID` — Get info about a paper on the Hub. `[--format CHOICE]`
127
- - `hf papers list` — List daily papers on the Hub. `[--date TEXT --week TEXT --month TEXT --submitter TEXT --sort CHOICE --limit INTEGER --format CHOICE]`
128
- - `hf papers read PAPER_ID` — Read a paper as markdown.
129
- - `hf papers search QUERY` — Search papers on the Hub. `[--limit INTEGER --format CHOICE]`
130
-
131
- ### `hf repos` — Manage repos on the Hub.
132
-
133
- - `hf repos branch create REPO_ID BRANCH` — Create a new branch for a repo on the Hub. `[--revision TEXT --type CHOICE --exist-ok --format CHOICE]`
134
- - `hf repos branch delete REPO_ID BRANCH` — Delete a branch from a repo on the Hub. `[--type CHOICE --format CHOICE]`
135
- - `hf repos create REPO_ID` — Create a new repo on the Hub. `[--type CHOICE --space-sdk TEXT --private --public --protected --exist-ok --resource-group-id TEXT --flavor CHOICE --storage CHOICE --sleep-time INTEGER --secrets TEXT --secrets-file TEXT --env TEXT --env-file TEXT --volume TEXT --format CHOICE]`
136
- - `hf repos delete REPO_ID` — Delete a repo from the Hub. This is an irreversible operation. `[--type CHOICE --missing-ok --yes --format CHOICE]`
137
- - `hf repos delete-files REPO_ID PATTERNS` — Delete files from a repo on the Hub. `[--type CHOICE --revision TEXT --commit-message TEXT --commit-description TEXT --create-pr --format CHOICE]`
138
- - `hf repos duplicate FROM_ID` — Duplicate a repo on the Hub (model, dataset, or Space). `[--type CHOICE --private --public --protected --exist-ok --flavor CHOICE --storage CHOICE --sleep-time INTEGER --secrets TEXT --secrets-file TEXT --env TEXT --env-file TEXT --volume TEXT --format CHOICE]`
139
- - `hf repos move FROM_ID TO_ID` — Move a repository from a namespace to another namespace. `[--type CHOICE --format CHOICE]`
140
- - `hf repos settings REPO_ID` — Update the settings of a repository. `[--gated CHOICE --private --public --protected --type CHOICE --format CHOICE]`
141
- - `hf repos tag create REPO_ID TAG` — Create a tag for a repo. `[--message TEXT --revision TEXT --type CHOICE --format CHOICE]`
142
- - `hf repos tag delete REPO_ID TAG` — Delete a tag for a repo. `[--yes --type CHOICE --format CHOICE]`
143
- - `hf repos tag list REPO_ID` — List tags for a repo. `[--type CHOICE --format CHOICE]`
144
-
145
- ### `hf skills` — Manage skills for AI assistants.
146
-
147
- - `hf skills add` — Download a Hugging Face skill and install it for an AI assistant. `[--claude --global --dest PATH --force]`
148
- - `hf skills preview` — Print the generated `hf-cli` SKILL.md to stdout.
149
- - `hf skills upgrade` — Upgrade installed Hugging Face marketplace skills. `[--claude --global --dest PATH]`
150
-
151
- ### `hf spaces` — Interact with spaces on the Hub.
152
-
153
- - `hf spaces dev-mode SPACE_ID` — Enable or disable dev mode on a Space. `[--stop]`
154
- - `hf spaces hot-reload SPACE_ID` — Hot-reload any Python file of a Space without a full rebuild + restart. `[--local-file PATH --skip-checks --skip-summary]`
155
- - `hf spaces info SPACE_ID` — Get info about a space on the Hub. `[--revision TEXT --expand TEXT --format CHOICE]`
156
- - `hf spaces list` — List spaces on the Hub. `[--search TEXT --author TEXT --filter TEXT --sort CHOICE --limit INTEGER --expand TEXT --format CHOICE]`
157
- - `hf spaces logs SPACE_ID` — Fetch the run or build logs of a Space. `[--build --follow --tail INTEGER]`
158
- - `hf spaces search QUERY` — Search spaces on the Hub using semantic search. `[--filter TEXT --sdk TEXT --include-non-running --description --limit INTEGER --format CHOICE]`
159
- - `hf spaces volumes delete SPACE_ID` — Remove all volumes from a Space. `[--yes --format CHOICE]`
160
- - `hf spaces volumes list SPACE_ID` — List volumes mounted in a Space. `[--format CHOICE]`
161
- - `hf spaces volumes set SPACE_ID` — Set (replace) volumes for a Space. `[--volume TEXT --format CHOICE]`
162
-
163
- ### `hf webhooks` — Manage webhooks on the Hub.
164
-
165
- - `hf webhooks create --watch TEXT` — Create a new webhook. `[--url TEXT --job-id TEXT --domain CHOICE --secret TEXT --format CHOICE]`
166
- - `hf webhooks delete WEBHOOK_ID` — Delete a webhook permanently. `[--yes --format CHOICE]`
167
- - `hf webhooks disable WEBHOOK_ID` — Disable an active webhook. `[--format CHOICE]`
168
- - `hf webhooks enable WEBHOOK_ID` — Enable a disabled webhook. `[--format CHOICE]`
169
- - `hf webhooks info WEBHOOK_ID` — Show full details for a single webhook. `[--format CHOICE]`
170
- - `hf webhooks list` — List all webhooks for the current user. `[--format CHOICE]`
171
- - `hf webhooks update WEBHOOK_ID` — Update an existing webhook. Only provided options are changed. `[--url TEXT --watch TEXT --domain CHOICE --secret TEXT --format CHOICE]`
172
-
173
- ## Common options
174
-
175
- - `--format` — Output format: `--format json` (or `--json`) or `--format table` (default).
176
- - `-q / --quiet` — Minimal output.
177
- - `--revision` — Git revision id which can be a branch name, a tag, or a commit hash.
178
- - `--token` — Use a User Access Token. Prefer setting `HF_TOKEN` env var instead of passing `--token`.
179
- - `--type` — The type of repository (model, dataset, or space).
180
-
181
- ## Mounting repos as local filesystems
182
-
183
- To mount Hub repositories or buckets as local filesystems — no download, no copy, no waiting — use `hf-mount`. Files are fetched on demand. GitHub: https://github.com/huggingface/hf-mount
184
-
185
- Install: `curl -fsSL https://raw.githubusercontent.com/huggingface/hf-mount/main/install.sh | sh`
186
-
187
- Some command examples:
188
- - `hf-mount start repo openai-community/gpt2 /tmp/gpt2` — mount a repo (read-only)
189
- - `hf-mount start --hf-token $HF_TOKEN bucket myuser/my-bucket /tmp/data` — mount a bucket (read-write)
190
- - `hf-mount status` / `hf-mount stop /tmp/data` — list or unmount
191
-
192
- ## Tips
193
-
194
- - Use `hf <command> --help` for full options, descriptions, usage, and real-world examples
195
- - Authenticate with `HF_TOKEN` env var (recommended) or with `--token`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.claude/skills/hf-cli DELETED
@@ -1 +0,0 @@
1
- ../../.agents/skills/hf-cli
 
 
.claude/skills/huggingface-doc/SKILL.md DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- name: Hugging Face Doc
3
- description: Use Hugging Face Docs API to efficiently search for huggingface related information
4
- ---
5
-
6
- ⁠Use api https://huggingface.co/api/docs/search?q={query} to find huggingface related information
 
 
 
 
 
 
 
.dockerignore CHANGED
@@ -1,14 +1,60 @@
 
1
  node_modules
 
 
2
  .svelte-kit
3
  dist
4
  build
 
 
 
 
 
 
 
 
 
 
5
  .git
6
  .gitignore
 
 
 
7
  .dockerignore
8
  Dockerfile
9
- README.md
 
 
10
  .agents
11
  .claude
 
12
  .vscode
 
 
 
 
 
 
 
 
13
  .DS_Store
 
14
  *.log
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build output and caches
2
  node_modules
3
+ .bun
4
+ .bun-cache
5
  .svelte-kit
6
  dist
7
  build
8
+ .output
9
+ .vercel
10
+ .netlify
11
+ .wrangler
12
+ coverage
13
+ *.tsbuildinfo
14
+ vite.config.js.timestamp-*
15
+ vite.config.ts.timestamp-*
16
+
17
+ # VCS and git tooling
18
  .git
19
  .gitignore
20
+ .gitattributes
21
+
22
+ # Docker tooling (not needed inside the image)
23
  .dockerignore
24
  Dockerfile
25
+ docker-compose*.yml
26
+
27
+ # Tooling and editor configs
28
  .agents
29
  .claude
30
+ .cursor
31
  .vscode
32
+ .idea
33
+ .zed
34
+ .husky
35
+ .github
36
+ .npmrc
37
+ .editorconfig
38
+
39
+ # OS / temp
40
  .DS_Store
41
+ Thumbs.db
42
  *.log
43
+ *.tmp
44
+ *.swp
45
+
46
+ # Env files (handled at runtime, not baked in)
47
+ .env
48
+ .env.*
49
+ !.env.example
50
+
51
+ # Lockfiles for other package managers
52
+ package-lock.json
53
+ pnpm-lock.yaml
54
+ yarn.lock
55
+ pnpm-workspace.yaml
56
+
57
+ # Repo docs not needed in the runtime image
58
+ README.md
59
+ TODO.md
60
+ docs
.gitignore CHANGED
@@ -1,25 +1,43 @@
 
1
  node_modules
 
 
 
 
2
 
3
- # Output
 
 
 
4
  .output
5
  .vercel
6
  .netlify
7
  .wrangler
8
- /.svelte-kit
9
- /build
10
- /dist
 
11
 
12
- # OS
13
- .DS_Store
14
- Thumbs.db
 
15
 
16
- # Env
17
  .env
18
  .env.*
19
  !.env.example
20
  !.env.test
21
 
22
- # Vite
23
- vite.config.js.timestamp-*
24
- vite.config.ts.timestamp-*
25
 
 
 
 
 
 
 
 
 
 
 
1
+ # Dependencies
2
  node_modules
3
+ .bun
4
+ .bun-cache
5
+ .npm
6
+ .pnpm-store
7
 
8
+ # Build output
9
+ /.svelte-kit
10
+ /build
11
+ /dist
12
  .output
13
  .vercel
14
  .netlify
15
  .wrangler
16
+ coverage
17
+ *.tsbuildinfo
18
+ vite.config.js.timestamp-*
19
+ vite.config.ts.timestamp-*
20
 
21
+ # Lockfiles for package managers we don't use
22
+ package-lock.json
23
+ pnpm-lock.yaml
24
+ yarn.lock
25
 
26
+ # Environment
27
  .env
28
  .env.*
29
  !.env.example
30
  !.env.test
31
 
32
+ # Logs
33
+ *.log
 
34
 
35
+ # Editor / OS
36
+ .DS_Store
37
+ Thumbs.db
38
+ .idea
39
+ .vscode
40
+ .zed
41
+ .cursor
42
+ *.swp
43
+ *.tmp
.prettierignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ node_modules
2
+ .bun
3
+ .bun-cache
4
+ .svelte-kit
5
+ dist
6
+ build
7
+ .output
8
+ .vercel
9
+ .netlify
10
+ coverage
11
+ bun.lock
12
+ package-lock.json
13
+ pnpm-lock.yaml
14
+ yarn.lock
15
+ *.min.js
16
+ *.min.css
17
+ static/
.prettierrc ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "useTabs": true,
3
+ "singleQuote": true,
4
+ "trailingComma": "none",
5
+ "printWidth": 100,
6
+ "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
7
+ "overrides": [
8
+ {
9
+ "files": "*.svelte",
10
+ "options": { "parser": "svelte" }
11
+ }
12
+ ]
13
+ }
README.md CHANGED
@@ -1,40 +1,127 @@
1
  ---
2
- title: Counter Strike 2 Dataset
3
- emoji: 🔥
4
- colorFrom: pink
5
  colorTo: gray
6
  sdk: docker
7
  app_port: 7860
8
  pinned: false
9
  license: mit
10
- short_description: Counter Strike 2 Dataset
11
  ---
12
 
13
- # CS2 Render Dataset Viewer
14
 
15
- Browse Counter-Strike 2 esports matches with synchronized 10-perspective POV
16
- videos, sourced from the [`blanchon/cs2_dataset_render`](https://huggingface.co/datasets/blanchon/cs2_dataset_render)
17
- Hugging Face dataset.
18
 
19
- Built with SvelteKit (`@sveltejs/adapter-static`, SPA mode) all data is
20
- fetched client-side from the dataset's parquet files via `parquet-wasm`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  ## Develop
23
 
24
  ```sh
25
- pnpm install
26
- pnpm dev
 
 
 
27
  ```
28
 
29
- ## Build
30
 
31
- ```sh
32
- pnpm build # → dist/
33
- pnpm preview # serve dist/ locally
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  ```
35
 
36
- The Space's build command (`npm run build`, configured in the frontmatter)
37
- runs the same Vite build. Output is `dist/index.html` plus an `_app` chunk
38
- directory and the `static/maps/` radar assets.
39
 
40
- Configuration reference: <https://huggingface.co/docs/hub/spaces-config-reference>
 
1
  ---
2
+ title: Counter Strike 2 Dataset - Viewer
3
+ emoji: 🎯
4
+ colorFrom: yellow
5
  colorTo: gray
6
  sdk: docker
7
  app_port: 7860
8
  pinned: false
9
  license: mit
10
+ short_description: Browse the CS2 dataset by match, map, round, and POV.
11
  ---
12
 
13
+ # Counter Strike 2 Dataset - Viewer
14
 
15
+ Browser for [`blanchon/cs2_dataset_render`](https://huggingface.co/datasets/blanchon/cs2_dataset_render), a rendered Counter Strike 2 dataset built from professional HLTV demos. The viewer lists every match, map, and round in the dataset and plays the 10 synchronized player POVs back-to-back on a single timeline — without downloading the full archive.
 
 
16
 
17
+ It's a pure-frontend SvelteKit app: parquet indexes are read in the browser via [`hyparquet`](https://github.com/hyparquet/hyparquet), preview MP4s stream from Hugging Face, and 10 chunked players stay in sync through a custom [`mediabunny`](https://mediabunny.dev/) pipeline.
18
+
19
+ ## Links
20
+
21
+ - **Dataset:** <https://huggingface.co/datasets/blanchon/cs2_dataset_render>
22
+ - **Live viewer (HF Space):** <https://huggingface.co/spaces/blanchon/counter-strike-2-dataset-viewer>
23
+ - **Source dataset (raw demos):** <https://huggingface.co/datasets/blanchon/cs2_dataset_demo>
24
+ - **GitHub:** <https://github.com/julien-blanchon/counter-strike-2-dataset>
25
+ - **Author:** [Julien Blanchon](https://guybrush.ink/) — [@JulienBlanchon](https://x.com/JulienBlanchon)
26
+
27
+ ## Motivation
28
+
29
+ Counter Strike 2 is an interesting environment for sequential decision-making: long horizons, partial observability, dense visual signal, spatialized audio, 5 vs 5 multi-agent dynamics, and a competitive equilibrium that is genuinely hard. Pro HLTV demos give us tens of thousands of hours of expert play, but until now they've lived in a binary `.dem` format that is not directly trainable.
30
+
31
+ This dataset turns those demos into rendered, frame-accurate, fully-annotated training data. A few of the things it makes tractable:
32
+
33
+ - **Behaviour cloning / VLA policies.** `(frame, audio) → action` for vision-conditioned action models.
34
+ - **Inverse Dynamics Models (IDM).** `(frame_t, frame_{t+k}) → action` to recover actions from unlabelled video — the workhorse for VPT-style pre-training.
35
+ - **Forward dynamics / world models.** `(frame, action) → frame_{t+1}` with all 10 player POVs of the same world state available as supervision.
36
+ - **Spatial-audio conditioning.** Audio is recorded per-player with HRTF positional cues, so models can learn to localize footsteps, gunfire, and callouts.
37
+ - **Multi-agent training.** All 10 perspectives of the same round are kept aligned tick-for-tick — useful for collaborative policies, opponent modelling, and multi-player world models.
38
+
39
+ ## Dataset
40
+
41
+ `blanchon/cs2_dataset_render`, derived from `blanchon/cs2_dataset_demo`. Licensed under `CC-BY-4.0`.
42
+
43
+ Each row is a one-minute-or-shorter chunk of a single player's POV. Four configs are exposed:
44
+
45
+ | Config | Row | Use |
46
+ | -------------------- | ------------------------------------------------------------------------------------- | ------------------------------------- |
47
+ | `previews` (default) | One low-res `preview.mp4` per chunk + 1 Hz inputs/world sidecars | Cheap browsing, viewer, sanity checks |
48
+ | `chunks` | Path-only references to `video.mp4` + `audio.wav`, with embedded inputs/world streams | Full-resolution training |
49
+ | `matches` | One row per `(match_id, map_name)` with team/event/date metadata | Index / filtering |
50
+ | `rounds` | One row per `(match_id, map_name, round)` with tick boundaries | Index / filtering |
51
+
52
+ ### Filesystem layout
53
+
54
+ ```text
55
+ index/
56
+ manifest-<machine>-<uuid>.parquet # matches index
57
+ rounds-<machine>-<uuid>.parquet # rounds index
58
+ data/
59
+ match_id=<id>/map_name=<map>/player=<0-9>/
60
+ chunks-preview-<machine>-<uuid>.parquet
61
+ chunks-full-<machine>-<uuid>.parquet
62
+ chunks/chunk_<n>/{video.mp4,audio.wav}
63
+ previews/chunk_<n>/{preview.mp4,inputs.preview.json,world.preview.jsonl}
64
+ ```
65
+
66
+ Hive-style `key=value` partitioning lets you prune at the path level. Recording starts at `freeze_end_tick` and stops at the player's death tick (or round end for survivors), so player streams have different durations within the same round.
67
+
68
+ ### Quick query
69
+
70
+ ```python
71
+ from datasets import load_dataset
72
+
73
+ # Default lightweight preview rows
74
+ previews = load_dataset("blanchon/cs2_dataset_render", split="train", streaming=True)
75
+
76
+ # Full training rows, columnar load
77
+ chunks = load_dataset(
78
+ "blanchon/cs2_dataset_render", "chunks",
79
+ split="train", streaming=True,
80
+ columns=["video", "audio", "inputs", "worlds", "match_id", "round", "player"],
81
+ filters=[("player", "==", 0)],
82
+ )
83
+ ```
84
+
85
+ ```sql
86
+ -- Match index via DuckDB
87
+ SELECT match_id, map_name, team1, team2, event, match_date
88
+ FROM 'hf://datasets/blanchon/cs2_dataset_render/index/manifest-*.parquet'
89
+ LIMIT 20;
90
+ ```
91
 
92
  ## Develop
93
 
94
  ```sh
95
+ bun install
96
+ bun run dev # vite dev server
97
+ bun run build # static build → dist/
98
+ bun run preview # serve the build
99
+ bun run check # svelte-check
100
  ```
101
 
102
+ The repo ships a `Dockerfile` and `serve.ts` that mirror the Hugging Face Space deployment.
103
 
104
+ ## Viewer internals
105
+
106
+ - **`hyparquet` + `hyparquet-compressors`** read the match and round parquet shards directly from `hf://` URLs. No server, no DuckDB, no WASM bundle larger than necessary.
107
+ - **`mediabunny`** powers the 10 chunked POV players. One round's worth of `preview.mp4` chunks per player is concatenated into a single virtual timeline; players who died early have shorter timelines and gracefully fall out.
108
+ - **`world.preview.jsonl`** drives the minimap (player positions, team, alive/dead, weapon) and the per-tick state overlay.
109
+ - **`inputs.preview.json`** drives the input-overlay HUD (movement keys, mouse, fire/jump).
110
+
111
+ The whole viewer is a static SvelteKit build — there is no backend.
112
+
113
+ ## Citation
114
+
115
+ ```bibtex
116
+ @misc{blanchon2026cs2dataset,
117
+ author = {Julien Blanchon},
118
+ title = {Counter Strike 2 Dataset},
119
+ year = {2026},
120
+ publisher = {Hugging Face},
121
+ howpublished = {\url{https://github.com/julien-blanchon/counter-strike-2-dataset}},
122
+ }
123
  ```
124
 
125
+ ## License
 
 
126
 
127
+ Code: MIT. Dataset: CC-BY-4.0.
bun.lock CHANGED
@@ -12,7 +12,6 @@
12
  "devDependencies": {
13
  "@fontsource-variable/oxanium": "^5.2.8",
14
  "@fontsource-variable/roboto-slab": "^5.2.8",
15
- "@internationalized/date": "^3.12.1",
16
  "@sveltejs/adapter-static": "latest",
17
  "@sveltejs/kit": "latest",
18
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
@@ -20,45 +19,31 @@
20
  "@tanstack/table-core": "^8.21.3",
21
  "bits-ui": "^2.18.0",
22
  "clsx": "^2.1.1",
23
- "formsnap": "^2.0.1",
24
- "layerchart": "2.0.0-next.48",
25
  "mode-watcher": "^1.1.0",
26
- "paneforge": "^1.0.2",
27
  "phosphor-svelte": "^3.1.0",
 
 
 
28
  "shadcn-svelte": "^1.2.7",
29
  "svelte": "^5.55.2",
30
  "svelte-check": "^4.4.6",
31
  "svelte-sonner": "^1.1.1",
32
- "sveltekit-superforms": "^2.30.1",
33
  "tailwind-merge": "^3.5.0",
34
  "tailwind-variants": "^3.2.2",
35
  "tailwindcss": "^4.2.2",
36
  "tw-animate-css": "^1.4.0",
37
  "typescript": "^6.0.2",
38
- "vaul-svelte": "1.0.0-next.7",
39
  "vite": "^8.0.7",
40
  },
41
  },
42
  },
43
  "packages": {
44
- "@ark/schema": ["@ark/schema@0.56.0", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA=="],
45
-
46
- "@ark/util": ["@ark/util@0.56.0", "", {}, "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA=="],
47
-
48
- "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="],
49
-
50
- "@dagrejs/dagre": ["@dagrejs/dagre@2.0.4", "", { "dependencies": { "@dagrejs/graphlib": "3.0.4" } }, "sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA=="],
51
-
52
- "@dagrejs/graphlib": ["@dagrejs/graphlib@3.0.4", "", {}, "sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg=="],
53
-
54
  "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "2.8.1" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
55
 
56
  "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
57
 
58
  "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
59
 
60
- "@exodus/schemasafe": ["@exodus/schemasafe@1.3.0", "", {}, "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw=="],
61
-
62
  "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="],
63
 
64
  "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "1.7.5", "@floating-ui/utils": "0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="],
@@ -69,10 +54,6 @@
69
 
70
  "@fontsource-variable/roboto-slab": ["@fontsource-variable/roboto-slab@5.2.8", "", {}, "sha512-cdvOSwocP50xS01gXqnGxw7uFcCZQgn1IDlqiAmNuZP4uEVScYAKMDC+aWsbP1grn9QdMJ2frhcuVBNXniBVGA=="],
71
 
72
- "@hapi/hoek": ["@hapi/hoek@9.3.0", "", {}, "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="],
73
-
74
- "@hapi/topo": ["@hapi/topo@5.1.0", "", { "dependencies": { "@hapi/hoek": "9.3.0" } }, "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg=="],
75
-
76
  "@internationalized/date": ["@internationalized/date@3.12.1", "", { "dependencies": { "@swc/helpers": "0.5.21" } }, "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ=="],
77
 
78
  "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "1.5.5", "@jridgewell/trace-mapping": "0.3.31" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
@@ -85,22 +66,12 @@
85
 
86
  "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "3.1.2", "@jridgewell/sourcemap-codec": "1.5.5" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
87
 
88
- "@layerstack/svelte-actions": ["@layerstack/svelte-actions@1.0.1-next.18", "", { "dependencies": { "@floating-ui/dom": "1.7.6", "@layerstack/utils": "2.0.0-next.18", "d3-scale": "4.0.2" } }, "sha512-gxPzCnJ1c9LTfWtRqLUzefCx+k59ZpxDUQ2XB+LokveZQPe7IDSOwHaBOEMlaGoGrtwc3Ft8dSZq+2WT2o9u/g=="],
89
-
90
- "@layerstack/svelte-state": ["@layerstack/svelte-state@0.1.0-next.23", "", { "dependencies": { "@layerstack/utils": "2.0.0-next.18" } }, "sha512-7O4umv+gXwFfs3/vjzFWYHNXGwYnnjBapWJ5Y+9u99F4eVk6rh4ocNwqkqQNkpMZ5tUJBlRTWjPE1So6+hEzIg=="],
91
-
92
- "@layerstack/tailwind": ["@layerstack/tailwind@2.0.0-next.21", "", { "dependencies": { "@layerstack/utils": "2.0.0-next.18", "clsx": "2.1.1", "d3-array": "3.2.4", "tailwind-merge": "3.5.0" } }, "sha512-Qgp2EpmEHmjtura8MQzWicR6ztBRSsRvddakFtx9ShrLMz6jWzd6bCMVVRu44Q3ZOrtXmSu4QxjCZWu1ytvuPg=="],
93
-
94
- "@layerstack/utils": ["@layerstack/utils@2.0.0-next.18", "", { "dependencies": { "d3-array": "3.2.4", "d3-time": "3.1.0", "d3-time-format": "4.1.0" } }, "sha512-EYILHpfBRYMMEahajInu9C2AXQom5IcAEdtCeucD3QIl/fdDgRbtzn6/8QW9ewumfyNZetdUvitOksmI1+gZYQ=="],
95
-
96
  "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "0.10.1" }, "peerDependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
97
 
98
  "@oxc-project/types": ["@oxc-project/types@0.127.0", "", {}, "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ=="],
99
 
100
  "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
101
 
102
- "@poppinss/macroable": ["@poppinss/macroable@1.1.2", "", {}, "sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA=="],
103
-
104
  "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.17", "", { "os": "android", "cpu": "arm64" }, "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ=="],
105
 
106
  "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw=="],
@@ -133,12 +104,6 @@
133
 
134
  "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.17", "", {}, "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg=="],
135
 
136
- "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "9.3.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="],
137
-
138
- "@sideway/formula": ["@sideway/formula@3.0.1", "", {}, "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="],
139
-
140
- "@sideway/pinpoint": ["@sideway/pinpoint@2.0.0", "", {}, "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="],
141
-
142
  "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
143
 
144
  "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "8.16.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="],
@@ -187,126 +152,40 @@
187
 
188
  "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="],
189
 
190
- "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="],
191
-
192
- "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "3.2.2", "@types/geojson": "7946.0.16" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="],
193
-
194
  "@types/dom-mediacapture-transform": ["@types/dom-mediacapture-transform@0.1.11", "", { "dependencies": { "@types/dom-webcodecs": "0.1.13" } }, "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ=="],
195
 
196
  "@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="],
197
 
198
  "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
199
 
200
- "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="],
201
-
202
  "@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="],
203
 
204
  "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
205
 
206
- "@types/validator": ["@types/validator@13.15.10", "", {}, "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA=="],
207
-
208
- "@typeschema/class-validator": ["@typeschema/class-validator@0.3.0", "", { "dependencies": { "@typeschema/core": "0.14.0" }, "optionalDependencies": { "class-validator": "0.14.4" } }, "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww=="],
209
-
210
- "@typeschema/core": ["@typeschema/core@0.14.0", "", {}, "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w=="],
211
-
212
- "@valibot/to-json-schema": ["@valibot/to-json-schema@1.6.0", "", { "peerDependencies": { "valibot": "1.3.1" } }, "sha512-d6rYyK5KVa2XdqamWgZ4/Nr+cXhxjy7lmpe6Iajw15J/jmU+gyxl2IEd1Otg1d7Rl3gOQL5reulnSypzBtYy1A=="],
213
-
214
- "@vinejs/compiler": ["@vinejs/compiler@3.0.0", "", {}, "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw=="],
215
-
216
- "@vinejs/vine": ["@vinejs/vine@3.0.1", "", { "dependencies": { "@poppinss/macroable": "1.1.2", "@types/validator": "13.15.10", "@vinejs/compiler": "3.0.0", "camelcase": "8.0.0", "dayjs": "1.11.20", "dlv": "1.1.3", "normalize-url": "8.1.1", "validator": "13.15.35" } }, "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ=="],
217
-
218
  "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="],
219
 
220
  "aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="],
221
 
222
- "arkregex": ["arkregex@0.0.5", "", { "dependencies": { "@ark/util": "0.56.0" } }, "sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw=="],
223
-
224
- "arktype": ["arktype@2.2.0", "", { "dependencies": { "@ark/schema": "0.56.0", "@ark/util": "0.56.0", "arkregex": "0.0.5" } }, "sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ=="],
225
-
226
  "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
227
 
228
  "bits-ui": ["bits-ui@2.18.0", "", { "dependencies": { "@floating-ui/core": "1.7.5", "@floating-ui/dom": "1.7.6", "esm-env": "1.2.2", "runed": "0.35.1", "svelte-toolbelt": "0.10.6", "tabbable": "6.4.0" }, "peerDependencies": { "@internationalized/date": "3.12.1", "svelte": "5.55.5" } }, "sha512-GLOBZRVy3hxNHIQ2MpD/+5aK9KcBFZRhUJtZ1UDABXdlVR4K6zFpgt4T+Rwuhf2sQzlc6yK1q/DprHPjwT4Pjw=="],
229
 
230
- "camelcase": ["camelcase@8.0.0", "", {}, "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="],
231
-
232
  "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "4.1.2" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
233
 
234
- "class-validator": ["class-validator@0.14.4", "", { "dependencies": { "@types/validator": "13.15.10", "libphonenumber-js": "1.12.42", "validator": "13.15.35" } }, "sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw=="],
235
-
236
  "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
237
 
238
  "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
239
 
240
  "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="],
241
 
242
- "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "2.0.3" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="],
243
-
244
- "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "3.1.0" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="],
245
-
246
- "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="],
247
-
248
- "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "3.2.4" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="],
249
-
250
- "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5.1.0" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="],
251
-
252
- "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="],
253
-
254
- "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7.2.0", "iconv-lite": "0.6.3", "rw": "1.3.3" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="],
255
-
256
- "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "3.0.1", "d3-quadtree": "3.0.1", "d3-timer": "3.0.1" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="],
257
-
258
- "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="],
259
-
260
- "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "3.2.4" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="],
261
-
262
- "d3-geo-voronoi": ["d3-geo-voronoi@2.1.0", "", { "dependencies": { "d3-array": "3.2.4", "d3-delaunay": "6.0.4", "d3-geo": "3.1.1", "d3-tricontour": "1.1.0" } }, "sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q=="],
263
-
264
- "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="],
265
-
266
- "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "3.1.0" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="],
267
-
268
- "d3-interpolate-path": ["d3-interpolate-path@2.3.0", "", {}, "sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ=="],
269
-
270
- "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="],
271
-
272
- "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="],
273
-
274
- "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="],
275
-
276
- "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "2.12.1", "d3-shape": "1.3.7" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="],
277
-
278
- "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "3.2.4", "d3-format": "3.1.2", "d3-interpolate": "3.0.1", "d3-time": "3.1.0", "d3-time-format": "4.1.0" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="],
279
-
280
- "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "3.1.0", "d3-interpolate": "3.0.1" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="],
281
-
282
- "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="],
283
-
284
- "d3-tile": ["d3-tile@1.0.0", "", {}, "sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q=="],
285
-
286
- "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "3.2.4" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="],
287
-
288
- "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "3.1.0" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="],
289
-
290
- "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="],
291
-
292
- "d3-tricontour": ["d3-tricontour@1.1.0", "", { "dependencies": { "d3-delaunay": "6.0.4", "d3-scale": "4.0.2" } }, "sha512-G7gHKj89n2owmkGb6WX6ixcnQ0Kf/0wpa9VIh9DGdbHu8wdrlaHU4ir3/bFNERl8N8nn4G7e7qbtBG8N9caihQ=="],
293
-
294
- "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="],
295
-
296
  "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
297
 
298
- "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "3.0.3" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="],
299
-
300
  "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
301
 
302
  "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
303
 
304
  "devalue": ["devalue@5.7.1", "", {}, "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA=="],
305
 
306
- "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="],
307
-
308
- "effect": ["effect@3.21.2", "", { "dependencies": { "@standard-schema/spec": "1.1.0", "fast-check": "3.23.2" } }, "sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg=="],
309
-
310
  "enhanced-resolve": ["enhanced-resolve@5.21.0", "", { "dependencies": { "graceful-fs": "4.2.11", "tapable": "2.3.3" } }, "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA=="],
311
 
312
  "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="],
@@ -315,12 +194,8 @@
315
 
316
  "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "1.0.8" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
317
 
318
- "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="],
319
-
320
  "fdir": ["fdir@6.5.0", "", { "optionalDependencies": { "picomatch": "4.0.4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
321
 
322
- "formsnap": ["formsnap@2.0.1", "", { "dependencies": { "svelte-toolbelt": "0.5.0" }, "peerDependencies": { "svelte": "5.55.5", "sveltekit-superforms": "2.30.1" } }, "sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ=="],
323
-
324
  "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
325
 
326
  "fzstd": ["fzstd@0.1.1", "", {}, "sha512-dkuVSOKKwh3eas5VkJy1AW1vFpet8TA/fGmVA5krThl8YcOVE/8ZIoEA1+U1vEn5ckxxhLirSdY837azmbaNHA=="],
@@ -333,26 +208,14 @@
333
 
334
  "hysnappy": ["hysnappy@1.0.0", "", {}, "sha512-MNrC4NfwDGPb889O6gIfEtbvEZCSWUsSEhsz4Oq2FRcpGtXHfeVz3KciSPp5Pnnz1NjFMgDQNfxdJozymJEDDA=="],
335
 
336
- "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": "2.1.2" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
337
-
338
  "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="],
339
 
340
- "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="],
341
-
342
  "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "1.0.8" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="],
343
 
344
  "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
345
 
346
- "joi": ["joi@17.13.3", "", { "dependencies": { "@hapi/hoek": "9.3.0", "@hapi/topo": "5.1.0", "@sideway/address": "4.1.5", "@sideway/formula": "3.0.1", "@sideway/pinpoint": "2.0.0" } }, "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA=="],
347
-
348
- "json-schema-to-ts": ["json-schema-to-ts@3.1.1", "", { "dependencies": { "@babel/runtime": "7.29.2", "ts-algebra": "2.0.0" } }, "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g=="],
349
-
350
  "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
351
 
352
- "layerchart": ["layerchart@2.0.0-next.48", "", { "dependencies": { "@dagrejs/dagre": "2.0.4", "@layerstack/svelte-actions": "1.0.1-next.18", "@layerstack/svelte-state": "0.1.0-next.23", "@layerstack/tailwind": "2.0.0-next.21", "@layerstack/utils": "2.0.0-next.18", "@types/d3-contour": "3.0.6", "d3-array": "3.2.4", "d3-chord": "3.0.1", "d3-color": "3.1.0", "d3-contour": "4.0.2", "d3-delaunay": "6.0.4", "d3-dsv": "3.0.1", "d3-force": "3.0.0", "d3-geo": "3.1.1", "d3-geo-voronoi": "2.1.0", "d3-hierarchy": "3.1.2", "d3-interpolate": "3.0.1", "d3-interpolate-path": "2.3.0", "d3-path": "3.1.0", "d3-quadtree": "3.0.1", "d3-random": "3.0.1", "d3-sankey": "0.12.3", "d3-scale": "4.0.2", "d3-scale-chromatic": "3.1.0", "d3-shape": "3.2.0", "d3-tile": "1.0.0", "d3-time": "3.1.0", "memoize": "10.2.0", "runed": "0.37.1" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-XoEYBztamA8lMxtF/Jz3aDX0HMk8dI+o4fK9fSl8ecT2Tdx3DQUjtKGtlQAOFdwC/AWifeLmKq5cMTQt9COZPQ=="],
353
-
354
- "libphonenumber-js": ["libphonenumber-js@1.12.42", "", {}, "sha512-oKQFPTibqQwZZkChCDVMFVJXMZdyJNqDWZWYNn8BgyAaK/6yFJEowxCY0RVFirRyWP63hMRuKlkSEd9qlvbWXg=="],
355
-
356
  "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "2.1.2" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
357
 
358
  "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
@@ -385,12 +248,6 @@
385
 
386
  "mediabunny": ["mediabunny@1.42.0", "", { "dependencies": { "@types/dom-mediacapture-transform": "0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-s9ypTqLi6kbh95gC+YaJlG0PkLvMxu37Q/wO/pFZx0fUCA5Ym5mp+2dWoa83mKQ3Uo18aNlgev5iJ5ESZqWwgQ=="],
387
 
388
- "memoize": ["memoize@10.2.0", "", { "dependencies": { "mimic-function": "5.0.1" } }, "sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA=="],
389
-
390
- "memoize-weak": ["memoize-weak@1.0.2", "", {}, "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ=="],
391
-
392
- "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
393
-
394
  "mode-watcher": ["mode-watcher@1.1.0", "", { "dependencies": { "runed": "0.25.0", "svelte-toolbelt": "0.7.1" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g=="],
395
 
396
  "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
@@ -401,12 +258,8 @@
401
 
402
  "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="],
403
 
404
- "normalize-url": ["normalize-url@8.1.1", "", {}, "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ=="],
405
-
406
  "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="],
407
 
408
- "paneforge": ["paneforge@1.0.2", "", { "dependencies": { "runed": "0.23.4", "svelte-toolbelt": "0.9.3" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-KzmIXQH1wCfwZ4RsMohD/IUtEjVhteR+c+ulb/CHYJHX8SuDXoJmChtsc/Xs5Wl8NHS4L5Q7cxL8MG40gSU1bA=="],
409
-
410
  "phosphor-svelte": ["phosphor-svelte@3.1.0", "", { "dependencies": { "estree-walker": "3.0.3", "magic-string": "0.30.21" }, "optionalDependencies": { "vite": "8.0.10" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-nldtxx+XCgNREvrb7O5xgDsefytXpSkPTx8Rnu3f2qQCUZLDV1rLxYSd2Jcwckuo9lZB1qKMqGR17P4UDC0PrA=="],
411
 
412
  "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
@@ -415,24 +268,20 @@
415
 
416
  "postcss": ["postcss@8.5.12", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA=="],
417
 
418
- "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="],
419
 
420
- "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="],
421
 
422
- "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
423
 
424
- "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="],
425
 
426
  "rolldown": ["rolldown@1.0.0-rc.17", "", { "dependencies": { "@oxc-project/types": "0.127.0", "@rolldown/pluginutils": "1.0.0-rc.17" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-x64": "1.0.0-rc.17", "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA=="],
427
 
428
  "runed": ["runed@0.35.1", "", { "dependencies": { "dequal": "2.0.3", "esm-env": "1.2.2", "lz-string": "1.5.0" }, "optionalDependencies": { "@sveltejs/kit": "2.58.0" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q=="],
429
 
430
- "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="],
431
-
432
  "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "1.2.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="],
433
 
434
- "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
435
-
436
  "set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="],
437
 
438
  "shadcn-svelte": ["shadcn-svelte@1.2.7", "", { "dependencies": { "commander": "14.0.3", "node-fetch-native": "1.6.7", "postcss": "8.5.12", "tailwind-merge": "3.5.0" }, "peerDependencies": { "svelte": "5.55.5" }, "bin": { "shadcn-svelte": "dist/index.mjs" } }, "sha512-mWuQk4H4gtV+J2wJQ7nEPKNnB/v86AALFryZU0SSM7ChHmJJMZ1kH+qIuxYKrXm9vOOOcSWHRsWzPDB71DnjYA=="],
@@ -443,8 +292,6 @@
443
 
444
  "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="],
445
 
446
- "superstruct": ["superstruct@2.0.2", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="],
447
-
448
  "svelte": ["svelte@5.55.5", "", { "dependencies": { "@jridgewell/remapping": "2.3.5", "@jridgewell/sourcemap-codec": "1.5.5", "@sveltejs/acorn-typescript": "1.0.9", "@types/estree": "1.0.8", "@types/trusted-types": "2.0.7", "acorn": "8.16.0", "aria-query": "5.3.1", "axobject-query": "4.1.0", "clsx": "2.1.1", "devalue": "5.7.1", "esm-env": "1.2.2", "esrap": "2.2.5", "is-reference": "3.0.3", "locate-character": "3.0.0", "magic-string": "0.30.21", "zimmerframe": "1.1.4" } }, "sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw=="],
449
 
450
  "svelte-check": ["svelte-check@4.4.6", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.31", "chokidar": "4.0.3", "fdir": "6.5.0", "picocolors": "1.1.1", "sade": "1.8.1" }, "peerDependencies": { "svelte": "5.55.5", "typescript": "6.0.3" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg=="],
@@ -453,8 +300,6 @@
453
 
454
  "svelte-toolbelt": ["svelte-toolbelt@0.10.6", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.35.1", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ=="],
455
 
456
- "sveltekit-superforms": ["sveltekit-superforms@2.30.1", "", { "dependencies": { "devalue": "5.7.1", "memoize-weak": "1.0.2", "ts-deepmerge": "7.0.3" }, "optionalDependencies": { "@exodus/schemasafe": "1.3.0", "@standard-schema/spec": "1.1.0", "@typeschema/class-validator": "0.3.0", "@valibot/to-json-schema": "1.6.0", "@vinejs/vine": "3.0.1", "arktype": "2.2.0", "class-validator": "0.14.4", "effect": "3.21.2", "joi": "17.13.3", "json-schema-to-ts": "3.1.1", "superstruct": "2.0.2", "typebox": "1.1.34", "valibot": "1.3.1", "yup": "1.7.1", "zod": "4.3.6", "zod-v3-to-json-schema": "4.0.0" }, "peerDependencies": { "@sveltejs/kit": "2.58.0", "svelte": "5.55.5" } }, "sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew=="],
457
-
458
  "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="],
459
 
460
  "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="],
@@ -465,78 +310,30 @@
465
 
466
  "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
467
 
468
- "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="],
469
-
470
  "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "6.5.0", "picomatch": "4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
471
 
472
- "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="],
473
-
474
  "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="],
475
 
476
- "ts-algebra": ["ts-algebra@2.0.0", "", {}, "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw=="],
477
-
478
- "ts-deepmerge": ["ts-deepmerge@7.0.3", "", {}, "sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA=="],
479
-
480
  "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
481
 
482
  "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="],
483
 
484
- "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="],
485
-
486
- "typebox": ["typebox@1.1.34", "", {}, "sha512-V0fM5W5DTXlEMDxqtX1dQ25HR1RQ11DPUVrIup4sJi1yQtIyI30SHfxBy/HjXKL1CtUqc5or2igA/wa/v4hMKQ=="],
487
-
488
  "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
489
 
490
  "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
491
 
492
- "valibot": ["valibot@1.3.1", "", { "optionalDependencies": { "typescript": "6.0.3" } }, "sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg=="],
493
-
494
- "validator": ["validator@13.15.35", "", {}, "sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw=="],
495
-
496
- "vaul-svelte": ["vaul-svelte@1.0.0-next.7", "", { "dependencies": { "runed": "0.23.4", "svelte-toolbelt": "0.7.1" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg=="],
497
-
498
  "vite": ["vite@8.0.10", "", { "dependencies": { "lightningcss": "1.32.0", "picomatch": "4.0.4", "postcss": "8.5.12", "rolldown": "1.0.0-rc.17", "tinyglobby": "0.2.16" }, "optionalDependencies": { "@types/node": "24.12.2", "fsevents": "2.3.3", "jiti": "2.6.1" }, "bin": { "vite": "bin/vite.js" } }, "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw=="],
499
 
500
  "vitefu": ["vitefu@1.1.3", "", { "optionalDependencies": { "vite": "8.0.10" } }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="],
501
 
502
- "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "2.0.6", "tiny-case": "1.0.3", "toposort": "2.0.2", "type-fest": "2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="],
503
-
504
  "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="],
505
 
506
- "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
507
-
508
- "zod-v3-to-json-schema": ["zod-v3-to-json-schema@4.0.0", "", { "peerDependencies": { "zod": "4.3.6" } }, "sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w=="],
509
-
510
- "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="],
511
-
512
- "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "1.0.1" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="],
513
-
514
- "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1.0.9" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="],
515
-
516
- "formsnap/svelte-toolbelt": ["svelte-toolbelt@0.5.0", "", { "dependencies": { "clsx": "2.1.1", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ=="],
517
-
518
- "layerchart/runed": ["runed@0.37.1", "", { "dependencies": { "dequal": "2.0.3", "esm-env": "1.2.2", "lz-string": "1.5.0" }, "optionalDependencies": { "@sveltejs/kit": "2.58.0", "zod": "4.3.6" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA=="],
519
-
520
  "mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="],
521
 
522
  "mode-watcher/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.23.4", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="],
523
 
524
- "paneforge/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="],
525
-
526
- "paneforge/svelte-toolbelt": ["svelte-toolbelt@0.9.3", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.29.2", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw=="],
527
-
528
  "svelte-sonner/runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="],
529
 
530
- "vaul-svelte/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="],
531
-
532
- "vaul-svelte/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.23.4", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="],
533
-
534
- "d3-sankey/d3-array/internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="],
535
-
536
- "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="],
537
-
538
  "mode-watcher/svelte-toolbelt/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="],
539
-
540
- "paneforge/svelte-toolbelt/runed": ["runed@0.29.2", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA=="],
541
  }
542
  }
 
12
  "devDependencies": {
13
  "@fontsource-variable/oxanium": "^5.2.8",
14
  "@fontsource-variable/roboto-slab": "^5.2.8",
 
15
  "@sveltejs/adapter-static": "latest",
16
  "@sveltejs/kit": "latest",
17
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
 
19
  "@tanstack/table-core": "^8.21.3",
20
  "bits-ui": "^2.18.0",
21
  "clsx": "^2.1.1",
 
 
22
  "mode-watcher": "^1.1.0",
 
23
  "phosphor-svelte": "^3.1.0",
24
+ "prettier": "^3.8.3",
25
+ "prettier-plugin-svelte": "^3.5.1",
26
+ "prettier-plugin-tailwindcss": "^0.8.0",
27
  "shadcn-svelte": "^1.2.7",
28
  "svelte": "^5.55.2",
29
  "svelte-check": "^4.4.6",
30
  "svelte-sonner": "^1.1.1",
 
31
  "tailwind-merge": "^3.5.0",
32
  "tailwind-variants": "^3.2.2",
33
  "tailwindcss": "^4.2.2",
34
  "tw-animate-css": "^1.4.0",
35
  "typescript": "^6.0.2",
 
36
  "vite": "^8.0.7",
37
  },
38
  },
39
  },
40
  "packages": {
 
 
 
 
 
 
 
 
 
 
41
  "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "2.8.1" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="],
42
 
43
  "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="],
44
 
45
  "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
46
 
 
 
47
  "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="],
48
 
49
  "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "1.7.5", "@floating-ui/utils": "0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="],
 
54
 
55
  "@fontsource-variable/roboto-slab": ["@fontsource-variable/roboto-slab@5.2.8", "", {}, "sha512-cdvOSwocP50xS01gXqnGxw7uFcCZQgn1IDlqiAmNuZP4uEVScYAKMDC+aWsbP1grn9QdMJ2frhcuVBNXniBVGA=="],
56
 
 
 
 
 
57
  "@internationalized/date": ["@internationalized/date@3.12.1", "", { "dependencies": { "@swc/helpers": "0.5.21" } }, "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ=="],
58
 
59
  "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "1.5.5", "@jridgewell/trace-mapping": "0.3.31" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
 
66
 
67
  "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "3.1.2", "@jridgewell/sourcemap-codec": "1.5.5" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
68
 
 
 
 
 
 
 
 
 
69
  "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "0.10.1" }, "peerDependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
70
 
71
  "@oxc-project/types": ["@oxc-project/types@0.127.0", "", {}, "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ=="],
72
 
73
  "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="],
74
 
 
 
75
  "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.17", "", { "os": "android", "cpu": "arm64" }, "sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ=="],
76
 
77
  "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.17", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw=="],
 
104
 
105
  "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.17", "", {}, "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg=="],
106
 
 
 
 
 
 
 
107
  "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="],
108
 
109
  "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.9", "", { "peerDependencies": { "acorn": "8.16.0" } }, "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA=="],
 
152
 
153
  "@types/cookie": ["@types/cookie@0.6.0", "", {}, "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="],
154
 
 
 
 
 
155
  "@types/dom-mediacapture-transform": ["@types/dom-mediacapture-transform@0.1.11", "", { "dependencies": { "@types/dom-webcodecs": "0.1.13" } }, "sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ=="],
156
 
157
  "@types/dom-webcodecs": ["@types/dom-webcodecs@0.1.13", "", {}, "sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ=="],
158
 
159
  "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
160
 
 
 
161
  "@types/node": ["@types/node@24.12.2", "", { "dependencies": { "undici-types": "7.16.0" } }, "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g=="],
162
 
163
  "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
164
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="],
166
 
167
  "aria-query": ["aria-query@5.3.1", "", {}, "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g=="],
168
 
 
 
 
 
169
  "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
170
 
171
  "bits-ui": ["bits-ui@2.18.0", "", { "dependencies": { "@floating-ui/core": "1.7.5", "@floating-ui/dom": "1.7.6", "esm-env": "1.2.2", "runed": "0.35.1", "svelte-toolbelt": "0.10.6", "tabbable": "6.4.0" }, "peerDependencies": { "@internationalized/date": "3.12.1", "svelte": "5.55.5" } }, "sha512-GLOBZRVy3hxNHIQ2MpD/+5aK9KcBFZRhUJtZ1UDABXdlVR4K6zFpgt4T+Rwuhf2sQzlc6yK1q/DprHPjwT4Pjw=="],
172
 
 
 
173
  "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "4.1.2" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
174
 
 
 
175
  "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
176
 
177
  "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
178
 
179
  "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="],
180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
182
 
 
 
183
  "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
184
 
185
  "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
186
 
187
  "devalue": ["devalue@5.7.1", "", {}, "sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA=="],
188
 
 
 
 
 
189
  "enhanced-resolve": ["enhanced-resolve@5.21.0", "", { "dependencies": { "graceful-fs": "4.2.11", "tapable": "2.3.3" } }, "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA=="],
190
 
191
  "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="],
 
194
 
195
  "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "1.0.8" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
196
 
 
 
197
  "fdir": ["fdir@6.5.0", "", { "optionalDependencies": { "picomatch": "4.0.4" } }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
198
 
 
 
199
  "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
200
 
201
  "fzstd": ["fzstd@0.1.1", "", {}, "sha512-dkuVSOKKwh3eas5VkJy1AW1vFpet8TA/fGmVA5krThl8YcOVE/8ZIoEA1+U1vEn5ckxxhLirSdY837azmbaNHA=="],
 
208
 
209
  "hysnappy": ["hysnappy@1.0.0", "", {}, "sha512-MNrC4NfwDGPb889O6gIfEtbvEZCSWUsSEhsz4Oq2FRcpGtXHfeVz3KciSPp5Pnnz1NjFMgDQNfxdJozymJEDDA=="],
210
 
 
 
211
  "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="],
212
 
 
 
213
  "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "1.0.8" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="],
214
 
215
  "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="],
216
 
 
 
 
 
217
  "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
218
 
 
 
 
 
219
  "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "2.1.2" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
220
 
221
  "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
 
248
 
249
  "mediabunny": ["mediabunny@1.42.0", "", { "dependencies": { "@types/dom-mediacapture-transform": "0.1.11", "@types/dom-webcodecs": "0.1.13" } }, "sha512-s9ypTqLi6kbh95gC+YaJlG0PkLvMxu37Q/wO/pFZx0fUCA5Ym5mp+2dWoa83mKQ3Uo18aNlgev5iJ5ESZqWwgQ=="],
250
 
 
 
 
 
 
 
251
  "mode-watcher": ["mode-watcher@1.1.0", "", { "dependencies": { "runed": "0.25.0", "svelte-toolbelt": "0.7.1" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g=="],
252
 
253
  "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
 
258
 
259
  "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="],
260
 
 
 
261
  "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="],
262
 
 
 
263
  "phosphor-svelte": ["phosphor-svelte@3.1.0", "", { "dependencies": { "estree-walker": "3.0.3", "magic-string": "0.30.21" }, "optionalDependencies": { "vite": "8.0.10" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-nldtxx+XCgNREvrb7O5xgDsefytXpSkPTx8Rnu3f2qQCUZLDV1rLxYSd2Jcwckuo9lZB1qKMqGR17P4UDC0PrA=="],
264
 
265
  "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
 
268
 
269
  "postcss": ["postcss@8.5.12", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA=="],
270
 
271
+ "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="],
272
 
273
+ "prettier-plugin-svelte": ["prettier-plugin-svelte@3.5.1", "", { "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg=="],
274
 
275
+ "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.8.0", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g=="],
276
 
277
+ "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
278
 
279
  "rolldown": ["rolldown@1.0.0-rc.17", "", { "dependencies": { "@oxc-project/types": "0.127.0", "@rolldown/pluginutils": "1.0.0-rc.17" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-arm64": "1.0.0-rc.17", "@rolldown/binding-darwin-x64": "1.0.0-rc.17", "@rolldown/binding-freebsd-x64": "1.0.0-rc.17", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.17", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.17", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.17", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.17", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.17", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.17", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA=="],
280
 
281
  "runed": ["runed@0.35.1", "", { "dependencies": { "dequal": "2.0.3", "esm-env": "1.2.2", "lz-string": "1.5.0" }, "optionalDependencies": { "@sveltejs/kit": "2.58.0" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q=="],
282
 
 
 
283
  "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "1.2.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="],
284
 
 
 
285
  "set-cookie-parser": ["set-cookie-parser@3.1.0", "", {}, "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw=="],
286
 
287
  "shadcn-svelte": ["shadcn-svelte@1.2.7", "", { "dependencies": { "commander": "14.0.3", "node-fetch-native": "1.6.7", "postcss": "8.5.12", "tailwind-merge": "3.5.0" }, "peerDependencies": { "svelte": "5.55.5" }, "bin": { "shadcn-svelte": "dist/index.mjs" } }, "sha512-mWuQk4H4gtV+J2wJQ7nEPKNnB/v86AALFryZU0SSM7ChHmJJMZ1kH+qIuxYKrXm9vOOOcSWHRsWzPDB71DnjYA=="],
 
292
 
293
  "style-to-object": ["style-to-object@1.0.14", "", { "dependencies": { "inline-style-parser": "0.2.7" } }, "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw=="],
294
 
 
 
295
  "svelte": ["svelte@5.55.5", "", { "dependencies": { "@jridgewell/remapping": "2.3.5", "@jridgewell/sourcemap-codec": "1.5.5", "@sveltejs/acorn-typescript": "1.0.9", "@types/estree": "1.0.8", "@types/trusted-types": "2.0.7", "acorn": "8.16.0", "aria-query": "5.3.1", "axobject-query": "4.1.0", "clsx": "2.1.1", "devalue": "5.7.1", "esm-env": "1.2.2", "esrap": "2.2.5", "is-reference": "3.0.3", "locate-character": "3.0.0", "magic-string": "0.30.21", "zimmerframe": "1.1.4" } }, "sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw=="],
296
 
297
  "svelte-check": ["svelte-check@4.4.6", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.31", "chokidar": "4.0.3", "fdir": "6.5.0", "picocolors": "1.1.1", "sade": "1.8.1" }, "peerDependencies": { "svelte": "5.55.5", "typescript": "6.0.3" }, "bin": { "svelte-check": "bin/svelte-check" } }, "sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg=="],
 
300
 
301
  "svelte-toolbelt": ["svelte-toolbelt@0.10.6", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.35.1", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ=="],
302
 
 
 
303
  "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="],
304
 
305
  "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="],
 
310
 
311
  "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="],
312
 
 
 
313
  "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "6.5.0", "picomatch": "4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
314
 
 
 
315
  "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="],
316
 
 
 
 
 
317
  "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
318
 
319
  "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="],
320
 
 
 
 
 
321
  "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
322
 
323
  "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
324
 
 
 
 
 
 
 
325
  "vite": ["vite@8.0.10", "", { "dependencies": { "lightningcss": "1.32.0", "picomatch": "4.0.4", "postcss": "8.5.12", "rolldown": "1.0.0-rc.17", "tinyglobby": "0.2.16" }, "optionalDependencies": { "@types/node": "24.12.2", "fsevents": "2.3.3", "jiti": "2.6.1" }, "bin": { "vite": "bin/vite.js" } }, "sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw=="],
326
 
327
  "vitefu": ["vitefu@1.1.3", "", { "optionalDependencies": { "vite": "8.0.10" } }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="],
328
 
 
 
329
  "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="],
330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
  "mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="],
332
 
333
  "mode-watcher/svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "2.1.1", "runed": "0.23.4", "style-to-object": "1.0.14" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="],
334
 
 
 
 
 
335
  "svelte-sonner/runed": ["runed@0.28.0", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ=="],
336
 
 
 
 
 
 
 
 
 
337
  "mode-watcher/svelte-toolbelt/runed": ["runed@0.23.4", "", { "dependencies": { "esm-env": "1.2.2" }, "peerDependencies": { "svelte": "5.55.5" } }, "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA=="],
 
 
338
  }
339
  }
package.json CHANGED
@@ -3,18 +3,23 @@
3
  "private": true,
4
  "version": "0.0.1",
5
  "type": "module",
 
 
 
 
6
  "scripts": {
7
  "dev": "vite dev",
8
  "build": "vite build",
9
  "preview": "vite preview",
10
  "prepare": "svelte-kit sync || echo ''",
11
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
 
 
13
  },
14
  "devDependencies": {
15
  "@fontsource-variable/oxanium": "^5.2.8",
16
  "@fontsource-variable/roboto-slab": "^5.2.8",
17
- "@internationalized/date": "^3.12.1",
18
  "@sveltejs/adapter-static": "latest",
19
  "@sveltejs/kit": "latest",
20
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
@@ -22,22 +27,20 @@
22
  "@tanstack/table-core": "^8.21.3",
23
  "bits-ui": "^2.18.0",
24
  "clsx": "^2.1.1",
25
- "formsnap": "^2.0.1",
26
- "layerchart": "2.0.0-next.48",
27
  "mode-watcher": "^1.1.0",
28
- "paneforge": "^1.0.2",
29
  "phosphor-svelte": "^3.1.0",
 
 
 
30
  "shadcn-svelte": "^1.2.7",
31
  "svelte": "^5.55.2",
32
  "svelte-check": "^4.4.6",
33
  "svelte-sonner": "^1.1.1",
34
- "sveltekit-superforms": "^2.30.1",
35
  "tailwind-merge": "^3.5.0",
36
  "tailwind-variants": "^3.2.2",
37
  "tailwindcss": "^4.2.2",
38
  "tw-animate-css": "^1.4.0",
39
  "typescript": "^6.0.2",
40
- "vaul-svelte": "1.0.0-next.7",
41
  "vite": "^8.0.7"
42
  },
43
  "dependencies": {
 
3
  "private": true,
4
  "version": "0.0.1",
5
  "type": "module",
6
+ "packageManager": "bun@1.3.13",
7
+ "engines": {
8
+ "bun": ">=1.3.13"
9
+ },
10
  "scripts": {
11
  "dev": "vite dev",
12
  "build": "vite build",
13
  "preview": "vite preview",
14
  "prepare": "svelte-kit sync || echo ''",
15
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
16
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
17
+ "format": "prettier --write .",
18
+ "lint": "prettier --check ."
19
  },
20
  "devDependencies": {
21
  "@fontsource-variable/oxanium": "^5.2.8",
22
  "@fontsource-variable/roboto-slab": "^5.2.8",
 
23
  "@sveltejs/adapter-static": "latest",
24
  "@sveltejs/kit": "latest",
25
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
 
27
  "@tanstack/table-core": "^8.21.3",
28
  "bits-ui": "^2.18.0",
29
  "clsx": "^2.1.1",
 
 
30
  "mode-watcher": "^1.1.0",
 
31
  "phosphor-svelte": "^3.1.0",
32
+ "prettier": "^3.8.3",
33
+ "prettier-plugin-svelte": "^3.5.1",
34
+ "prettier-plugin-tailwindcss": "^0.8.0",
35
  "shadcn-svelte": "^1.2.7",
36
  "svelte": "^5.55.2",
37
  "svelte-check": "^4.4.6",
38
  "svelte-sonner": "^1.1.1",
 
39
  "tailwind-merge": "^3.5.0",
40
  "tailwind-variants": "^3.2.2",
41
  "tailwindcss": "^4.2.2",
42
  "tw-animate-css": "^1.4.0",
43
  "typescript": "^6.0.2",
 
44
  "vite": "^8.0.7"
45
  },
46
  "dependencies": {
pnpm-lock.yaml DELETED
@@ -1,2444 +0,0 @@
1
- lockfileVersion: '9.0'
2
-
3
- settings:
4
- autoInstallPeers: true
5
- excludeLinksFromLockfile: false
6
-
7
- importers:
8
-
9
- .:
10
- dependencies:
11
- apache-arrow:
12
- specifier: ^21.1.0
13
- version: 21.1.0
14
- mediabunny:
15
- specifier: ^1.42.0
16
- version: 1.42.0
17
- parquet-wasm:
18
- specifier: ^0.7.1
19
- version: 0.7.1
20
- devDependencies:
21
- '@fontsource-variable/oxanium':
22
- specifier: ^5.2.8
23
- version: 5.2.8
24
- '@fontsource-variable/roboto-slab':
25
- specifier: ^5.2.8
26
- version: 5.2.8
27
- '@internationalized/date':
28
- specifier: ^3.12.1
29
- version: 3.12.1
30
- '@sveltejs/adapter-static':
31
- specifier: latest
32
- version: 3.0.10(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))
33
- '@sveltejs/kit':
34
- specifier: latest
35
- version: 2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
36
- '@sveltejs/vite-plugin-svelte':
37
- specifier: ^7.0.0
38
- version: 7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
39
- '@tailwindcss/vite':
40
- specifier: ^4.2.2
41
- version: 4.2.4(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
42
- '@tanstack/table-core':
43
- specifier: ^8.21.3
44
- version: 8.21.3
45
- bits-ui:
46
- specifier: ^2.18.0
47
- version: 2.18.0(@internationalized/date@3.12.1)(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)
48
- clsx:
49
- specifier: ^2.1.1
50
- version: 2.1.1
51
- formsnap:
52
- specifier: ^2.0.1
53
- version: 2.0.1(svelte@5.55.5)(sveltekit-superforms@2.30.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3))
54
- layerchart:
55
- specifier: 2.0.0-next.48
56
- version: 2.0.0-next.48(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(zod@4.3.6)
57
- mode-watcher:
58
- specifier: ^1.1.0
59
- version: 1.1.0(svelte@5.55.5)
60
- paneforge:
61
- specifier: ^1.0.2
62
- version: 1.0.2(svelte@5.55.5)
63
- phosphor-svelte:
64
- specifier: ^3.1.0
65
- version: 3.1.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
66
- shadcn-svelte:
67
- specifier: ^1.2.7
68
- version: 1.2.7(svelte@5.55.5)
69
- svelte:
70
- specifier: ^5.55.2
71
- version: 5.55.5
72
- svelte-check:
73
- specifier: ^4.4.6
74
- version: 4.4.6(picomatch@4.0.4)(svelte@5.55.5)(typescript@6.0.3)
75
- svelte-sonner:
76
- specifier: ^1.1.1
77
- version: 1.1.1(svelte@5.55.5)
78
- sveltekit-superforms:
79
- specifier: ^2.30.1
80
- version: 2.30.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)
81
- tailwind-merge:
82
- specifier: ^3.5.0
83
- version: 3.5.0
84
- tailwind-variants:
85
- specifier: ^3.2.2
86
- version: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4)
87
- tailwindcss:
88
- specifier: ^4.2.2
89
- version: 4.2.4
90
- tw-animate-css:
91
- specifier: ^1.4.0
92
- version: 1.4.0
93
- typescript:
94
- specifier: ^6.0.2
95
- version: 6.0.3
96
- vaul-svelte:
97
- specifier: 1.0.0-next.7
98
- version: 1.0.0-next.7(svelte@5.55.5)
99
- vite:
100
- specifier: ^8.0.7
101
- version: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
102
-
103
- packages:
104
-
105
- '@ark/schema@0.56.0':
106
- resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==}
107
-
108
- '@ark/util@0.56.0':
109
- resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==}
110
-
111
- '@babel/runtime@7.29.2':
112
- resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
113
- engines: {node: '>=6.9.0'}
114
-
115
- '@dagrejs/dagre@2.0.4':
116
- resolution: {integrity: sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA==}
117
-
118
- '@dagrejs/graphlib@3.0.4':
119
- resolution: {integrity: sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg==}
120
-
121
- '@emnapi/core@1.10.0':
122
- resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
123
-
124
- '@emnapi/runtime@1.10.0':
125
- resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
126
-
127
- '@emnapi/wasi-threads@1.2.1':
128
- resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
129
-
130
- '@exodus/schemasafe@1.3.0':
131
- resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==}
132
-
133
- '@floating-ui/core@1.7.5':
134
- resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
135
-
136
- '@floating-ui/dom@1.7.6':
137
- resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
138
-
139
- '@floating-ui/utils@0.2.11':
140
- resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
141
-
142
- '@fontsource-variable/oxanium@5.2.8':
143
- resolution: {integrity: sha512-W3HWxRLXVB6yox3dgm1DIGOp98pz8KglwiM6/2BsMopvZrg98mXI9citFWz2pUX0FOOLwf8fmHxX+KrIn+6BoA==}
144
-
145
- '@fontsource-variable/roboto-slab@5.2.8':
146
- resolution: {integrity: sha512-cdvOSwocP50xS01gXqnGxw7uFcCZQgn1IDlqiAmNuZP4uEVScYAKMDC+aWsbP1grn9QdMJ2frhcuVBNXniBVGA==}
147
-
148
- '@hapi/hoek@9.3.0':
149
- resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
150
-
151
- '@hapi/topo@5.1.0':
152
- resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
153
-
154
- '@internationalized/date@3.12.1':
155
- resolution: {integrity: sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==}
156
-
157
- '@jridgewell/gen-mapping@0.3.13':
158
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
159
-
160
- '@jridgewell/remapping@2.3.5':
161
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
162
-
163
- '@jridgewell/resolve-uri@3.1.2':
164
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
165
- engines: {node: '>=6.0.0'}
166
-
167
- '@jridgewell/sourcemap-codec@1.5.5':
168
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
169
-
170
- '@jridgewell/trace-mapping@0.3.31':
171
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
172
-
173
- '@layerstack/svelte-actions@1.0.1-next.18':
174
- resolution: {integrity: sha512-gxPzCnJ1c9LTfWtRqLUzefCx+k59ZpxDUQ2XB+LokveZQPe7IDSOwHaBOEMlaGoGrtwc3Ft8dSZq+2WT2o9u/g==}
175
-
176
- '@layerstack/svelte-state@0.1.0-next.23':
177
- resolution: {integrity: sha512-7O4umv+gXwFfs3/vjzFWYHNXGwYnnjBapWJ5Y+9u99F4eVk6rh4ocNwqkqQNkpMZ5tUJBlRTWjPE1So6+hEzIg==}
178
-
179
- '@layerstack/tailwind@2.0.0-next.21':
180
- resolution: {integrity: sha512-Qgp2EpmEHmjtura8MQzWicR6ztBRSsRvddakFtx9ShrLMz6jWzd6bCMVVRu44Q3ZOrtXmSu4QxjCZWu1ytvuPg==}
181
-
182
- '@layerstack/utils@2.0.0-next.18':
183
- resolution: {integrity: sha512-EYILHpfBRYMMEahajInu9C2AXQom5IcAEdtCeucD3QIl/fdDgRbtzn6/8QW9ewumfyNZetdUvitOksmI1+gZYQ==}
184
-
185
- '@napi-rs/wasm-runtime@1.1.4':
186
- resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
187
- peerDependencies:
188
- '@emnapi/core': ^1.7.1
189
- '@emnapi/runtime': ^1.7.1
190
-
191
- '@oxc-project/types@0.127.0':
192
- resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
193
-
194
- '@polka/url@1.0.0-next.29':
195
- resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
196
-
197
- '@poppinss/macroable@1.1.2':
198
- resolution: {integrity: sha512-FAVBRzzWhYP5mA3lCwLH1A0fKBqq5anyjGet90Z81aRK5c/+LTGUE1zJhZrErjaenBSOOI9BVUs3WVmotneFQA==}
199
-
200
- '@rolldown/binding-android-arm64@1.0.0-rc.17':
201
- resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==}
202
- engines: {node: ^20.19.0 || >=22.12.0}
203
- cpu: [arm64]
204
- os: [android]
205
-
206
- '@rolldown/binding-darwin-arm64@1.0.0-rc.17':
207
- resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==}
208
- engines: {node: ^20.19.0 || >=22.12.0}
209
- cpu: [arm64]
210
- os: [darwin]
211
-
212
- '@rolldown/binding-darwin-x64@1.0.0-rc.17':
213
- resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==}
214
- engines: {node: ^20.19.0 || >=22.12.0}
215
- cpu: [x64]
216
- os: [darwin]
217
-
218
- '@rolldown/binding-freebsd-x64@1.0.0-rc.17':
219
- resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==}
220
- engines: {node: ^20.19.0 || >=22.12.0}
221
- cpu: [x64]
222
- os: [freebsd]
223
-
224
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17':
225
- resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==}
226
- engines: {node: ^20.19.0 || >=22.12.0}
227
- cpu: [arm]
228
- os: [linux]
229
-
230
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17':
231
- resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==}
232
- engines: {node: ^20.19.0 || >=22.12.0}
233
- cpu: [arm64]
234
- os: [linux]
235
- libc: [glibc]
236
-
237
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17':
238
- resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==}
239
- engines: {node: ^20.19.0 || >=22.12.0}
240
- cpu: [arm64]
241
- os: [linux]
242
- libc: [musl]
243
-
244
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17':
245
- resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==}
246
- engines: {node: ^20.19.0 || >=22.12.0}
247
- cpu: [ppc64]
248
- os: [linux]
249
- libc: [glibc]
250
-
251
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17':
252
- resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==}
253
- engines: {node: ^20.19.0 || >=22.12.0}
254
- cpu: [s390x]
255
- os: [linux]
256
- libc: [glibc]
257
-
258
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17':
259
- resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==}
260
- engines: {node: ^20.19.0 || >=22.12.0}
261
- cpu: [x64]
262
- os: [linux]
263
- libc: [glibc]
264
-
265
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.17':
266
- resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==}
267
- engines: {node: ^20.19.0 || >=22.12.0}
268
- cpu: [x64]
269
- os: [linux]
270
- libc: [musl]
271
-
272
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.17':
273
- resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==}
274
- engines: {node: ^20.19.0 || >=22.12.0}
275
- cpu: [arm64]
276
- os: [openharmony]
277
-
278
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.17':
279
- resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==}
280
- engines: {node: ^20.19.0 || >=22.12.0}
281
- cpu: [wasm32]
282
-
283
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17':
284
- resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==}
285
- engines: {node: ^20.19.0 || >=22.12.0}
286
- cpu: [arm64]
287
- os: [win32]
288
-
289
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17':
290
- resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==}
291
- engines: {node: ^20.19.0 || >=22.12.0}
292
- cpu: [x64]
293
- os: [win32]
294
-
295
- '@rolldown/pluginutils@1.0.0-rc.17':
296
- resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==}
297
-
298
- '@sideway/address@4.1.5':
299
- resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
300
-
301
- '@sideway/formula@3.0.1':
302
- resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
303
-
304
- '@sideway/pinpoint@2.0.0':
305
- resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
306
-
307
- '@standard-schema/spec@1.1.0':
308
- resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
309
-
310
- '@sveltejs/acorn-typescript@1.0.9':
311
- resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==}
312
- peerDependencies:
313
- acorn: ^8.9.0
314
-
315
- '@sveltejs/adapter-static@3.0.10':
316
- resolution: {integrity: sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==}
317
- peerDependencies:
318
- '@sveltejs/kit': ^2.0.0
319
-
320
- '@sveltejs/kit@2.58.0':
321
- resolution: {integrity: sha512-kT9GCN8yJTkCK1W+Gi/bvGooWAM7y7WXP+yd+rf6QOIjyoK1ERPrMwSufXJUNu2pMWIqruhFvmz+LbOqsEmKmA==}
322
- engines: {node: '>=18.13'}
323
- hasBin: true
324
- peerDependencies:
325
- '@opentelemetry/api': ^1.0.0
326
- '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0
327
- svelte: ^4.0.0 || ^5.0.0-next.0
328
- typescript: ^5.3.3 || ^6.0.0
329
- vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0
330
- peerDependenciesMeta:
331
- '@opentelemetry/api':
332
- optional: true
333
- typescript:
334
- optional: true
335
-
336
- '@sveltejs/vite-plugin-svelte@7.0.0':
337
- resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==}
338
- engines: {node: ^20.19 || ^22.12 || >=24}
339
- peerDependencies:
340
- svelte: ^5.46.4
341
- vite: ^8.0.0-beta.7 || ^8.0.0
342
-
343
- '@swc/helpers@0.5.21':
344
- resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==}
345
-
346
- '@tailwindcss/node@4.2.4':
347
- resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==}
348
-
349
- '@tailwindcss/oxide-android-arm64@4.2.4':
350
- resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==}
351
- engines: {node: '>= 20'}
352
- cpu: [arm64]
353
- os: [android]
354
-
355
- '@tailwindcss/oxide-darwin-arm64@4.2.4':
356
- resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==}
357
- engines: {node: '>= 20'}
358
- cpu: [arm64]
359
- os: [darwin]
360
-
361
- '@tailwindcss/oxide-darwin-x64@4.2.4':
362
- resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==}
363
- engines: {node: '>= 20'}
364
- cpu: [x64]
365
- os: [darwin]
366
-
367
- '@tailwindcss/oxide-freebsd-x64@4.2.4':
368
- resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==}
369
- engines: {node: '>= 20'}
370
- cpu: [x64]
371
- os: [freebsd]
372
-
373
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
374
- resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==}
375
- engines: {node: '>= 20'}
376
- cpu: [arm]
377
- os: [linux]
378
-
379
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
380
- resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==}
381
- engines: {node: '>= 20'}
382
- cpu: [arm64]
383
- os: [linux]
384
- libc: [glibc]
385
-
386
- '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
387
- resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==}
388
- engines: {node: '>= 20'}
389
- cpu: [arm64]
390
- os: [linux]
391
- libc: [musl]
392
-
393
- '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
394
- resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==}
395
- engines: {node: '>= 20'}
396
- cpu: [x64]
397
- os: [linux]
398
- libc: [glibc]
399
-
400
- '@tailwindcss/oxide-linux-x64-musl@4.2.4':
401
- resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==}
402
- engines: {node: '>= 20'}
403
- cpu: [x64]
404
- os: [linux]
405
- libc: [musl]
406
-
407
- '@tailwindcss/oxide-wasm32-wasi@4.2.4':
408
- resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==}
409
- engines: {node: '>=14.0.0'}
410
- cpu: [wasm32]
411
- bundledDependencies:
412
- - '@napi-rs/wasm-runtime'
413
- - '@emnapi/core'
414
- - '@emnapi/runtime'
415
- - '@tybys/wasm-util'
416
- - '@emnapi/wasi-threads'
417
- - tslib
418
-
419
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
420
- resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==}
421
- engines: {node: '>= 20'}
422
- cpu: [arm64]
423
- os: [win32]
424
-
425
- '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
426
- resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==}
427
- engines: {node: '>= 20'}
428
- cpu: [x64]
429
- os: [win32]
430
-
431
- '@tailwindcss/oxide@4.2.4':
432
- resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==}
433
- engines: {node: '>= 20'}
434
-
435
- '@tailwindcss/vite@4.2.4':
436
- resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==}
437
- peerDependencies:
438
- vite: ^5.2.0 || ^6 || ^7 || ^8
439
-
440
- '@tanstack/table-core@8.21.3':
441
- resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
442
- engines: {node: '>=12'}
443
-
444
- '@tybys/wasm-util@0.10.1':
445
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
446
-
447
- '@types/command-line-args@5.2.3':
448
- resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==}
449
-
450
- '@types/command-line-usage@5.0.4':
451
- resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==}
452
-
453
- '@types/cookie@0.6.0':
454
- resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
455
-
456
- '@types/d3-array@3.2.2':
457
- resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
458
-
459
- '@types/d3-contour@3.0.6':
460
- resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
461
-
462
- '@types/dom-mediacapture-transform@0.1.11':
463
- resolution: {integrity: sha512-Y2p+nGf1bF2XMttBnsVPHUWzRRZzqUoJAKmiP10b5umnO6DDrWI0BrGDJy1pOHoOULVmGSfFNkQrAlC5dcj6nQ==}
464
-
465
- '@types/dom-webcodecs@0.1.13':
466
- resolution: {integrity: sha512-O5hkiFIcjjszPIYyUSyvScyvrBoV3NOEEZx/pMlsu44TKzWNkLVBBxnxJz42in5n3QIolYOcBYFCPZZ0h8SkwQ==}
467
-
468
- '@types/estree@1.0.8':
469
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
470
-
471
- '@types/geojson@7946.0.16':
472
- resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
473
-
474
- '@types/node@24.12.2':
475
- resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==}
476
-
477
- '@types/trusted-types@2.0.7':
478
- resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
479
-
480
- '@types/validator@13.15.10':
481
- resolution: {integrity: sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==}
482
-
483
- '@typeschema/class-validator@0.3.0':
484
- resolution: {integrity: sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==}
485
- peerDependencies:
486
- class-validator: ^0.14.1
487
- peerDependenciesMeta:
488
- class-validator:
489
- optional: true
490
-
491
- '@typeschema/core@0.14.0':
492
- resolution: {integrity: sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==}
493
- peerDependencies:
494
- '@types/json-schema': ^7.0.15
495
- peerDependenciesMeta:
496
- '@types/json-schema':
497
- optional: true
498
-
499
- '@valibot/to-json-schema@1.6.0':
500
- resolution: {integrity: sha512-d6rYyK5KVa2XdqamWgZ4/Nr+cXhxjy7lmpe6Iajw15J/jmU+gyxl2IEd1Otg1d7Rl3gOQL5reulnSypzBtYy1A==}
501
- peerDependencies:
502
- valibot: ^1.3.0
503
-
504
- '@vinejs/compiler@3.0.0':
505
- resolution: {integrity: sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==}
506
- engines: {node: '>=18.0.0'}
507
-
508
- '@vinejs/vine@3.0.1':
509
- resolution: {integrity: sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==}
510
- engines: {node: '>=18.16.0'}
511
-
512
- acorn@8.16.0:
513
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
514
- engines: {node: '>=0.4.0'}
515
- hasBin: true
516
-
517
- ansi-styles@4.3.0:
518
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
519
- engines: {node: '>=8'}
520
-
521
- apache-arrow@21.1.0:
522
- resolution: {integrity: sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==}
523
- hasBin: true
524
-
525
- aria-query@5.3.1:
526
- resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==}
527
- engines: {node: '>= 0.4'}
528
-
529
- arkregex@0.0.5:
530
- resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==}
531
-
532
- arktype@2.2.0:
533
- resolution: {integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==}
534
-
535
- array-back@6.2.3:
536
- resolution: {integrity: sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw==}
537
- engines: {node: '>=12.17'}
538
-
539
- axobject-query@4.1.0:
540
- resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
541
- engines: {node: '>= 0.4'}
542
-
543
- bits-ui@2.18.0:
544
- resolution: {integrity: sha512-GLOBZRVy3hxNHIQ2MpD/+5aK9KcBFZRhUJtZ1UDABXdlVR4K6zFpgt4T+Rwuhf2sQzlc6yK1q/DprHPjwT4Pjw==}
545
- engines: {node: '>=20'}
546
- peerDependencies:
547
- '@internationalized/date': ^3.8.1
548
- svelte: ^5.33.0
549
-
550
- camelcase@8.0.0:
551
- resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
552
- engines: {node: '>=16'}
553
-
554
- chalk-template@0.4.0:
555
- resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==}
556
- engines: {node: '>=12'}
557
-
558
- chalk@4.1.2:
559
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
560
- engines: {node: '>=10'}
561
-
562
- chokidar@4.0.3:
563
- resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
564
- engines: {node: '>= 14.16.0'}
565
-
566
- class-validator@0.14.4:
567
- resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==}
568
-
569
- clsx@2.1.1:
570
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
571
- engines: {node: '>=6'}
572
-
573
- color-convert@2.0.1:
574
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
575
- engines: {node: '>=7.0.0'}
576
-
577
- color-name@1.1.4:
578
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
579
-
580
- command-line-args@6.0.2:
581
- resolution: {integrity: sha512-AIjYVxrV9X752LmPDLbVYv8aMCuHPSLZJXEo2qo/xJfv+NYhaZ4sMSF01rM+gHPaMgvPM0l5D/F+Qx+i2WfSmQ==}
582
- engines: {node: '>=12.20'}
583
- peerDependencies:
584
- '@75lb/nature': latest
585
- peerDependenciesMeta:
586
- '@75lb/nature':
587
- optional: true
588
-
589
- command-line-usage@7.0.4:
590
- resolution: {integrity: sha512-85UdvzTNx/+s5CkSgBm/0hzP80RFHAa7PsfeADE5ezZF3uHz3/Tqj9gIKGT9PTtpycc3Ua64T0oVulGfKxzfqg==}
591
- engines: {node: '>=12.20.0'}
592
-
593
- commander@14.0.3:
594
- resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==}
595
- engines: {node: '>=20'}
596
-
597
- commander@7.2.0:
598
- resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
599
- engines: {node: '>= 10'}
600
-
601
- cookie@0.6.0:
602
- resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
603
- engines: {node: '>= 0.6'}
604
-
605
- d3-array@2.12.1:
606
- resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
607
-
608
- d3-array@3.2.4:
609
- resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
610
- engines: {node: '>=12'}
611
-
612
- d3-chord@3.0.1:
613
- resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
614
- engines: {node: '>=12'}
615
-
616
- d3-color@3.1.0:
617
- resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
618
- engines: {node: '>=12'}
619
-
620
- d3-contour@4.0.2:
621
- resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
622
- engines: {node: '>=12'}
623
-
624
- d3-delaunay@6.0.4:
625
- resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
626
- engines: {node: '>=12'}
627
-
628
- d3-dispatch@3.0.1:
629
- resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
630
- engines: {node: '>=12'}
631
-
632
- d3-dsv@3.0.1:
633
- resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
634
- engines: {node: '>=12'}
635
- hasBin: true
636
-
637
- d3-force@3.0.0:
638
- resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
639
- engines: {node: '>=12'}
640
-
641
- d3-format@3.1.2:
642
- resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
643
- engines: {node: '>=12'}
644
-
645
- d3-geo-voronoi@2.1.0:
646
- resolution: {integrity: sha512-kqE4yYuOjPbKdBXG0xztCacPwkVSK2REF1opSNrnqqtXJmNcM++UbwQ8SxvwP6IQTj9RvIjjK4qeiVsEfj0Z2Q==}
647
- engines: {node: '>=12'}
648
-
649
- d3-geo@3.1.1:
650
- resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
651
- engines: {node: '>=12'}
652
-
653
- d3-hierarchy@3.1.2:
654
- resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
655
- engines: {node: '>=12'}
656
-
657
- d3-interpolate-path@2.3.0:
658
- resolution: {integrity: sha512-tZYtGXxBmbgHsIc9Wms6LS5u4w6KbP8C09a4/ZYc4KLMYYqub57rRBUgpUr2CIarIrJEpdAWWxWQvofgaMpbKQ==}
659
-
660
- d3-interpolate@3.0.1:
661
- resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
662
- engines: {node: '>=12'}
663
-
664
- d3-path@1.0.9:
665
- resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
666
-
667
- d3-path@3.1.0:
668
- resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
669
- engines: {node: '>=12'}
670
-
671
- d3-quadtree@3.0.1:
672
- resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
673
- engines: {node: '>=12'}
674
-
675
- d3-random@3.0.1:
676
- resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
677
- engines: {node: '>=12'}
678
-
679
- d3-sankey@0.12.3:
680
- resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
681
-
682
- d3-scale-chromatic@3.1.0:
683
- resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
684
- engines: {node: '>=12'}
685
-
686
- d3-scale@4.0.2:
687
- resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
688
- engines: {node: '>=12'}
689
-
690
- d3-shape@1.3.7:
691
- resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
692
-
693
- d3-shape@3.2.0:
694
- resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
695
- engines: {node: '>=12'}
696
-
697
- d3-tile@1.0.0:
698
- resolution: {integrity: sha512-79fnTKpPMPDS5xQ0xuS9ir0165NEwwkFpe/DSOmc2Gl9ldYzKKRDWogmTTE8wAJ8NA7PMapNfEcyKhI9Lxdu5Q==}
699
-
700
- d3-time-format@4.1.0:
701
- resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
702
- engines: {node: '>=12'}
703
-
704
- d3-time@3.1.0:
705
- resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
706
- engines: {node: '>=12'}
707
-
708
- d3-timer@3.0.1:
709
- resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
710
- engines: {node: '>=12'}
711
-
712
- d3-tricontour@1.1.0:
713
- resolution: {integrity: sha512-G7gHKj89n2owmkGb6WX6ixcnQ0Kf/0wpa9VIh9DGdbHu8wdrlaHU4ir3/bFNERl8N8nn4G7e7qbtBG8N9caihQ==}
714
- engines: {node: '>=12'}
715
-
716
- dayjs@1.11.20:
717
- resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
718
-
719
- deepmerge@4.3.1:
720
- resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
721
- engines: {node: '>=0.10.0'}
722
-
723
- delaunator@5.1.0:
724
- resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==}
725
-
726
- dequal@2.0.3:
727
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
728
- engines: {node: '>=6'}
729
-
730
- detect-libc@2.1.2:
731
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
732
- engines: {node: '>=8'}
733
-
734
- devalue@5.7.1:
735
- resolution: {integrity: sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==}
736
-
737
- dlv@1.1.3:
738
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
739
-
740
- effect@3.21.2:
741
- resolution: {integrity: sha512-rXd2FGDM8KdjSIrc+mqEELo7ScW7xTVxEf1iInmPSpIde9/nyGuFM710cjTo7/EreGXiUX2MOonPpprbz2XHCg==}
742
-
743
- enhanced-resolve@5.21.0:
744
- resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==}
745
- engines: {node: '>=10.13.0'}
746
-
747
- esm-env@1.2.2:
748
- resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
749
-
750
- esrap@2.2.5:
751
- resolution: {integrity: sha512-/yLB1538mag+dn0wsePTe8C0rDIjUOaJpMs2McodSzmM2msWcZsBSdRtg6HOBt0A/r82BN+Md3pgwSc/uWt2Ig==}
752
- peerDependencies:
753
- '@typescript-eslint/types': ^8.2.0
754
- peerDependenciesMeta:
755
- '@typescript-eslint/types':
756
- optional: true
757
-
758
- estree-walker@3.0.3:
759
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
760
-
761
- fast-check@3.23.2:
762
- resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==}
763
- engines: {node: '>=8.0.0'}
764
-
765
- fdir@6.5.0:
766
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
767
- engines: {node: '>=12.0.0'}
768
- peerDependencies:
769
- picomatch: ^3 || ^4
770
- peerDependenciesMeta:
771
- picomatch:
772
- optional: true
773
-
774
- find-replace@5.0.2:
775
- resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==}
776
- engines: {node: '>=14'}
777
- peerDependencies:
778
- '@75lb/nature': latest
779
- peerDependenciesMeta:
780
- '@75lb/nature':
781
- optional: true
782
-
783
- flatbuffers@25.9.23:
784
- resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==}
785
-
786
- formsnap@2.0.1:
787
- resolution: {integrity: sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==}
788
- engines: {node: '>=18', pnpm: '>=8.7.0'}
789
- peerDependencies:
790
- svelte: ^5.0.0
791
- sveltekit-superforms: ^2.19.0
792
-
793
- fsevents@2.3.3:
794
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
795
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
796
- os: [darwin]
797
-
798
- graceful-fs@4.2.11:
799
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
800
-
801
- has-flag@4.0.0:
802
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
803
- engines: {node: '>=8'}
804
-
805
- iconv-lite@0.6.3:
806
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
807
- engines: {node: '>=0.10.0'}
808
-
809
- inline-style-parser@0.2.7:
810
- resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
811
-
812
- internmap@1.0.1:
813
- resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
814
-
815
- internmap@2.0.3:
816
- resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
817
- engines: {node: '>=12'}
818
-
819
- is-reference@3.0.3:
820
- resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
821
-
822
- jiti@2.6.1:
823
- resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
824
- hasBin: true
825
-
826
- joi@17.13.3:
827
- resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
828
-
829
- json-bignum@0.0.3:
830
- resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==}
831
- engines: {node: '>=0.8'}
832
-
833
- json-schema-to-ts@3.1.1:
834
- resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==}
835
- engines: {node: '>=16'}
836
-
837
- kleur@4.1.5:
838
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
839
- engines: {node: '>=6'}
840
-
841
- layerchart@2.0.0-next.48:
842
- resolution: {integrity: sha512-XoEYBztamA8lMxtF/Jz3aDX0HMk8dI+o4fK9fSl8ecT2Tdx3DQUjtKGtlQAOFdwC/AWifeLmKq5cMTQt9COZPQ==}
843
- peerDependencies:
844
- svelte: ^5.0.0
845
-
846
- libphonenumber-js@1.12.42:
847
- resolution: {integrity: sha512-oKQFPTibqQwZZkChCDVMFVJXMZdyJNqDWZWYNn8BgyAaK/6yFJEowxCY0RVFirRyWP63hMRuKlkSEd9qlvbWXg==}
848
-
849
- lightningcss-android-arm64@1.32.0:
850
- resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
851
- engines: {node: '>= 12.0.0'}
852
- cpu: [arm64]
853
- os: [android]
854
-
855
- lightningcss-darwin-arm64@1.32.0:
856
- resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
857
- engines: {node: '>= 12.0.0'}
858
- cpu: [arm64]
859
- os: [darwin]
860
-
861
- lightningcss-darwin-x64@1.32.0:
862
- resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
863
- engines: {node: '>= 12.0.0'}
864
- cpu: [x64]
865
- os: [darwin]
866
-
867
- lightningcss-freebsd-x64@1.32.0:
868
- resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
869
- engines: {node: '>= 12.0.0'}
870
- cpu: [x64]
871
- os: [freebsd]
872
-
873
- lightningcss-linux-arm-gnueabihf@1.32.0:
874
- resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
875
- engines: {node: '>= 12.0.0'}
876
- cpu: [arm]
877
- os: [linux]
878
-
879
- lightningcss-linux-arm64-gnu@1.32.0:
880
- resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
881
- engines: {node: '>= 12.0.0'}
882
- cpu: [arm64]
883
- os: [linux]
884
- libc: [glibc]
885
-
886
- lightningcss-linux-arm64-musl@1.32.0:
887
- resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
888
- engines: {node: '>= 12.0.0'}
889
- cpu: [arm64]
890
- os: [linux]
891
- libc: [musl]
892
-
893
- lightningcss-linux-x64-gnu@1.32.0:
894
- resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
895
- engines: {node: '>= 12.0.0'}
896
- cpu: [x64]
897
- os: [linux]
898
- libc: [glibc]
899
-
900
- lightningcss-linux-x64-musl@1.32.0:
901
- resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
902
- engines: {node: '>= 12.0.0'}
903
- cpu: [x64]
904
- os: [linux]
905
- libc: [musl]
906
-
907
- lightningcss-win32-arm64-msvc@1.32.0:
908
- resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
909
- engines: {node: '>= 12.0.0'}
910
- cpu: [arm64]
911
- os: [win32]
912
-
913
- lightningcss-win32-x64-msvc@1.32.0:
914
- resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
915
- engines: {node: '>= 12.0.0'}
916
- cpu: [x64]
917
- os: [win32]
918
-
919
- lightningcss@1.32.0:
920
- resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
921
- engines: {node: '>= 12.0.0'}
922
-
923
- locate-character@3.0.0:
924
- resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
925
-
926
- lodash.camelcase@4.3.0:
927
- resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
928
-
929
- lz-string@1.5.0:
930
- resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
931
- hasBin: true
932
-
933
- magic-string@0.30.21:
934
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
935
-
936
- mediabunny@1.42.0:
937
- resolution: {integrity: sha512-s9ypTqLi6kbh95gC+YaJlG0PkLvMxu37Q/wO/pFZx0fUCA5Ym5mp+2dWoa83mKQ3Uo18aNlgev5iJ5ESZqWwgQ==}
938
-
939
- memoize-weak@1.0.2:
940
- resolution: {integrity: sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==}
941
-
942
- memoize@10.2.0:
943
- resolution: {integrity: sha512-DeC6b7QBrZsRs3Y02A6A7lQyzFbsQbqgjI6UW0GigGWV+u1s25TycMr0XHZE4cJce7rY/vyw2ctMQqfDkIhUEA==}
944
- engines: {node: '>=18'}
945
-
946
- mimic-function@5.0.1:
947
- resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
948
- engines: {node: '>=18'}
949
-
950
- mode-watcher@1.1.0:
951
- resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==}
952
- peerDependencies:
953
- svelte: ^5.27.0
954
-
955
- mri@1.2.0:
956
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
957
- engines: {node: '>=4'}
958
-
959
- mrmime@2.0.1:
960
- resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
961
- engines: {node: '>=10'}
962
-
963
- nanoid@3.3.11:
964
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
965
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
966
- hasBin: true
967
-
968
- node-fetch-native@1.6.7:
969
- resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
970
-
971
- normalize-url@8.1.1:
972
- resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==}
973
- engines: {node: '>=14.16'}
974
-
975
- obug@2.1.1:
976
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
977
-
978
- paneforge@1.0.2:
979
- resolution: {integrity: sha512-KzmIXQH1wCfwZ4RsMohD/IUtEjVhteR+c+ulb/CHYJHX8SuDXoJmChtsc/Xs5Wl8NHS4L5Q7cxL8MG40gSU1bA==}
980
- peerDependencies:
981
- svelte: ^5.29.0
982
-
983
- parquet-wasm@0.7.1:
984
- resolution: {integrity: sha512-fjEGpMApzt3mpI2pUxdRgQGu5G+s4nr0vm5xn43JO7jxdYzzu2fHrVrTHtfeEhtB6vfvTzJBz0WydDYzLWvszQ==}
985
-
986
- phosphor-svelte@3.1.0:
987
- resolution: {integrity: sha512-nldtxx+XCgNREvrb7O5xgDsefytXpSkPTx8Rnu3f2qQCUZLDV1rLxYSd2Jcwckuo9lZB1qKMqGR17P4UDC0PrA==}
988
- peerDependencies:
989
- svelte: ^5.0.0 || ^5.0.0-next.96
990
- vite: '>=5'
991
- peerDependenciesMeta:
992
- vite:
993
- optional: true
994
-
995
- picocolors@1.1.1:
996
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
997
-
998
- picomatch@4.0.4:
999
- resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
1000
- engines: {node: '>=12'}
1001
-
1002
- postcss@8.5.12:
1003
- resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==}
1004
- engines: {node: ^10 || ^12 || >=14}
1005
-
1006
- property-expr@2.0.6:
1007
- resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==}
1008
-
1009
- pure-rand@6.1.0:
1010
- resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
1011
-
1012
- readdirp@4.1.2:
1013
- resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
1014
- engines: {node: '>= 14.18.0'}
1015
-
1016
- robust-predicates@3.0.3:
1017
- resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
1018
-
1019
- rolldown@1.0.0-rc.17:
1020
- resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==}
1021
- engines: {node: ^20.19.0 || >=22.12.0}
1022
- hasBin: true
1023
-
1024
- runed@0.23.4:
1025
- resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==}
1026
- peerDependencies:
1027
- svelte: ^5.7.0
1028
-
1029
- runed@0.25.0:
1030
- resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==}
1031
- peerDependencies:
1032
- svelte: ^5.7.0
1033
-
1034
- runed@0.28.0:
1035
- resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==}
1036
- peerDependencies:
1037
- svelte: ^5.7.0
1038
-
1039
- runed@0.29.2:
1040
- resolution: {integrity: sha512-0cq6cA6sYGZwl/FvVqjx9YN+1xEBu9sDDyuWdDW1yWX7JF2wmvmVKfH+hVCZs+csW+P3ARH92MjI3H9QTagOQA==}
1041
- peerDependencies:
1042
- svelte: ^5.7.0
1043
-
1044
- runed@0.35.1:
1045
- resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==}
1046
- peerDependencies:
1047
- '@sveltejs/kit': ^2.21.0
1048
- svelte: ^5.7.0
1049
- peerDependenciesMeta:
1050
- '@sveltejs/kit':
1051
- optional: true
1052
-
1053
- runed@0.37.1:
1054
- resolution: {integrity: sha512-MeFY73xBW8IueWBm012nNFIGy19WUGPLtknavyUPMpnyt350M47PhGSGrGoSLbidwn+Zlt/O0cp8/OZE3LASWA==}
1055
- peerDependencies:
1056
- '@sveltejs/kit': ^2.21.0
1057
- svelte: ^5.7.0
1058
- zod: ^4.1.0
1059
- peerDependenciesMeta:
1060
- '@sveltejs/kit':
1061
- optional: true
1062
- zod:
1063
- optional: true
1064
-
1065
- rw@1.3.3:
1066
- resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
1067
-
1068
- sade@1.8.1:
1069
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1070
- engines: {node: '>=6'}
1071
-
1072
- safer-buffer@2.1.2:
1073
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1074
-
1075
- set-cookie-parser@3.1.0:
1076
- resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==}
1077
-
1078
- shadcn-svelte@1.2.7:
1079
- resolution: {integrity: sha512-mWuQk4H4gtV+J2wJQ7nEPKNnB/v86AALFryZU0SSM7ChHmJJMZ1kH+qIuxYKrXm9vOOOcSWHRsWzPDB71DnjYA==}
1080
- hasBin: true
1081
- peerDependencies:
1082
- svelte: ^5.0.0
1083
-
1084
- sirv@3.0.2:
1085
- resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
1086
- engines: {node: '>=18'}
1087
-
1088
- source-map-js@1.2.1:
1089
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1090
- engines: {node: '>=0.10.0'}
1091
-
1092
- style-to-object@1.0.14:
1093
- resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
1094
-
1095
- superstruct@2.0.2:
1096
- resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==}
1097
- engines: {node: '>=14.0.0'}
1098
-
1099
- supports-color@7.2.0:
1100
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1101
- engines: {node: '>=8'}
1102
-
1103
- svelte-check@4.4.6:
1104
- resolution: {integrity: sha512-kP1zG81EWaFe9ZyTv4ZXv44Csi6Pkdpb7S3oj6m+K2ec/IcDg/a8LsFsnVLqm2nxtkSwsd5xPj/qFkTBgXHXjg==}
1105
- engines: {node: '>= 18.0.0'}
1106
- hasBin: true
1107
- peerDependencies:
1108
- svelte: ^4.0.0 || ^5.0.0-next.0
1109
- typescript: '>=5.0.0'
1110
-
1111
- svelte-sonner@1.1.1:
1112
- resolution: {integrity: sha512-5cd3p7wa4cq0NsqslMwdlPb7x1JglEZ/GKrLePWNr5bCxR1nagAVrY01FRFrXfUGs41miLt3C327+8XJo5BzZw==}
1113
- peerDependencies:
1114
- svelte: ^5.0.0
1115
-
1116
- svelte-toolbelt@0.10.6:
1117
- resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==}
1118
- engines: {node: '>=18', pnpm: '>=8.7.0'}
1119
- peerDependencies:
1120
- svelte: ^5.30.2
1121
-
1122
- svelte-toolbelt@0.5.0:
1123
- resolution: {integrity: sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==}
1124
- engines: {node: '>=18', pnpm: '>=8.7.0'}
1125
- peerDependencies:
1126
- svelte: ^5.0.0-next.126
1127
-
1128
- svelte-toolbelt@0.7.1:
1129
- resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==}
1130
- engines: {node: '>=18', pnpm: '>=8.7.0'}
1131
- peerDependencies:
1132
- svelte: ^5.0.0
1133
-
1134
- svelte-toolbelt@0.9.3:
1135
- resolution: {integrity: sha512-HCSWxCtVmv+c6g1ACb8LTwHVbDqLKJvHpo6J8TaqwUme2hj9ATJCpjCPNISR1OCq2Q4U1KT41if9ON0isINQZw==}
1136
- engines: {node: '>=18', pnpm: '>=8.7.0'}
1137
- peerDependencies:
1138
- svelte: ^5.30.2
1139
-
1140
- svelte@5.55.5:
1141
- resolution: {integrity: sha512-2uCs/LZ9us+AktdzYJM8OcxQ8qnPS1kpaO7syGT/MgO+6Qr1Ybl+TqPq+97u7PHqmmMlye5ZkoyXONy5mjjAbw==}
1142
- engines: {node: '>=18'}
1143
-
1144
- sveltekit-superforms@2.30.1:
1145
- resolution: {integrity: sha512-wBzyqsE0idvEJWuNJ+HCiAtdxa7Z55GZ8jmtlVHJfonrk9bRYC49MoPaloYyFoYuU3QPy6Omna/Qzn1kaIkgew==}
1146
- peerDependencies:
1147
- '@sveltejs/kit': 1.x || 2.x
1148
- svelte: 3.x || 4.x || >=5.0.0-next.51
1149
-
1150
- tabbable@6.4.0:
1151
- resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==}
1152
-
1153
- table-layout@4.1.1:
1154
- resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==}
1155
- engines: {node: '>=12.17'}
1156
-
1157
- tailwind-merge@3.5.0:
1158
- resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
1159
-
1160
- tailwind-variants@3.2.2:
1161
- resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==}
1162
- engines: {node: '>=16.x', pnpm: '>=7.x'}
1163
- peerDependencies:
1164
- tailwind-merge: '>=3.0.0'
1165
- tailwindcss: '*'
1166
- peerDependenciesMeta:
1167
- tailwind-merge:
1168
- optional: true
1169
-
1170
- tailwindcss@4.2.4:
1171
- resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==}
1172
-
1173
- tapable@2.3.3:
1174
- resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
1175
- engines: {node: '>=6'}
1176
-
1177
- tiny-case@1.0.3:
1178
- resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==}
1179
-
1180
- tinyglobby@0.2.16:
1181
- resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
1182
- engines: {node: '>=12.0.0'}
1183
-
1184
- toposort@2.0.2:
1185
- resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
1186
-
1187
- totalist@3.0.1:
1188
- resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1189
- engines: {node: '>=6'}
1190
-
1191
- ts-algebra@2.0.0:
1192
- resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==}
1193
-
1194
- ts-deepmerge@7.0.3:
1195
- resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==}
1196
- engines: {node: '>=14.13.1'}
1197
-
1198
- tslib@2.8.1:
1199
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1200
-
1201
- tw-animate-css@1.4.0:
1202
- resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
1203
-
1204
- type-fest@2.19.0:
1205
- resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
1206
- engines: {node: '>=12.20'}
1207
-
1208
- typebox@1.1.34:
1209
- resolution: {integrity: sha512-V0fM5W5DTXlEMDxqtX1dQ25HR1RQ11DPUVrIup4sJi1yQtIyI30SHfxBy/HjXKL1CtUqc5or2igA/wa/v4hMKQ==}
1210
-
1211
- typescript@6.0.3:
1212
- resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
1213
- engines: {node: '>=14.17'}
1214
- hasBin: true
1215
-
1216
- typical@7.3.0:
1217
- resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==}
1218
- engines: {node: '>=12.17'}
1219
-
1220
- undici-types@7.16.0:
1221
- resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
1222
-
1223
- valibot@1.3.1:
1224
- resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==}
1225
- peerDependencies:
1226
- typescript: '>=5'
1227
- peerDependenciesMeta:
1228
- typescript:
1229
- optional: true
1230
-
1231
- validator@13.15.35:
1232
- resolution: {integrity: sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw==}
1233
- engines: {node: '>= 0.10'}
1234
-
1235
- vaul-svelte@1.0.0-next.7:
1236
- resolution: {integrity: sha512-7zN7Bi3dFQixvvbUJY9uGDe7Ws/dGZeBQR2pXdXmzQiakjrxBvWo0QrmsX3HK+VH+SZOltz378cmgmCS9f9rSg==}
1237
- engines: {node: '>=18', pnpm: '>=8.7.0'}
1238
- peerDependencies:
1239
- svelte: ^5.0.0
1240
-
1241
- vite@8.0.10:
1242
- resolution: {integrity: sha512-rZuUu9j6J5uotLDs+cAA4O5H4K1SfPliUlQwqa6YEwSrWDZzP4rhm00oJR5snMewjxF5V/K3D4kctsUTsIU9Mw==}
1243
- engines: {node: ^20.19.0 || >=22.12.0}
1244
- hasBin: true
1245
- peerDependencies:
1246
- '@types/node': ^20.19.0 || >=22.12.0
1247
- '@vitejs/devtools': ^0.1.0
1248
- esbuild: ^0.27.0 || ^0.28.0
1249
- jiti: '>=1.21.0'
1250
- less: ^4.0.0
1251
- sass: ^1.70.0
1252
- sass-embedded: ^1.70.0
1253
- stylus: '>=0.54.8'
1254
- sugarss: ^5.0.0
1255
- terser: ^5.16.0
1256
- tsx: ^4.8.1
1257
- yaml: ^2.4.2
1258
- peerDependenciesMeta:
1259
- '@types/node':
1260
- optional: true
1261
- '@vitejs/devtools':
1262
- optional: true
1263
- esbuild:
1264
- optional: true
1265
- jiti:
1266
- optional: true
1267
- less:
1268
- optional: true
1269
- sass:
1270
- optional: true
1271
- sass-embedded:
1272
- optional: true
1273
- stylus:
1274
- optional: true
1275
- sugarss:
1276
- optional: true
1277
- terser:
1278
- optional: true
1279
- tsx:
1280
- optional: true
1281
- yaml:
1282
- optional: true
1283
-
1284
- vitefu@1.1.3:
1285
- resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==}
1286
- peerDependencies:
1287
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
1288
- peerDependenciesMeta:
1289
- vite:
1290
- optional: true
1291
-
1292
- wordwrapjs@5.1.1:
1293
- resolution: {integrity: sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==}
1294
- engines: {node: '>=12.17'}
1295
-
1296
- yup@1.7.1:
1297
- resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==}
1298
-
1299
- zimmerframe@1.1.4:
1300
- resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
1301
-
1302
- zod-v3-to-json-schema@4.0.0:
1303
- resolution: {integrity: sha512-KixLrhX/uPmRFnDgsZrzrk4x5SSJA+PmaE5adbfID9+3KPJcdxqRobaHU397EfWBqfQircrjKqvEqZ/mW5QH6w==}
1304
- peerDependencies:
1305
- zod: ^3.25 || ^4.0.14
1306
-
1307
- zod@4.3.6:
1308
- resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
1309
-
1310
- snapshots:
1311
-
1312
- '@ark/schema@0.56.0':
1313
- dependencies:
1314
- '@ark/util': 0.56.0
1315
- optional: true
1316
-
1317
- '@ark/util@0.56.0':
1318
- optional: true
1319
-
1320
- '@babel/runtime@7.29.2':
1321
- optional: true
1322
-
1323
- '@dagrejs/dagre@2.0.4':
1324
- dependencies:
1325
- '@dagrejs/graphlib': 3.0.4
1326
-
1327
- '@dagrejs/graphlib@3.0.4': {}
1328
-
1329
- '@emnapi/core@1.10.0':
1330
- dependencies:
1331
- '@emnapi/wasi-threads': 1.2.1
1332
- tslib: 2.8.1
1333
- optional: true
1334
-
1335
- '@emnapi/runtime@1.10.0':
1336
- dependencies:
1337
- tslib: 2.8.1
1338
- optional: true
1339
-
1340
- '@emnapi/wasi-threads@1.2.1':
1341
- dependencies:
1342
- tslib: 2.8.1
1343
- optional: true
1344
-
1345
- '@exodus/schemasafe@1.3.0':
1346
- optional: true
1347
-
1348
- '@floating-ui/core@1.7.5':
1349
- dependencies:
1350
- '@floating-ui/utils': 0.2.11
1351
-
1352
- '@floating-ui/dom@1.7.6':
1353
- dependencies:
1354
- '@floating-ui/core': 1.7.5
1355
- '@floating-ui/utils': 0.2.11
1356
-
1357
- '@floating-ui/utils@0.2.11': {}
1358
-
1359
- '@fontsource-variable/oxanium@5.2.8': {}
1360
-
1361
- '@fontsource-variable/roboto-slab@5.2.8': {}
1362
-
1363
- '@hapi/hoek@9.3.0':
1364
- optional: true
1365
-
1366
- '@hapi/topo@5.1.0':
1367
- dependencies:
1368
- '@hapi/hoek': 9.3.0
1369
- optional: true
1370
-
1371
- '@internationalized/date@3.12.1':
1372
- dependencies:
1373
- '@swc/helpers': 0.5.21
1374
-
1375
- '@jridgewell/gen-mapping@0.3.13':
1376
- dependencies:
1377
- '@jridgewell/sourcemap-codec': 1.5.5
1378
- '@jridgewell/trace-mapping': 0.3.31
1379
-
1380
- '@jridgewell/remapping@2.3.5':
1381
- dependencies:
1382
- '@jridgewell/gen-mapping': 0.3.13
1383
- '@jridgewell/trace-mapping': 0.3.31
1384
-
1385
- '@jridgewell/resolve-uri@3.1.2': {}
1386
-
1387
- '@jridgewell/sourcemap-codec@1.5.5': {}
1388
-
1389
- '@jridgewell/trace-mapping@0.3.31':
1390
- dependencies:
1391
- '@jridgewell/resolve-uri': 3.1.2
1392
- '@jridgewell/sourcemap-codec': 1.5.5
1393
-
1394
- '@layerstack/svelte-actions@1.0.1-next.18':
1395
- dependencies:
1396
- '@floating-ui/dom': 1.7.6
1397
- '@layerstack/utils': 2.0.0-next.18
1398
- d3-scale: 4.0.2
1399
-
1400
- '@layerstack/svelte-state@0.1.0-next.23':
1401
- dependencies:
1402
- '@layerstack/utils': 2.0.0-next.18
1403
-
1404
- '@layerstack/tailwind@2.0.0-next.21':
1405
- dependencies:
1406
- '@layerstack/utils': 2.0.0-next.18
1407
- clsx: 2.1.1
1408
- d3-array: 3.2.4
1409
- tailwind-merge: 3.5.0
1410
-
1411
- '@layerstack/utils@2.0.0-next.18':
1412
- dependencies:
1413
- d3-array: 3.2.4
1414
- d3-time: 3.1.0
1415
- d3-time-format: 4.1.0
1416
-
1417
- '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
1418
- dependencies:
1419
- '@emnapi/core': 1.10.0
1420
- '@emnapi/runtime': 1.10.0
1421
- '@tybys/wasm-util': 0.10.1
1422
- optional: true
1423
-
1424
- '@oxc-project/types@0.127.0': {}
1425
-
1426
- '@polka/url@1.0.0-next.29': {}
1427
-
1428
- '@poppinss/macroable@1.1.2':
1429
- optional: true
1430
-
1431
- '@rolldown/binding-android-arm64@1.0.0-rc.17':
1432
- optional: true
1433
-
1434
- '@rolldown/binding-darwin-arm64@1.0.0-rc.17':
1435
- optional: true
1436
-
1437
- '@rolldown/binding-darwin-x64@1.0.0-rc.17':
1438
- optional: true
1439
-
1440
- '@rolldown/binding-freebsd-x64@1.0.0-rc.17':
1441
- optional: true
1442
-
1443
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17':
1444
- optional: true
1445
-
1446
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17':
1447
- optional: true
1448
-
1449
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17':
1450
- optional: true
1451
-
1452
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17':
1453
- optional: true
1454
-
1455
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17':
1456
- optional: true
1457
-
1458
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17':
1459
- optional: true
1460
-
1461
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.17':
1462
- optional: true
1463
-
1464
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.17':
1465
- optional: true
1466
-
1467
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.17':
1468
- dependencies:
1469
- '@emnapi/core': 1.10.0
1470
- '@emnapi/runtime': 1.10.0
1471
- '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
1472
- optional: true
1473
-
1474
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17':
1475
- optional: true
1476
-
1477
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17':
1478
- optional: true
1479
-
1480
- '@rolldown/pluginutils@1.0.0-rc.17': {}
1481
-
1482
- '@sideway/address@4.1.5':
1483
- dependencies:
1484
- '@hapi/hoek': 9.3.0
1485
- optional: true
1486
-
1487
- '@sideway/formula@3.0.1':
1488
- optional: true
1489
-
1490
- '@sideway/pinpoint@2.0.0':
1491
- optional: true
1492
-
1493
- '@standard-schema/spec@1.1.0': {}
1494
-
1495
- '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)':
1496
- dependencies:
1497
- acorn: 8.16.0
1498
-
1499
- '@sveltejs/adapter-static@3.0.10(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))':
1500
- dependencies:
1501
- '@sveltejs/kit': 2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
1502
-
1503
- '@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))':
1504
- dependencies:
1505
- '@standard-schema/spec': 1.1.0
1506
- '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
1507
- '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
1508
- '@types/cookie': 0.6.0
1509
- acorn: 8.16.0
1510
- cookie: 0.6.0
1511
- devalue: 5.7.1
1512
- esm-env: 1.2.2
1513
- kleur: 4.1.5
1514
- magic-string: 0.30.21
1515
- mrmime: 2.0.1
1516
- set-cookie-parser: 3.1.0
1517
- sirv: 3.0.2
1518
- svelte: 5.55.5
1519
- vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
1520
- optionalDependencies:
1521
- typescript: 6.0.3
1522
-
1523
- '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))':
1524
- dependencies:
1525
- deepmerge: 4.3.1
1526
- magic-string: 0.30.21
1527
- obug: 2.1.1
1528
- svelte: 5.55.5
1529
- vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
1530
- vitefu: 1.1.3(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
1531
-
1532
- '@swc/helpers@0.5.21':
1533
- dependencies:
1534
- tslib: 2.8.1
1535
-
1536
- '@tailwindcss/node@4.2.4':
1537
- dependencies:
1538
- '@jridgewell/remapping': 2.3.5
1539
- enhanced-resolve: 5.21.0
1540
- jiti: 2.6.1
1541
- lightningcss: 1.32.0
1542
- magic-string: 0.30.21
1543
- source-map-js: 1.2.1
1544
- tailwindcss: 4.2.4
1545
-
1546
- '@tailwindcss/oxide-android-arm64@4.2.4':
1547
- optional: true
1548
-
1549
- '@tailwindcss/oxide-darwin-arm64@4.2.4':
1550
- optional: true
1551
-
1552
- '@tailwindcss/oxide-darwin-x64@4.2.4':
1553
- optional: true
1554
-
1555
- '@tailwindcss/oxide-freebsd-x64@4.2.4':
1556
- optional: true
1557
-
1558
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
1559
- optional: true
1560
-
1561
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
1562
- optional: true
1563
-
1564
- '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
1565
- optional: true
1566
-
1567
- '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
1568
- optional: true
1569
-
1570
- '@tailwindcss/oxide-linux-x64-musl@4.2.4':
1571
- optional: true
1572
-
1573
- '@tailwindcss/oxide-wasm32-wasi@4.2.4':
1574
- optional: true
1575
-
1576
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
1577
- optional: true
1578
-
1579
- '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
1580
- optional: true
1581
-
1582
- '@tailwindcss/oxide@4.2.4':
1583
- optionalDependencies:
1584
- '@tailwindcss/oxide-android-arm64': 4.2.4
1585
- '@tailwindcss/oxide-darwin-arm64': 4.2.4
1586
- '@tailwindcss/oxide-darwin-x64': 4.2.4
1587
- '@tailwindcss/oxide-freebsd-x64': 4.2.4
1588
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4
1589
- '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4
1590
- '@tailwindcss/oxide-linux-arm64-musl': 4.2.4
1591
- '@tailwindcss/oxide-linux-x64-gnu': 4.2.4
1592
- '@tailwindcss/oxide-linux-x64-musl': 4.2.4
1593
- '@tailwindcss/oxide-wasm32-wasi': 4.2.4
1594
- '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4
1595
- '@tailwindcss/oxide-win32-x64-msvc': 4.2.4
1596
-
1597
- '@tailwindcss/vite@4.2.4(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))':
1598
- dependencies:
1599
- '@tailwindcss/node': 4.2.4
1600
- '@tailwindcss/oxide': 4.2.4
1601
- tailwindcss: 4.2.4
1602
- vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
1603
-
1604
- '@tanstack/table-core@8.21.3': {}
1605
-
1606
- '@tybys/wasm-util@0.10.1':
1607
- dependencies:
1608
- tslib: 2.8.1
1609
- optional: true
1610
-
1611
- '@types/command-line-args@5.2.3': {}
1612
-
1613
- '@types/command-line-usage@5.0.4': {}
1614
-
1615
- '@types/cookie@0.6.0': {}
1616
-
1617
- '@types/d3-array@3.2.2': {}
1618
-
1619
- '@types/d3-contour@3.0.6':
1620
- dependencies:
1621
- '@types/d3-array': 3.2.2
1622
- '@types/geojson': 7946.0.16
1623
-
1624
- '@types/dom-mediacapture-transform@0.1.11':
1625
- dependencies:
1626
- '@types/dom-webcodecs': 0.1.13
1627
-
1628
- '@types/dom-webcodecs@0.1.13': {}
1629
-
1630
- '@types/estree@1.0.8': {}
1631
-
1632
- '@types/geojson@7946.0.16': {}
1633
-
1634
- '@types/node@24.12.2':
1635
- dependencies:
1636
- undici-types: 7.16.0
1637
-
1638
- '@types/trusted-types@2.0.7': {}
1639
-
1640
- '@types/validator@13.15.10':
1641
- optional: true
1642
-
1643
- '@typeschema/class-validator@0.3.0(class-validator@0.14.4)':
1644
- dependencies:
1645
- '@typeschema/core': 0.14.0
1646
- optionalDependencies:
1647
- class-validator: 0.14.4
1648
- transitivePeerDependencies:
1649
- - '@types/json-schema'
1650
- optional: true
1651
-
1652
- '@typeschema/core@0.14.0':
1653
- optional: true
1654
-
1655
- '@valibot/to-json-schema@1.6.0(valibot@1.3.1(typescript@6.0.3))':
1656
- dependencies:
1657
- valibot: 1.3.1(typescript@6.0.3)
1658
- optional: true
1659
-
1660
- '@vinejs/compiler@3.0.0':
1661
- optional: true
1662
-
1663
- '@vinejs/vine@3.0.1':
1664
- dependencies:
1665
- '@poppinss/macroable': 1.1.2
1666
- '@types/validator': 13.15.10
1667
- '@vinejs/compiler': 3.0.0
1668
- camelcase: 8.0.0
1669
- dayjs: 1.11.20
1670
- dlv: 1.1.3
1671
- normalize-url: 8.1.1
1672
- validator: 13.15.35
1673
- optional: true
1674
-
1675
- acorn@8.16.0: {}
1676
-
1677
- ansi-styles@4.3.0:
1678
- dependencies:
1679
- color-convert: 2.0.1
1680
-
1681
- apache-arrow@21.1.0:
1682
- dependencies:
1683
- '@swc/helpers': 0.5.21
1684
- '@types/command-line-args': 5.2.3
1685
- '@types/command-line-usage': 5.0.4
1686
- '@types/node': 24.12.2
1687
- command-line-args: 6.0.2
1688
- command-line-usage: 7.0.4
1689
- flatbuffers: 25.9.23
1690
- json-bignum: 0.0.3
1691
- tslib: 2.8.1
1692
- transitivePeerDependencies:
1693
- - '@75lb/nature'
1694
-
1695
- aria-query@5.3.1: {}
1696
-
1697
- arkregex@0.0.5:
1698
- dependencies:
1699
- '@ark/util': 0.56.0
1700
- optional: true
1701
-
1702
- arktype@2.2.0:
1703
- dependencies:
1704
- '@ark/schema': 0.56.0
1705
- '@ark/util': 0.56.0
1706
- arkregex: 0.0.5
1707
- optional: true
1708
-
1709
- array-back@6.2.3: {}
1710
-
1711
- axobject-query@4.1.0: {}
1712
-
1713
- bits-ui@2.18.0(@internationalized/date@3.12.1)(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5):
1714
- dependencies:
1715
- '@floating-ui/core': 1.7.5
1716
- '@floating-ui/dom': 1.7.6
1717
- '@internationalized/date': 3.12.1
1718
- esm-env: 1.2.2
1719
- runed: 0.35.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)
1720
- svelte: 5.55.5
1721
- svelte-toolbelt: 0.10.6(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)
1722
- tabbable: 6.4.0
1723
- transitivePeerDependencies:
1724
- - '@sveltejs/kit'
1725
-
1726
- camelcase@8.0.0:
1727
- optional: true
1728
-
1729
- chalk-template@0.4.0:
1730
- dependencies:
1731
- chalk: 4.1.2
1732
-
1733
- chalk@4.1.2:
1734
- dependencies:
1735
- ansi-styles: 4.3.0
1736
- supports-color: 7.2.0
1737
-
1738
- chokidar@4.0.3:
1739
- dependencies:
1740
- readdirp: 4.1.2
1741
-
1742
- class-validator@0.14.4:
1743
- dependencies:
1744
- '@types/validator': 13.15.10
1745
- libphonenumber-js: 1.12.42
1746
- validator: 13.15.35
1747
- optional: true
1748
-
1749
- clsx@2.1.1: {}
1750
-
1751
- color-convert@2.0.1:
1752
- dependencies:
1753
- color-name: 1.1.4
1754
-
1755
- color-name@1.1.4: {}
1756
-
1757
- command-line-args@6.0.2:
1758
- dependencies:
1759
- array-back: 6.2.3
1760
- find-replace: 5.0.2
1761
- lodash.camelcase: 4.3.0
1762
- typical: 7.3.0
1763
-
1764
- command-line-usage@7.0.4:
1765
- dependencies:
1766
- array-back: 6.2.3
1767
- chalk-template: 0.4.0
1768
- table-layout: 4.1.1
1769
- typical: 7.3.0
1770
-
1771
- commander@14.0.3: {}
1772
-
1773
- commander@7.2.0: {}
1774
-
1775
- cookie@0.6.0: {}
1776
-
1777
- d3-array@2.12.1:
1778
- dependencies:
1779
- internmap: 1.0.1
1780
-
1781
- d3-array@3.2.4:
1782
- dependencies:
1783
- internmap: 2.0.3
1784
-
1785
- d3-chord@3.0.1:
1786
- dependencies:
1787
- d3-path: 3.1.0
1788
-
1789
- d3-color@3.1.0: {}
1790
-
1791
- d3-contour@4.0.2:
1792
- dependencies:
1793
- d3-array: 3.2.4
1794
-
1795
- d3-delaunay@6.0.4:
1796
- dependencies:
1797
- delaunator: 5.1.0
1798
-
1799
- d3-dispatch@3.0.1: {}
1800
-
1801
- d3-dsv@3.0.1:
1802
- dependencies:
1803
- commander: 7.2.0
1804
- iconv-lite: 0.6.3
1805
- rw: 1.3.3
1806
-
1807
- d3-force@3.0.0:
1808
- dependencies:
1809
- d3-dispatch: 3.0.1
1810
- d3-quadtree: 3.0.1
1811
- d3-timer: 3.0.1
1812
-
1813
- d3-format@3.1.2: {}
1814
-
1815
- d3-geo-voronoi@2.1.0:
1816
- dependencies:
1817
- d3-array: 3.2.4
1818
- d3-delaunay: 6.0.4
1819
- d3-geo: 3.1.1
1820
- d3-tricontour: 1.1.0
1821
-
1822
- d3-geo@3.1.1:
1823
- dependencies:
1824
- d3-array: 3.2.4
1825
-
1826
- d3-hierarchy@3.1.2: {}
1827
-
1828
- d3-interpolate-path@2.3.0: {}
1829
-
1830
- d3-interpolate@3.0.1:
1831
- dependencies:
1832
- d3-color: 3.1.0
1833
-
1834
- d3-path@1.0.9: {}
1835
-
1836
- d3-path@3.1.0: {}
1837
-
1838
- d3-quadtree@3.0.1: {}
1839
-
1840
- d3-random@3.0.1: {}
1841
-
1842
- d3-sankey@0.12.3:
1843
- dependencies:
1844
- d3-array: 2.12.1
1845
- d3-shape: 1.3.7
1846
-
1847
- d3-scale-chromatic@3.1.0:
1848
- dependencies:
1849
- d3-color: 3.1.0
1850
- d3-interpolate: 3.0.1
1851
-
1852
- d3-scale@4.0.2:
1853
- dependencies:
1854
- d3-array: 3.2.4
1855
- d3-format: 3.1.2
1856
- d3-interpolate: 3.0.1
1857
- d3-time: 3.1.0
1858
- d3-time-format: 4.1.0
1859
-
1860
- d3-shape@1.3.7:
1861
- dependencies:
1862
- d3-path: 1.0.9
1863
-
1864
- d3-shape@3.2.0:
1865
- dependencies:
1866
- d3-path: 3.1.0
1867
-
1868
- d3-tile@1.0.0: {}
1869
-
1870
- d3-time-format@4.1.0:
1871
- dependencies:
1872
- d3-time: 3.1.0
1873
-
1874
- d3-time@3.1.0:
1875
- dependencies:
1876
- d3-array: 3.2.4
1877
-
1878
- d3-timer@3.0.1: {}
1879
-
1880
- d3-tricontour@1.1.0:
1881
- dependencies:
1882
- d3-delaunay: 6.0.4
1883
- d3-scale: 4.0.2
1884
-
1885
- dayjs@1.11.20:
1886
- optional: true
1887
-
1888
- deepmerge@4.3.1: {}
1889
-
1890
- delaunator@5.1.0:
1891
- dependencies:
1892
- robust-predicates: 3.0.3
1893
-
1894
- dequal@2.0.3: {}
1895
-
1896
- detect-libc@2.1.2: {}
1897
-
1898
- devalue@5.7.1: {}
1899
-
1900
- dlv@1.1.3:
1901
- optional: true
1902
-
1903
- effect@3.21.2:
1904
- dependencies:
1905
- '@standard-schema/spec': 1.1.0
1906
- fast-check: 3.23.2
1907
- optional: true
1908
-
1909
- enhanced-resolve@5.21.0:
1910
- dependencies:
1911
- graceful-fs: 4.2.11
1912
- tapable: 2.3.3
1913
-
1914
- esm-env@1.2.2: {}
1915
-
1916
- esrap@2.2.5:
1917
- dependencies:
1918
- '@jridgewell/sourcemap-codec': 1.5.5
1919
-
1920
- estree-walker@3.0.3:
1921
- dependencies:
1922
- '@types/estree': 1.0.8
1923
-
1924
- fast-check@3.23.2:
1925
- dependencies:
1926
- pure-rand: 6.1.0
1927
- optional: true
1928
-
1929
- fdir@6.5.0(picomatch@4.0.4):
1930
- optionalDependencies:
1931
- picomatch: 4.0.4
1932
-
1933
- find-replace@5.0.2: {}
1934
-
1935
- flatbuffers@25.9.23: {}
1936
-
1937
- formsnap@2.0.1(svelte@5.55.5)(sveltekit-superforms@2.30.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)):
1938
- dependencies:
1939
- svelte: 5.55.5
1940
- svelte-toolbelt: 0.5.0(svelte@5.55.5)
1941
- sveltekit-superforms: 2.30.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)
1942
-
1943
- fsevents@2.3.3:
1944
- optional: true
1945
-
1946
- graceful-fs@4.2.11: {}
1947
-
1948
- has-flag@4.0.0: {}
1949
-
1950
- iconv-lite@0.6.3:
1951
- dependencies:
1952
- safer-buffer: 2.1.2
1953
-
1954
- inline-style-parser@0.2.7: {}
1955
-
1956
- internmap@1.0.1: {}
1957
-
1958
- internmap@2.0.3: {}
1959
-
1960
- is-reference@3.0.3:
1961
- dependencies:
1962
- '@types/estree': 1.0.8
1963
-
1964
- jiti@2.6.1: {}
1965
-
1966
- joi@17.13.3:
1967
- dependencies:
1968
- '@hapi/hoek': 9.3.0
1969
- '@hapi/topo': 5.1.0
1970
- '@sideway/address': 4.1.5
1971
- '@sideway/formula': 3.0.1
1972
- '@sideway/pinpoint': 2.0.0
1973
- optional: true
1974
-
1975
- json-bignum@0.0.3: {}
1976
-
1977
- json-schema-to-ts@3.1.1:
1978
- dependencies:
1979
- '@babel/runtime': 7.29.2
1980
- ts-algebra: 2.0.0
1981
- optional: true
1982
-
1983
- kleur@4.1.5: {}
1984
-
1985
- layerchart@2.0.0-next.48(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(zod@4.3.6):
1986
- dependencies:
1987
- '@dagrejs/dagre': 2.0.4
1988
- '@layerstack/svelte-actions': 1.0.1-next.18
1989
- '@layerstack/svelte-state': 0.1.0-next.23
1990
- '@layerstack/tailwind': 2.0.0-next.21
1991
- '@layerstack/utils': 2.0.0-next.18
1992
- '@types/d3-contour': 3.0.6
1993
- d3-array: 3.2.4
1994
- d3-chord: 3.0.1
1995
- d3-color: 3.1.0
1996
- d3-contour: 4.0.2
1997
- d3-delaunay: 6.0.4
1998
- d3-dsv: 3.0.1
1999
- d3-force: 3.0.0
2000
- d3-geo: 3.1.1
2001
- d3-geo-voronoi: 2.1.0
2002
- d3-hierarchy: 3.1.2
2003
- d3-interpolate: 3.0.1
2004
- d3-interpolate-path: 2.3.0
2005
- d3-path: 3.1.0
2006
- d3-quadtree: 3.0.1
2007
- d3-random: 3.0.1
2008
- d3-sankey: 0.12.3
2009
- d3-scale: 4.0.2
2010
- d3-scale-chromatic: 3.1.0
2011
- d3-shape: 3.2.0
2012
- d3-tile: 1.0.0
2013
- d3-time: 3.1.0
2014
- memoize: 10.2.0
2015
- runed: 0.37.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(zod@4.3.6)
2016
- svelte: 5.55.5
2017
- transitivePeerDependencies:
2018
- - '@sveltejs/kit'
2019
- - zod
2020
-
2021
- libphonenumber-js@1.12.42:
2022
- optional: true
2023
-
2024
- lightningcss-android-arm64@1.32.0:
2025
- optional: true
2026
-
2027
- lightningcss-darwin-arm64@1.32.0:
2028
- optional: true
2029
-
2030
- lightningcss-darwin-x64@1.32.0:
2031
- optional: true
2032
-
2033
- lightningcss-freebsd-x64@1.32.0:
2034
- optional: true
2035
-
2036
- lightningcss-linux-arm-gnueabihf@1.32.0:
2037
- optional: true
2038
-
2039
- lightningcss-linux-arm64-gnu@1.32.0:
2040
- optional: true
2041
-
2042
- lightningcss-linux-arm64-musl@1.32.0:
2043
- optional: true
2044
-
2045
- lightningcss-linux-x64-gnu@1.32.0:
2046
- optional: true
2047
-
2048
- lightningcss-linux-x64-musl@1.32.0:
2049
- optional: true
2050
-
2051
- lightningcss-win32-arm64-msvc@1.32.0:
2052
- optional: true
2053
-
2054
- lightningcss-win32-x64-msvc@1.32.0:
2055
- optional: true
2056
-
2057
- lightningcss@1.32.0:
2058
- dependencies:
2059
- detect-libc: 2.1.2
2060
- optionalDependencies:
2061
- lightningcss-android-arm64: 1.32.0
2062
- lightningcss-darwin-arm64: 1.32.0
2063
- lightningcss-darwin-x64: 1.32.0
2064
- lightningcss-freebsd-x64: 1.32.0
2065
- lightningcss-linux-arm-gnueabihf: 1.32.0
2066
- lightningcss-linux-arm64-gnu: 1.32.0
2067
- lightningcss-linux-arm64-musl: 1.32.0
2068
- lightningcss-linux-x64-gnu: 1.32.0
2069
- lightningcss-linux-x64-musl: 1.32.0
2070
- lightningcss-win32-arm64-msvc: 1.32.0
2071
- lightningcss-win32-x64-msvc: 1.32.0
2072
-
2073
- locate-character@3.0.0: {}
2074
-
2075
- lodash.camelcase@4.3.0: {}
2076
-
2077
- lz-string@1.5.0: {}
2078
-
2079
- magic-string@0.30.21:
2080
- dependencies:
2081
- '@jridgewell/sourcemap-codec': 1.5.5
2082
-
2083
- mediabunny@1.42.0:
2084
- dependencies:
2085
- '@types/dom-mediacapture-transform': 0.1.11
2086
- '@types/dom-webcodecs': 0.1.13
2087
-
2088
- memoize-weak@1.0.2: {}
2089
-
2090
- memoize@10.2.0:
2091
- dependencies:
2092
- mimic-function: 5.0.1
2093
-
2094
- mimic-function@5.0.1: {}
2095
-
2096
- mode-watcher@1.1.0(svelte@5.55.5):
2097
- dependencies:
2098
- runed: 0.25.0(svelte@5.55.5)
2099
- svelte: 5.55.5
2100
- svelte-toolbelt: 0.7.1(svelte@5.55.5)
2101
-
2102
- mri@1.2.0: {}
2103
-
2104
- mrmime@2.0.1: {}
2105
-
2106
- nanoid@3.3.11: {}
2107
-
2108
- node-fetch-native@1.6.7: {}
2109
-
2110
- normalize-url@8.1.1:
2111
- optional: true
2112
-
2113
- obug@2.1.1: {}
2114
-
2115
- paneforge@1.0.2(svelte@5.55.5):
2116
- dependencies:
2117
- runed: 0.23.4(svelte@5.55.5)
2118
- svelte: 5.55.5
2119
- svelte-toolbelt: 0.9.3(svelte@5.55.5)
2120
-
2121
- parquet-wasm@0.7.1: {}
2122
-
2123
- phosphor-svelte@3.1.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)):
2124
- dependencies:
2125
- estree-walker: 3.0.3
2126
- magic-string: 0.30.21
2127
- svelte: 5.55.5
2128
- optionalDependencies:
2129
- vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
2130
-
2131
- picocolors@1.1.1: {}
2132
-
2133
- picomatch@4.0.4: {}
2134
-
2135
- postcss@8.5.12:
2136
- dependencies:
2137
- nanoid: 3.3.11
2138
- picocolors: 1.1.1
2139
- source-map-js: 1.2.1
2140
-
2141
- property-expr@2.0.6:
2142
- optional: true
2143
-
2144
- pure-rand@6.1.0:
2145
- optional: true
2146
-
2147
- readdirp@4.1.2: {}
2148
-
2149
- robust-predicates@3.0.3: {}
2150
-
2151
- rolldown@1.0.0-rc.17:
2152
- dependencies:
2153
- '@oxc-project/types': 0.127.0
2154
- '@rolldown/pluginutils': 1.0.0-rc.17
2155
- optionalDependencies:
2156
- '@rolldown/binding-android-arm64': 1.0.0-rc.17
2157
- '@rolldown/binding-darwin-arm64': 1.0.0-rc.17
2158
- '@rolldown/binding-darwin-x64': 1.0.0-rc.17
2159
- '@rolldown/binding-freebsd-x64': 1.0.0-rc.17
2160
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17
2161
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17
2162
- '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17
2163
- '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17
2164
- '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17
2165
- '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17
2166
- '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17
2167
- '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17
2168
- '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17
2169
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17
2170
- '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17
2171
-
2172
- runed@0.23.4(svelte@5.55.5):
2173
- dependencies:
2174
- esm-env: 1.2.2
2175
- svelte: 5.55.5
2176
-
2177
- runed@0.25.0(svelte@5.55.5):
2178
- dependencies:
2179
- esm-env: 1.2.2
2180
- svelte: 5.55.5
2181
-
2182
- runed@0.28.0(svelte@5.55.5):
2183
- dependencies:
2184
- esm-env: 1.2.2
2185
- svelte: 5.55.5
2186
-
2187
- runed@0.29.2(svelte@5.55.5):
2188
- dependencies:
2189
- esm-env: 1.2.2
2190
- svelte: 5.55.5
2191
-
2192
- runed@0.35.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5):
2193
- dependencies:
2194
- dequal: 2.0.3
2195
- esm-env: 1.2.2
2196
- lz-string: 1.5.0
2197
- svelte: 5.55.5
2198
- optionalDependencies:
2199
- '@sveltejs/kit': 2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
2200
-
2201
- runed@0.37.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(zod@4.3.6):
2202
- dependencies:
2203
- dequal: 2.0.3
2204
- esm-env: 1.2.2
2205
- lz-string: 1.5.0
2206
- svelte: 5.55.5
2207
- optionalDependencies:
2208
- '@sveltejs/kit': 2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
2209
- zod: 4.3.6
2210
-
2211
- rw@1.3.3: {}
2212
-
2213
- sade@1.8.1:
2214
- dependencies:
2215
- mri: 1.2.0
2216
-
2217
- safer-buffer@2.1.2: {}
2218
-
2219
- set-cookie-parser@3.1.0: {}
2220
-
2221
- shadcn-svelte@1.2.7(svelte@5.55.5):
2222
- dependencies:
2223
- commander: 14.0.3
2224
- node-fetch-native: 1.6.7
2225
- postcss: 8.5.12
2226
- svelte: 5.55.5
2227
- tailwind-merge: 3.5.0
2228
-
2229
- sirv@3.0.2:
2230
- dependencies:
2231
- '@polka/url': 1.0.0-next.29
2232
- mrmime: 2.0.1
2233
- totalist: 3.0.1
2234
-
2235
- source-map-js@1.2.1: {}
2236
-
2237
- style-to-object@1.0.14:
2238
- dependencies:
2239
- inline-style-parser: 0.2.7
2240
-
2241
- superstruct@2.0.2:
2242
- optional: true
2243
-
2244
- supports-color@7.2.0:
2245
- dependencies:
2246
- has-flag: 4.0.0
2247
-
2248
- svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.5)(typescript@6.0.3):
2249
- dependencies:
2250
- '@jridgewell/trace-mapping': 0.3.31
2251
- chokidar: 4.0.3
2252
- fdir: 6.5.0(picomatch@4.0.4)
2253
- picocolors: 1.1.1
2254
- sade: 1.8.1
2255
- svelte: 5.55.5
2256
- typescript: 6.0.3
2257
- transitivePeerDependencies:
2258
- - picomatch
2259
-
2260
- svelte-sonner@1.1.1(svelte@5.55.5):
2261
- dependencies:
2262
- runed: 0.28.0(svelte@5.55.5)
2263
- svelte: 5.55.5
2264
-
2265
- svelte-toolbelt@0.10.6(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5):
2266
- dependencies:
2267
- clsx: 2.1.1
2268
- runed: 0.35.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)
2269
- style-to-object: 1.0.14
2270
- svelte: 5.55.5
2271
- transitivePeerDependencies:
2272
- - '@sveltejs/kit'
2273
-
2274
- svelte-toolbelt@0.5.0(svelte@5.55.5):
2275
- dependencies:
2276
- clsx: 2.1.1
2277
- style-to-object: 1.0.14
2278
- svelte: 5.55.5
2279
-
2280
- svelte-toolbelt@0.7.1(svelte@5.55.5):
2281
- dependencies:
2282
- clsx: 2.1.1
2283
- runed: 0.23.4(svelte@5.55.5)
2284
- style-to-object: 1.0.14
2285
- svelte: 5.55.5
2286
-
2287
- svelte-toolbelt@0.9.3(svelte@5.55.5):
2288
- dependencies:
2289
- clsx: 2.1.1
2290
- runed: 0.29.2(svelte@5.55.5)
2291
- style-to-object: 1.0.14
2292
- svelte: 5.55.5
2293
-
2294
- svelte@5.55.5:
2295
- dependencies:
2296
- '@jridgewell/remapping': 2.3.5
2297
- '@jridgewell/sourcemap-codec': 1.5.5
2298
- '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0)
2299
- '@types/estree': 1.0.8
2300
- '@types/trusted-types': 2.0.7
2301
- acorn: 8.16.0
2302
- aria-query: 5.3.1
2303
- axobject-query: 4.1.0
2304
- clsx: 2.1.1
2305
- devalue: 5.7.1
2306
- esm-env: 1.2.2
2307
- esrap: 2.2.5
2308
- is-reference: 3.0.3
2309
- locate-character: 3.0.0
2310
- magic-string: 0.30.21
2311
- zimmerframe: 1.1.4
2312
- transitivePeerDependencies:
2313
- - '@typescript-eslint/types'
2314
-
2315
- sveltekit-superforms@2.30.1(@sveltejs/kit@2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3):
2316
- dependencies:
2317
- '@sveltejs/kit': 2.58.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.5)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)))(svelte@5.55.5)(typescript@6.0.3)(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1))
2318
- devalue: 5.7.1
2319
- memoize-weak: 1.0.2
2320
- svelte: 5.55.5
2321
- ts-deepmerge: 7.0.3
2322
- optionalDependencies:
2323
- '@exodus/schemasafe': 1.3.0
2324
- '@standard-schema/spec': 1.1.0
2325
- '@typeschema/class-validator': 0.3.0(class-validator@0.14.4)
2326
- '@valibot/to-json-schema': 1.6.0(valibot@1.3.1(typescript@6.0.3))
2327
- '@vinejs/vine': 3.0.1
2328
- arktype: 2.2.0
2329
- class-validator: 0.14.4
2330
- effect: 3.21.2
2331
- joi: 17.13.3
2332
- json-schema-to-ts: 3.1.1
2333
- superstruct: 2.0.2
2334
- typebox: 1.1.34
2335
- valibot: 1.3.1(typescript@6.0.3)
2336
- yup: 1.7.1
2337
- zod: 4.3.6
2338
- zod-v3-to-json-schema: 4.0.0(zod@4.3.6)
2339
- transitivePeerDependencies:
2340
- - '@types/json-schema'
2341
- - typescript
2342
-
2343
- tabbable@6.4.0: {}
2344
-
2345
- table-layout@4.1.1:
2346
- dependencies:
2347
- array-back: 6.2.3
2348
- wordwrapjs: 5.1.1
2349
-
2350
- tailwind-merge@3.5.0: {}
2351
-
2352
- tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4):
2353
- dependencies:
2354
- tailwindcss: 4.2.4
2355
- optionalDependencies:
2356
- tailwind-merge: 3.5.0
2357
-
2358
- tailwindcss@4.2.4: {}
2359
-
2360
- tapable@2.3.3: {}
2361
-
2362
- tiny-case@1.0.3:
2363
- optional: true
2364
-
2365
- tinyglobby@0.2.16:
2366
- dependencies:
2367
- fdir: 6.5.0(picomatch@4.0.4)
2368
- picomatch: 4.0.4
2369
-
2370
- toposort@2.0.2:
2371
- optional: true
2372
-
2373
- totalist@3.0.1: {}
2374
-
2375
- ts-algebra@2.0.0:
2376
- optional: true
2377
-
2378
- ts-deepmerge@7.0.3: {}
2379
-
2380
- tslib@2.8.1: {}
2381
-
2382
- tw-animate-css@1.4.0: {}
2383
-
2384
- type-fest@2.19.0:
2385
- optional: true
2386
-
2387
- typebox@1.1.34:
2388
- optional: true
2389
-
2390
- typescript@6.0.3: {}
2391
-
2392
- typical@7.3.0: {}
2393
-
2394
- undici-types@7.16.0: {}
2395
-
2396
- valibot@1.3.1(typescript@6.0.3):
2397
- optionalDependencies:
2398
- typescript: 6.0.3
2399
- optional: true
2400
-
2401
- validator@13.15.35:
2402
- optional: true
2403
-
2404
- vaul-svelte@1.0.0-next.7(svelte@5.55.5):
2405
- dependencies:
2406
- runed: 0.23.4(svelte@5.55.5)
2407
- svelte: 5.55.5
2408
- svelte-toolbelt: 0.7.1(svelte@5.55.5)
2409
-
2410
- vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1):
2411
- dependencies:
2412
- lightningcss: 1.32.0
2413
- picomatch: 4.0.4
2414
- postcss: 8.5.12
2415
- rolldown: 1.0.0-rc.17
2416
- tinyglobby: 0.2.16
2417
- optionalDependencies:
2418
- '@types/node': 24.12.2
2419
- fsevents: 2.3.3
2420
- jiti: 2.6.1
2421
-
2422
- vitefu@1.1.3(vite@8.0.10(@types/node@24.12.2)(jiti@2.6.1)):
2423
- optionalDependencies:
2424
- vite: 8.0.10(@types/node@24.12.2)(jiti@2.6.1)
2425
-
2426
- wordwrapjs@5.1.1: {}
2427
-
2428
- yup@1.7.1:
2429
- dependencies:
2430
- property-expr: 2.0.6
2431
- tiny-case: 1.0.3
2432
- toposort: 2.0.2
2433
- type-fest: 2.19.0
2434
- optional: true
2435
-
2436
- zimmerframe@1.1.4: {}
2437
-
2438
- zod-v3-to-json-schema@4.0.0(zod@4.3.6):
2439
- dependencies:
2440
- zod: 4.3.6
2441
- optional: true
2442
-
2443
- zod@4.3.6:
2444
- optional: true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
pnpm-workspace.yaml DELETED
@@ -1,3 +0,0 @@
1
- onlyBuiltDependencies:
2
- - '@tailwindcss/oxide'
3
- - esbuild
 
 
 
 
serve.ts CHANGED
@@ -1,3 +1,4 @@
 
1
  // Tiny static file server with SPA fallback.
2
  // Serves `dist/` (built by `vite build` via @sveltejs/adapter-static)
3
  // on $PORT (defaults to 7860 — Hugging Face Spaces' default app_port).
 
1
+ // @ts-nocheck
2
  // Tiny static file server with SPA fallback.
3
  // Serves `dist/` (built by `vite build` via @sveltejs/adapter-static)
4
  // on $PORT (defaults to 7860 — Hugging Face Spaces' default app_port).
src/app.html CHANGED
@@ -2,8 +2,7 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <meta name="text-scale" content="scale" />
7
  %sveltekit.head%
8
  </head>
9
  <body data-sveltekit-preload-data="hover">
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
 
6
  %sveltekit.head%
7
  </head>
8
  <body data-sveltekit-preload-data="hover">
src/lib/api/hf.ts CHANGED
@@ -1,11 +1,9 @@
1
- import type { Match, PreviewChunk, Round } from '../types';
2
- import { fetchParquetRows } from './parquet';
3
- import { listTree, resolveUrl, type FetchOpts } from './hub';
4
 
5
  export type FetchOptions = FetchOpts;
6
 
7
- const PLAYER_COUNT = 10;
8
-
9
  let matchesPromise: Promise<Match[]> | null = null;
10
  let roundsPromise: Promise<Round[]> | null = null;
11
  const matchPreviewsCache = new Map<string, Promise<PreviewChunk[]>>();
@@ -35,9 +33,7 @@ async function loadShardedIndex<T extends IndexRow>(
35
  ): Promise<T[]> {
36
  const paths = await listIndexShards(prefix, opts);
37
  if (!paths.length) return [];
38
- const shards = await Promise.all(
39
- paths.map((p) => fetchParquetRows<T>(resolveUrl(p), opts))
40
- );
41
  // A re-rendered batch produces a second shard whose rows collide with the
42
  // original on (match,map[,round]). Keep the freshest copy per key.
43
  const keyOf =
 
1
+ import { PLAYER_COUNT, type Match, type PreviewChunk, type Round } from '$lib/types';
2
+ import { listTree, resolveUrl, type FetchOpts } from '$lib/api/hub';
3
+ import { fetchParquetRows } from '$lib/api/parquet';
4
 
5
  export type FetchOptions = FetchOpts;
6
 
 
 
7
  let matchesPromise: Promise<Match[]> | null = null;
8
  let roundsPromise: Promise<Round[]> | null = null;
9
  const matchPreviewsCache = new Map<string, Promise<PreviewChunk[]>>();
 
33
  ): Promise<T[]> {
34
  const paths = await listIndexShards(prefix, opts);
35
  if (!paths.length) return [];
36
+ const shards = await Promise.all(paths.map((p) => fetchParquetRows<T>(resolveUrl(p), opts)));
 
 
37
  // A re-rendered batch produces a second shard whose rows collide with the
38
  // original on (match,map[,round]). Keep the freshest copy per key.
39
  const keyOf =
src/lib/api/hub.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DATASET } from '../types';
2
 
3
  const REF = 'main';
4
 
 
1
+ import { DATASET } from '$lib/types';
2
 
3
  const REF = 'main';
4
 
src/lib/api/world.ts CHANGED
@@ -1,5 +1,5 @@
1
- import type { PreviewChunk } from '../types';
2
- import type { FetchOpts } from './hub';
3
 
4
  // One player's pose at one sampled tick. Round-relative `t` (seconds).
5
  export type WorldFrame = {
@@ -169,7 +169,7 @@ function nearestLeq(frames: WorldFrame[], t: number): number {
169
  // Shortest-arc lerp so a player turning across the ±180° boundary doesn't
170
  // spin the long way around between sampled ticks.
171
  function lerpAngle(a: number, b: number, alpha: number): number {
172
- const d = (((b - a + 540) % 360) - 180) || 0;
173
  return a + d * alpha;
174
  }
175
 
 
1
+ import type { PreviewChunk } from '$lib/types';
2
+ import type { FetchOpts } from '$lib/api/hub';
3
 
4
  // One player's pose at one sampled tick. Round-relative `t` (seconds).
5
  export type WorldFrame = {
 
169
  // Shortest-arc lerp so a player turning across the ±180° boundary doesn't
170
  // spin the long way around between sampled ticks.
171
  function lerpAngle(a: number, b: number, alpha: number): number {
172
+ const d = ((b - a + 540) % 360) - 180 || 0;
173
  return a + d * alpha;
174
  }
175
 
src/lib/assets/favicon.svg CHANGED
src/lib/components/grid-tile.svelte CHANGED
@@ -1,6 +1,8 @@
1
  <script lang="ts">
 
2
  import { onDestroy } from 'svelte';
3
  import { ChunkedMediaSource, type Chunk } from '$lib/components/video-player';
 
4
  import SkullIcon from 'phosphor-svelte/lib/SkullIcon';
5
  import SpeakerHighIcon from 'phosphor-svelte/lib/SpeakerHighIcon';
6
  import { playerColor } from '$lib/utils/player-colors';
@@ -19,7 +21,7 @@
19
  onSelect: () => void;
20
  onLeaderTime?: (t: number) => void;
21
  onLeaderEnded?: () => void;
22
- onBufferedChange?: (player: number, ranges: { start: number; end: number }[]) => void;
23
  }
24
 
25
  let {
@@ -109,13 +111,21 @@
109
  function onProgress() {
110
  if (!videoEl || !onBufferedChange) return;
111
  const ranges = videoEl.buffered;
112
- const out: { start: number; end: number }[] = [];
113
  for (let i = 0; i < ranges.length; i++) {
114
  out.push({ start: ranges.start(i), end: ranges.end(i) });
115
  }
116
  onBufferedChange(player, out);
117
  }
118
 
 
 
 
 
 
 
 
 
119
  onDestroy(() => {
120
  mse?.destroy();
121
  if (videoSrc) URL.revokeObjectURL(videoSrc);
@@ -128,14 +138,17 @@
128
  <!-- svelte-ignore a11y_click_events_have_key_events -->
129
  <!-- svelte-ignore a11y_no_static_element_interactions -->
130
  <div
131
- class="group relative aspect-video overflow-hidden rounded-md border bg-black transition cursor-pointer
132
- {isCurrent
133
- ? ct
134
- ? 'border-sky-500 ring-2 ring-sky-500/40'
135
- : 'border-amber-500 ring-2 ring-amber-500/40'
136
- : 'border-border hover:border-foreground/40'}
137
- {!available ? 'opacity-60' : ''}"
 
 
138
  onclick={() => available && onSelect()}
 
139
  role="button"
140
  tabindex={available ? 0 : -1}
141
  aria-label="Switch to player {player}"
@@ -160,7 +173,7 @@
160
 
161
  <!-- top-left: player number, colored per slot -->
162
  <div
163
- class="absolute left-1.5 top-1.5 flex h-6 w-6 items-center justify-center rounded-sm font-mono text-[11px] font-bold text-white/95 shadow-sm ring-1 ring-black/20"
164
  style="background-color: {color};"
165
  >
166
  {player}
@@ -168,7 +181,7 @@
168
 
169
  {#if isLeader}
170
  <div
171
- class="absolute right-1.5 top-1.5 grid h-5 w-5 place-items-center rounded bg-emerald-500/85 text-white shadow ring-1 ring-black/20"
172
  aria-label="Audio source"
173
  title="Audio source"
174
  >
 
1
  <script lang="ts">
2
+ import type { BufferedRange } from '$lib/types';
3
  import { onDestroy } from 'svelte';
4
  import { ChunkedMediaSource, type Chunk } from '$lib/components/video-player';
5
+ import { cn } from '$lib/utils';
6
  import SkullIcon from 'phosphor-svelte/lib/SkullIcon';
7
  import SpeakerHighIcon from 'phosphor-svelte/lib/SpeakerHighIcon';
8
  import { playerColor } from '$lib/utils/player-colors';
 
21
  onSelect: () => void;
22
  onLeaderTime?: (t: number) => void;
23
  onLeaderEnded?: () => void;
24
+ onBufferedChange?: (player: number, ranges: BufferedRange[]) => void;
25
  }
26
 
27
  let {
 
111
  function onProgress() {
112
  if (!videoEl || !onBufferedChange) return;
113
  const ranges = videoEl.buffered;
114
+ const out: BufferedRange[] = [];
115
  for (let i = 0; i < ranges.length; i++) {
116
  out.push({ start: ranges.start(i), end: ranges.end(i) });
117
  }
118
  onBufferedChange(player, out);
119
  }
120
 
121
+ function onKeyDown(e: KeyboardEvent) {
122
+ if (!available) return;
123
+ if (e.key === 'Enter' || e.key === ' ') {
124
+ e.preventDefault();
125
+ onSelect();
126
+ }
127
+ }
128
+
129
  onDestroy(() => {
130
  mse?.destroy();
131
  if (videoSrc) URL.revokeObjectURL(videoSrc);
 
138
  <!-- svelte-ignore a11y_click_events_have_key_events -->
139
  <!-- svelte-ignore a11y_no_static_element_interactions -->
140
  <div
141
+ data-current={isCurrent}
142
+ data-side={side}
143
+ aria-disabled={!available}
144
+ class={cn(
145
+ 'group relative aspect-video cursor-pointer overflow-hidden rounded-md border bg-black transition',
146
+ 'data-[current=false]:border-border data-[current=false]:hover:border-foreground/40 aria-disabled:opacity-60',
147
+ 'data-[current=true]:ring-2 data-[side=CT]:data-[current=true]:border-sky-500 data-[side=CT]:data-[current=true]:ring-sky-500/40',
148
+ 'data-[side=T]:data-[current=true]:border-amber-500 data-[side=T]:data-[current=true]:ring-amber-500/40'
149
+ )}
150
  onclick={() => available && onSelect()}
151
+ onkeydown={onKeyDown}
152
  role="button"
153
  tabindex={available ? 0 : -1}
154
  aria-label="Switch to player {player}"
 
173
 
174
  <!-- top-left: player number, colored per slot -->
175
  <div
176
+ class="absolute top-1.5 left-1.5 flex h-6 w-6 items-center justify-center rounded-sm font-mono text-[11px] font-bold text-white/95 shadow-sm ring-1 ring-black/20"
177
  style="background-color: {color};"
178
  >
179
  {player}
 
181
 
182
  {#if isLeader}
183
  <div
184
+ class="absolute top-1.5 right-1.5 grid h-5 w-5 place-items-center rounded bg-emerald-500/85 text-white shadow ring-1 ring-black/20"
185
  aria-label="Audio source"
186
  title="Audio source"
187
  >
src/lib/components/header.svelte CHANGED
@@ -1,82 +1,52 @@
1
  <script lang="ts">
2
  import { Button } from '$lib/components/ui/button';
3
- import * as Breadcrumb from '$lib/components/ui/breadcrumb';
4
  import * as Tooltip from '$lib/components/ui/tooltip';
5
  import SunIcon from 'phosphor-svelte/lib/SunIcon';
6
  import MoonIcon from 'phosphor-svelte/lib/MoonIcon';
7
- import CrosshairIcon from 'phosphor-svelte/lib/CrosshairIcon';
8
  import { mode, toggleMode } from 'mode-watcher';
9
  import HfLogo from '$lib/components/hf-logo.svelte';
10
-
11
- interface Props {
12
- breadcrumb?: { label: string; href?: string }[];
13
- }
14
- let { breadcrumb = [] }: Props = $props();
15
  </script>
16
 
17
- <header
18
- class="bg-background border-b"
19
- >
20
- <div class="mx-auto flex h-14 w-full max-w-[1600px] items-center gap-4 px-4">
21
- <a href="/" class="font-heading flex items-center gap-2 text-base font-semibold tracking-tight">
22
- <CrosshairIcon size={20} weight="duotone" class="text-primary" />
23
- <span>CS2 Render Dataset</span>
 
 
 
24
  </a>
25
 
26
- {#if breadcrumb.length}
27
- <Breadcrumb.Root class="hidden sm:flex">
28
- <Breadcrumb.List>
29
- {#each breadcrumb as crumb, i (i)}
30
- <Breadcrumb.Item>
31
- {#if crumb.href}
32
- <Breadcrumb.Link href={crumb.href}>{crumb.label}</Breadcrumb.Link>
33
- {:else}
34
- <Breadcrumb.Page>{crumb.label}</Breadcrumb.Page>
35
- {/if}
36
- </Breadcrumb.Item>
37
- {#if i < breadcrumb.length - 1}
38
- <Breadcrumb.Separator />
39
- {/if}
40
- {/each}
41
- </Breadcrumb.List>
42
- </Breadcrumb.Root>
43
- {/if}
44
-
45
  <div class="ml-auto flex items-center gap-1">
46
  <Tooltip.Root>
47
  <Tooltip.Trigger>
48
  {#snippet child({ props })}
49
  <Button
50
  {...props}
51
- href="https://huggingface.co/datasets/blanchon/cs2_dataset_render"
52
  target="_blank"
53
  rel="noreferrer noopener"
54
  variant="ghost"
55
- size="icon"
56
  aria-label="Dataset on Hugging Face"
57
  >
58
- <HfLogo class="size-5" />
59
- </Button>
60
- {/snippet}
61
- </Tooltip.Trigger>
62
- <Tooltip.Content side="bottom">View dataset on Hugging Face</Tooltip.Content>
63
- </Tooltip.Root>
64
- <Tooltip.Root>
65
- <Tooltip.Trigger>
66
- {#snippet child({ props })}
67
- <Button {...props} variant="ghost" size="icon" onclick={toggleMode} aria-label="Toggle theme">
68
- {#if mode.current === 'dark'}
69
- <SunIcon size={18} weight="duotone" />
70
- {:else}
71
- <MoonIcon size={18} weight="duotone" />
72
- {/if}
73
  </Button>
74
  {/snippet}
75
  </Tooltip.Trigger>
76
- <Tooltip.Content side="bottom">
77
- Switch to {mode.current === 'dark' ? 'light' : 'dark'} mode
78
- </Tooltip.Content>
79
  </Tooltip.Root>
 
 
 
 
 
 
 
80
  </div>
81
  </div>
82
  </header>
 
1
  <script lang="ts">
2
  import { Button } from '$lib/components/ui/button';
 
3
  import * as Tooltip from '$lib/components/ui/tooltip';
4
  import SunIcon from 'phosphor-svelte/lib/SunIcon';
5
  import MoonIcon from 'phosphor-svelte/lib/MoonIcon';
6
+ import CaretLeftIcon from 'phosphor-svelte/lib/CaretLeftIcon';
7
  import { mode, toggleMode } from 'mode-watcher';
8
  import HfLogo from '$lib/components/hf-logo.svelte';
9
+ import { site } from '$lib/site';
 
 
 
 
10
  </script>
11
 
12
+ <header class="border-border/60 border-b">
13
+ <div class="mx-auto flex h-12 w-full max-w-[1600px] items-center gap-3 px-4">
14
+ <a
15
+ href="/"
16
+ class="text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 text-xs font-medium transition"
17
+ aria-label="Back to dataset home"
18
+ >
19
+ <CaretLeftIcon size={12} weight="bold" />
20
+ <span aria-hidden="true">🎯</span>
21
+ <span>{site.name}</span>
22
  </a>
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  <div class="ml-auto flex items-center gap-1">
25
  <Tooltip.Root>
26
  <Tooltip.Trigger>
27
  {#snippet child({ props })}
28
  <Button
29
  {...props}
30
+ href={site.datasetUrl}
31
  target="_blank"
32
  rel="noreferrer noopener"
33
  variant="ghost"
34
+ size="icon-sm"
35
  aria-label="Dataset on Hugging Face"
36
  >
37
+ <HfLogo class="size-4" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  </Button>
39
  {/snippet}
40
  </Tooltip.Trigger>
41
+ <Tooltip.Content side="bottom">View on Hugging Face</Tooltip.Content>
 
 
42
  </Tooltip.Root>
43
+ <Button variant="ghost" size="icon-sm" onclick={toggleMode} aria-label="Toggle theme">
44
+ {#if mode.current === 'dark'}
45
+ <SunIcon size={16} weight="duotone" />
46
+ {:else}
47
+ <MoonIcon size={16} weight="duotone" />
48
+ {/if}
49
+ </Button>
50
  </div>
51
  </div>
52
  </header>
src/lib/components/map-preview.svelte CHANGED
@@ -1,6 +1,7 @@
1
  <script lang="ts">
2
  import { Skeleton } from '$lib/components/ui/skeleton';
3
  import * as ToggleGroup from '$lib/components/ui/toggle-group';
 
4
  import {
5
  loadMapData,
6
  radarUrl,
@@ -87,7 +88,7 @@
87
  </script>
88
 
89
  <div
90
- class="relative {size === undefined ? 'aspect-square w-full' : ''} {className}"
91
  style={size === undefined ? undefined : `width: ${size}px; height: ${size}px;`}
92
  >
93
  {#if !map}
@@ -96,7 +97,7 @@
96
  <img
97
  src={radarUrl(mapName, displayedFloor)}
98
  alt="{mapName} radar"
99
- class="absolute inset-0 h-full w-full select-none rounded-md opacity-70"
100
  draggable="false"
101
  />
102
  <svg
@@ -123,9 +124,9 @@
123
  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
124
  <g
125
  class="mp-marker"
126
- class:mp-marker--clickable={clickable}
127
- class:mp-marker--unavailable={!!onSelect && slotKnown && !available}
128
- class:mp-marker--active={isActive}
129
  opacity={baseOpacity}
130
  role={clickable ? 'button' : undefined}
131
  tabindex={clickable ? 0 : undefined}
@@ -234,7 +235,7 @@
234
  </svg>
235
 
236
  {#if lowerAvailable}
237
- <div class="absolute right-2 top-2">
238
  <ToggleGroup.Root
239
  type="single"
240
  value={toggleValue}
@@ -260,23 +261,23 @@
260
  </div>
261
 
262
  <style>
263
- .mp-marker--clickable {
264
  cursor: pointer;
265
  }
266
- .mp-marker--unavailable {
267
  cursor: not-allowed;
268
  }
269
  /* Hover & focus on a clickable marker: light up the hit-ring and lift the
270
  group with a subtle drop-shadow so it feels selectable. */
271
- .mp-marker--clickable:hover .mp-marker__hit,
272
- .mp-marker--clickable:focus-visible .mp-marker__hit {
273
  stroke-opacity: 0.9;
274
  }
275
- .mp-marker--clickable {
276
  transition: filter 120ms ease-out;
277
  }
278
- .mp-marker--clickable:hover,
279
- .mp-marker--clickable:focus-visible {
280
  filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.45));
281
  }
282
  .mp-marker:focus {
@@ -286,7 +287,7 @@
286
  outline: none;
287
  }
288
  @media (prefers-reduced-motion: reduce) {
289
- .mp-marker--clickable {
290
  transition: none;
291
  }
292
  }
 
1
  <script lang="ts">
2
  import { Skeleton } from '$lib/components/ui/skeleton';
3
  import * as ToggleGroup from '$lib/components/ui/toggle-group';
4
+ import { cn } from '$lib/utils';
5
  import {
6
  loadMapData,
7
  radarUrl,
 
88
  </script>
89
 
90
  <div
91
+ class={cn('relative', size === undefined && 'aspect-square w-full', className)}
92
  style={size === undefined ? undefined : `width: ${size}px; height: ${size}px;`}
93
  >
94
  {#if !map}
 
97
  <img
98
  src={radarUrl(mapName, displayedFloor)}
99
  alt="{mapName} radar"
100
+ class="absolute inset-0 h-full w-full rounded-md opacity-70 select-none"
101
  draggable="false"
102
  />
103
  <svg
 
124
  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
125
  <g
126
  class="mp-marker"
127
+ data-active={isActive || undefined}
128
+ data-clickable={clickable || undefined}
129
+ data-unavailable={!!onSelect && slotKnown && !available ? true : undefined}
130
  opacity={baseOpacity}
131
  role={clickable ? 'button' : undefined}
132
  tabindex={clickable ? 0 : undefined}
 
235
  </svg>
236
 
237
  {#if lowerAvailable}
238
+ <div class="absolute top-2 right-2">
239
  <ToggleGroup.Root
240
  type="single"
241
  value={toggleValue}
 
261
  </div>
262
 
263
  <style>
264
+ .mp-marker[data-clickable='true'] {
265
  cursor: pointer;
266
  }
267
+ .mp-marker[data-unavailable='true'] {
268
  cursor: not-allowed;
269
  }
270
  /* Hover & focus on a clickable marker: light up the hit-ring and lift the
271
  group with a subtle drop-shadow so it feels selectable. */
272
+ .mp-marker[data-clickable='true']:hover .mp-marker__hit,
273
+ .mp-marker[data-clickable='true']:focus-visible .mp-marker__hit {
274
  stroke-opacity: 0.9;
275
  }
276
+ .mp-marker[data-clickable='true'] {
277
  transition: filter 120ms ease-out;
278
  }
279
+ .mp-marker[data-clickable='true']:hover,
280
+ .mp-marker[data-clickable='true']:focus-visible {
281
  filter: drop-shadow(0 0 6px rgba(255, 255, 255, 0.45));
282
  }
283
  .mp-marker:focus {
 
287
  outline: none;
288
  }
289
  @media (prefers-reduced-motion: reduce) {
290
+ .mp-marker[data-clickable='true'] {
291
  transition: none;
292
  }
293
  }
src/lib/components/match-card.svelte DELETED
@@ -1,91 +0,0 @@
1
- <script lang="ts">
2
- import type { Match } from '$lib/types';
3
- import * as Card from '$lib/components/ui/card';
4
- import { Badge } from '$lib/components/ui/badge';
5
- import CalendarIcon from 'phosphor-svelte/lib/CalendarIcon';
6
- import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
7
- import FilmSlateIcon from 'phosphor-svelte/lib/FilmSlateIcon';
8
- import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
9
- import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
10
- import { formatDate, prettyMap } from '$lib/utils/format';
11
- import { mapColorClasses } from '$lib/utils/map-colors';
12
-
13
- interface Props {
14
- match: Match;
15
- }
16
- let { match }: Props = $props();
17
-
18
- const team1Wins = $derived(match.winner === 'team1');
19
- const team2Wins = $derived(match.winner === 'team2');
20
- const href = $derived(
21
- `/match/${encodeURIComponent(match.match_id)}/${encodeURIComponent(match.map_name)}`
22
- );
23
- const winnerSide = $derived((match.winner_side ?? '').toLowerCase());
24
- </script>
25
-
26
- <a {href} class="group block focus:outline-none">
27
- <Card.Root
28
- class="hover:border-primary/40 hover:shadow-md group-focus-visible:ring-ring h-full transition-all group-focus-visible:ring-2"
29
- >
30
- <Card.Header class="gap-1 pb-3">
31
- <div class="text-muted-foreground flex items-center justify-between text-xs">
32
- <span class="inline-flex items-center gap-1">
33
- <CalendarIcon size={12} weight="duotone" />
34
- {formatDate(match.match_date)}
35
- </span>
36
- <span class="inline-flex items-center gap-1 uppercase tracking-wide">
37
- {match.format}
38
- </span>
39
- </div>
40
- <Card.Title class="font-heading mt-1 truncate text-base font-semibold tracking-tight">
41
- {match.event}
42
- </Card.Title>
43
- </Card.Header>
44
-
45
- <Card.Content class="space-y-3">
46
- <div class="grid grid-cols-[1fr_auto_1fr] items-center gap-2">
47
- <div
48
- class="truncate text-right text-sm font-medium {team1Wins
49
- ? 'text-foreground'
50
- : 'text-muted-foreground'}"
51
- >
52
- {match.team1}
53
- </div>
54
- <div class="flex items-center gap-1 text-base font-bold tabular-nums">
55
- <span class={team1Wins ? 'text-primary' : 'text-muted-foreground'}>{match.score1}</span>
56
- <span class="text-muted-foreground/50 text-xs">:</span>
57
- <span class={team2Wins ? 'text-primary' : 'text-muted-foreground'}>{match.score2}</span>
58
- </div>
59
- <div
60
- class="truncate text-left text-sm font-medium {team2Wins
61
- ? 'text-foreground'
62
- : 'text-muted-foreground'}"
63
- >
64
- {match.team2}
65
- </div>
66
- </div>
67
-
68
- <div class="flex flex-wrap items-center gap-1.5">
69
- <Badge class="gap-1 border capitalize {mapColorClasses(match.map_name)}">
70
- <MapPinIcon size={11} weight="duotone" />{prettyMap(match.map_name)}
71
- </Badge>
72
- <Badge variant="outline" class="gap-1">
73
- <FilmSlateIcon size={11} weight="duotone" />{match.rounds_played} rounds
74
- </Badge>
75
- {#if winnerSide === 'ct'}
76
- <Badge
77
- class="gap-1 border border-sky-500/40 bg-sky-500/15 text-sky-700 dark:text-sky-300"
78
- >
79
- <ShieldIcon size={11} weight="duotone" /> CT won
80
- </Badge>
81
- {:else if winnerSide === 't'}
82
- <Badge
83
- class="gap-1 border border-amber-500/40 bg-amber-500/15 text-amber-700 dark:text-amber-300"
84
- >
85
- <SwordIcon size={11} weight="duotone" /> T won
86
- </Badge>
87
- {/if}
88
- </div>
89
- </Card.Content>
90
- </Card.Root>
91
- </a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/match-info.svelte CHANGED
@@ -1,6 +1,7 @@
1
  <script lang="ts">
2
  import type { Match } from '$lib/types';
3
  import { Badge } from '$lib/components/ui/badge';
 
4
  import CalendarIcon from 'phosphor-svelte/lib/CalendarIcon';
5
  import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
6
  import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
@@ -22,24 +23,29 @@
22
 
23
  <div class="space-y-3">
24
  <div>
25
- <div class="text-muted-foreground text-xs uppercase tracking-wide">Event</div>
26
  <div class="font-heading mt-0.5 text-sm font-semibold">{match.event}</div>
27
  </div>
28
 
29
  <div class="border-y py-3">
30
  <div class="grid grid-cols-[1fr_auto_1fr] items-center gap-3">
31
  <div
32
- class="text-right text-sm font-medium {team1Wins ? 'text-foreground' : 'text-muted-foreground'}"
 
33
  >
34
  {match.team1}
35
  </div>
36
  <div class="font-heading flex items-center gap-1 text-xl font-bold tabular-nums">
37
- <span class={team1Wins ? 'text-primary' : ''}>{match.score1}</span>
 
38
  <span class="text-muted-foreground/40">:</span>
39
- <span class={!team1Wins ? 'text-primary' : ''}>{match.score2}</span>
 
 
40
  </div>
41
  <div
42
- class="text-left text-sm font-medium {!team1Wins ? 'text-foreground' : 'text-muted-foreground'}"
 
43
  >
44
  {match.team2}
45
  </div>
@@ -51,7 +57,7 @@
51
  <MapPinIcon size={12} weight="duotone" /> Map
52
  </dt>
53
  <dd class="text-right">
54
- <Badge class="gap-1 border capitalize {mapColorClasses(match.map_name)}">
55
  {prettyMap(match.map_name)}
56
  </Badge>
57
  </dd>
@@ -77,7 +83,9 @@
77
  </dt>
78
  <dd class="text-right">
79
  {#if winnerSide === 'ct'}
80
- <Badge class="gap-1 border border-sky-500/40 bg-sky-500/15 text-sky-700 dark:text-sky-300">
 
 
81
  <ShieldIcon size={11} weight="duotone" /> CT won
82
  </Badge>
83
  {:else}
 
1
  <script lang="ts">
2
  import type { Match } from '$lib/types';
3
  import { Badge } from '$lib/components/ui/badge';
4
+ import { cn } from '$lib/utils';
5
  import CalendarIcon from 'phosphor-svelte/lib/CalendarIcon';
6
  import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
7
  import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
 
23
 
24
  <div class="space-y-3">
25
  <div>
26
+ <div class="text-muted-foreground text-xs tracking-wide uppercase">Event</div>
27
  <div class="font-heading mt-0.5 text-sm font-semibold">{match.event}</div>
28
  </div>
29
 
30
  <div class="border-y py-3">
31
  <div class="grid grid-cols-[1fr_auto_1fr] items-center gap-3">
32
  <div
33
+ data-winning={team1Wins}
34
+ class="data-[winning=false]:text-muted-foreground text-right text-sm font-medium"
35
  >
36
  {match.team1}
37
  </div>
38
  <div class="font-heading flex items-center gap-1 text-xl font-bold tabular-nums">
39
+ <span data-winning={team1Wins} class="data-[winning=true]:text-primary">{match.score1}</span
40
+ >
41
  <span class="text-muted-foreground/40">:</span>
42
+ <span data-winning={!team1Wins} class="data-[winning=true]:text-primary"
43
+ >{match.score2}</span
44
+ >
45
  </div>
46
  <div
47
+ data-winning={!team1Wins}
48
+ class="data-[winning=false]:text-muted-foreground text-left text-sm font-medium"
49
  >
50
  {match.team2}
51
  </div>
 
57
  <MapPinIcon size={12} weight="duotone" /> Map
58
  </dt>
59
  <dd class="text-right">
60
+ <Badge class={cn('gap-1 border capitalize', mapColorClasses(match.map_name))}>
61
  {prettyMap(match.map_name)}
62
  </Badge>
63
  </dd>
 
83
  </dt>
84
  <dd class="text-right">
85
  {#if winnerSide === 'ct'}
86
+ <Badge
87
+ class="gap-1 border border-sky-500/40 bg-sky-500/15 text-sky-700 dark:text-sky-300"
88
+ >
89
  <ShieldIcon size={11} weight="duotone" /> CT won
90
  </Badge>
91
  {:else}
src/lib/components/match-table/cells/duration-cell.svelte CHANGED
@@ -7,4 +7,6 @@
7
  let { seconds }: Props = $props();
8
  </script>
9
 
10
- <span class="font-mono tabular-nums text-xs text-muted-foreground">{formatLongDuration(seconds)}</span>
 
 
 
7
  let { seconds }: Props = $props();
8
  </script>
9
 
10
+ <span class="text-muted-foreground font-mono text-xs tabular-nums"
11
+ >{formatLongDuration(seconds)}</span
12
+ >
src/lib/components/match-table/cells/event-cell.svelte CHANGED
@@ -9,6 +9,6 @@
9
  <div class="flex min-w-0 flex-col">
10
  <span class="truncate text-sm font-medium" title={event}>{event}</span>
11
  {#if format}
12
- <span class="text-muted-foreground/70 text-[0.65rem] uppercase tracking-wide">{format}</span>
13
  {/if}
14
  </div>
 
9
  <div class="flex min-w-0 flex-col">
10
  <span class="truncate text-sm font-medium" title={event}>{event}</span>
11
  {#if format}
12
+ <span class="text-muted-foreground/70 text-[0.65rem] tracking-wide uppercase">{format}</span>
13
  {/if}
14
  </div>
src/lib/components/match-table/cells/map-cell.svelte CHANGED
@@ -1,6 +1,7 @@
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
- import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
 
4
  import { mapColorClasses } from '$lib/utils/map-colors';
5
  import { prettyMap } from '$lib/utils/format';
6
 
@@ -10,6 +11,6 @@ import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
10
  let { map }: Props = $props();
11
  </script>
12
 
13
- <Badge class="gap-1 border capitalize {mapColorClasses(map)}">
14
  <MapPinIcon size={11} weight="duotone" />{prettyMap(map)}
15
  </Badge>
 
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
+ import { cn } from '$lib/utils';
4
+ import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
5
  import { mapColorClasses } from '$lib/utils/map-colors';
6
  import { prettyMap } from '$lib/utils/format';
7
 
 
11
  let { map }: Props = $props();
12
  </script>
13
 
14
+ <Badge class={cn('gap-1 border capitalize', mapColorClasses(map))}>
15
  <MapPinIcon size={11} weight="duotone" />{prettyMap(map)}
16
  </Badge>
src/lib/components/match-table/cells/maps-list-cell.svelte CHANGED
@@ -1,6 +1,7 @@
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
- import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
 
4
  import { mapColorClasses } from '$lib/utils/map-colors';
5
  import { prettyMap } from '$lib/utils/format';
6
 
@@ -12,7 +13,7 @@ import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
12
 
13
  <div class="flex flex-wrap items-center gap-1">
14
  {#each maps as map (map)}
15
- <Badge class="gap-1 border capitalize text-[0.65rem] {mapColorClasses(map)}">
16
  <MapPinIcon size={10} weight="duotone" />{prettyMap(map)}
17
  </Badge>
18
  {/each}
 
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
+ import { cn } from '$lib/utils';
4
+ import MapPinIcon from 'phosphor-svelte/lib/MapPinIcon';
5
  import { mapColorClasses } from '$lib/utils/map-colors';
6
  import { prettyMap } from '$lib/utils/format';
7
 
 
13
 
14
  <div class="flex flex-wrap items-center gap-1">
15
  {#each maps as map (map)}
16
+ <Badge class={cn('gap-1 border text-[0.65rem] capitalize', mapColorClasses(map))}>
17
  <MapPinIcon size={10} weight="duotone" />{prettyMap(map)}
18
  </Badge>
19
  {/each}
src/lib/components/match-table/cells/rounds-played-cell.svelte CHANGED
@@ -1,5 +1,5 @@
1
  <script lang="ts">
2
- import FilmSlateIcon from 'phosphor-svelte/lib/FilmSlateIcon';
3
 
4
  interface Props {
5
  rounds: number;
 
1
  <script lang="ts">
2
+ import FilmSlateIcon from 'phosphor-svelte/lib/FilmSlateIcon';
3
 
4
  interface Props {
5
  rounds: number;
src/lib/components/match-table/cells/score-cell.svelte CHANGED
@@ -2,16 +2,23 @@
2
  interface Props {
3
  score1: number;
4
  score2: number;
5
- winner: string;
6
  }
7
  let { score1, score2, winner }: Props = $props();
8
-
9
- const team1Wins = $derived(winner === 'team1');
10
- const team2Wins = $derived(winner === 'team2');
11
  </script>
12
 
13
  <div class="flex items-center justify-center gap-1 font-mono text-sm tabular-nums">
14
- <span class={team1Wins ? 'text-primary font-semibold' : 'text-muted-foreground'}>{score1}</span>
 
 
 
 
 
15
  <span class="text-muted-foreground/40 text-xs">:</span>
16
- <span class={team2Wins ? 'text-primary font-semibold' : 'text-muted-foreground'}>{score2}</span>
 
 
 
 
 
17
  </div>
 
2
  interface Props {
3
  score1: number;
4
  score2: number;
5
+ winner: 'team1' | 'team2' | '';
6
  }
7
  let { score1, score2, winner }: Props = $props();
 
 
 
8
  </script>
9
 
10
  <div class="flex items-center justify-center gap-1 font-mono text-sm tabular-nums">
11
+ <span
12
+ data-winner={winner === 'team1'}
13
+ class="text-muted-foreground data-[winner=true]:text-primary data-[winner=true]:font-semibold"
14
+ >
15
+ {score1}
16
+ </span>
17
  <span class="text-muted-foreground/40 text-xs">:</span>
18
+ <span
19
+ data-winner={winner === 'team2'}
20
+ class="text-muted-foreground data-[winner=true]:text-primary data-[winner=true]:font-semibold"
21
+ >
22
+ {score2}
23
+ </span>
24
  </div>
src/lib/components/match-table/cells/teams-cell.svelte CHANGED
@@ -1,8 +1,10 @@
1
  <script lang="ts">
 
 
2
  interface Props {
3
  team1: string;
4
  team2: string;
5
- winner: string;
6
  }
7
  let { team1, team2, winner }: Props = $props();
8
 
@@ -12,18 +14,16 @@
12
 
13
  <div class="flex min-w-0 items-center gap-1.5 text-xs">
14
  <span
15
- class="truncate font-medium {team1Wins
16
- ? 'text-foreground'
17
- : 'text-muted-foreground'}"
18
  title={team1}
19
  >
20
  {team1}
21
  </span>
22
  <span class="text-muted-foreground/40 shrink-0">vs</span>
23
  <span
24
- class="truncate font-medium {team2Wins
25
- ? 'text-foreground'
26
- : 'text-muted-foreground'}"
27
  title={team2}
28
  >
29
  {team2}
 
1
  <script lang="ts">
2
+ import { cn } from '$lib/utils';
3
+
4
  interface Props {
5
  team1: string;
6
  team2: string;
7
+ winner: 'team1' | 'team2' | '';
8
  }
9
  let { team1, team2, winner }: Props = $props();
10
 
 
14
 
15
  <div class="flex min-w-0 items-center gap-1.5 text-xs">
16
  <span
17
+ data-winning={team1Wins}
18
+ class={cn('truncate font-medium', 'data-[winning=false]:text-muted-foreground')}
 
19
  title={team1}
20
  >
21
  {team1}
22
  </span>
23
  <span class="text-muted-foreground/40 shrink-0">vs</span>
24
  <span
25
+ data-winning={team2Wins}
26
+ class={cn('truncate font-medium', 'data-[winning=false]:text-muted-foreground')}
 
27
  title={team2}
28
  >
29
  {team2}
src/lib/components/match-table/cells/winner-side-cell.svelte CHANGED
@@ -1,7 +1,7 @@
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
- import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
4
- import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
5
 
6
  interface Props {
7
  side: string | null | undefined;
 
1
  <script lang="ts">
2
  import { Badge } from '$lib/components/ui/badge';
3
+ import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
4
+ import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
5
 
6
  interface Props {
7
  side: string | null | undefined;
src/lib/components/match-table/columns.ts CHANGED
@@ -65,8 +65,7 @@ export const roundColumns: ColumnDef<RoundRow>[] = [
65
  {
66
  id: 'round',
67
  accessorKey: 'round',
68
- header: ({ column }) =>
69
- renderComponent(SortHeader, { column, label: 'Round' }),
70
  cell: ({ row }) =>
71
  renderComponent(RoundCell, { round: row.original.round, total: row.original.rounds_played }),
72
  enableGlobalFilter: false,
@@ -75,8 +74,7 @@ export const roundColumns: ColumnDef<RoundRow>[] = [
75
  {
76
  id: 'duration_s',
77
  accessorKey: 'duration_s',
78
- header: ({ column }) =>
79
- renderComponent(SortHeader, { column, label: 'Duration' }),
80
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
81
  enableGlobalFilter: false,
82
  meta: { label: 'Duration' }
@@ -85,8 +83,7 @@ export const roundColumns: ColumnDef<RoundRow>[] = [
85
  id: 'match_date',
86
  accessorFn: (r) => new Date(r.match_date).getTime(),
87
  sortingFn: (a, b) => dateSort(a.original, b.original),
88
- header: ({ column }) =>
89
- renderComponent(SortHeader, { column, label: 'Date' }),
90
  cell: ({ row }) => renderComponent(DateCell, { iso: row.original.match_date }),
91
  enableGlobalFilter: false,
92
  meta: { label: 'Date' }
@@ -130,8 +127,7 @@ export const mapColumns: ColumnDef<MapRow>[] = [
130
  {
131
  id: 'score',
132
  accessorFn: (r) => r.score1 + r.score2,
133
- header: ({ column }) =>
134
- renderComponent(SortHeader, { column, label: 'Score', align: 'start' }),
135
  cell: ({ row }) =>
136
  renderComponent(ScoreCell, {
137
  score1: row.original.score1,
@@ -157,8 +153,7 @@ export const mapColumns: ColumnDef<MapRow>[] = [
157
  {
158
  id: 'rounds_played',
159
  accessorKey: 'rounds_played',
160
- header: ({ column }) =>
161
- renderComponent(SortHeader, { column, label: 'Rounds' }),
162
  cell: ({ row }) => renderComponent(RoundsPlayedCell, { rounds: row.original.rounds_played }),
163
  enableGlobalFilter: false,
164
  meta: { label: 'Rounds' }
@@ -166,8 +161,7 @@ export const mapColumns: ColumnDef<MapRow>[] = [
166
  {
167
  id: 'duration_s',
168
  accessorKey: 'duration_s',
169
- header: ({ column }) =>
170
- renderComponent(SortHeader, { column, label: 'Duration' }),
171
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
172
  enableGlobalFilter: false,
173
  meta: { label: 'Duration' }
@@ -187,8 +181,7 @@ export const matchColumns: ColumnDef<MatchRow>[] = [
187
  {
188
  id: 'event',
189
  accessorKey: 'event',
190
- header: ({ column }) =>
191
- renderComponent(SortHeader, { column, label: 'Event' }),
192
  cell: ({ row }) =>
193
  renderComponent(EventCell, { event: row.original.event, format: row.original.format }),
194
  meta: { label: 'Event' }
@@ -209,8 +202,7 @@ export const matchColumns: ColumnDef<MatchRow>[] = [
209
  {
210
  id: 'score',
211
  accessorFn: (r) => r.score1 + r.score2,
212
- header: ({ column }) =>
213
- renderComponent(SortHeader, { column, label: 'Maps' }),
214
  cell: ({ row }) =>
215
  renderComponent(ScoreCell, {
216
  score1: row.original.score1,
@@ -231,8 +223,7 @@ export const matchColumns: ColumnDef<MatchRow>[] = [
231
  {
232
  id: 'rounds_played',
233
  accessorKey: 'rounds_played',
234
- header: ({ column }) =>
235
- renderComponent(SortHeader, { column, label: 'Rounds' }),
236
  cell: ({ row }) => renderComponent(RoundsPlayedCell, { rounds: row.original.rounds_played }),
237
  enableGlobalFilter: false,
238
  meta: { label: 'Rounds' }
@@ -240,8 +231,7 @@ export const matchColumns: ColumnDef<MatchRow>[] = [
240
  {
241
  id: 'duration_s',
242
  accessorKey: 'duration_s',
243
- header: ({ column }) =>
244
- renderComponent(SortHeader, { column, label: 'Duration' }),
245
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
246
  enableGlobalFilter: false,
247
  meta: { label: 'Duration' }
@@ -250,8 +240,7 @@ export const matchColumns: ColumnDef<MatchRow>[] = [
250
  id: 'match_date',
251
  accessorFn: (r) => new Date(r.match_date).getTime(),
252
  sortingFn: (a, b) => dateSort(a.original, b.original),
253
- header: ({ column }) =>
254
- renderComponent(SortHeader, { column, label: 'Date' }),
255
  cell: ({ row }) => renderComponent(DateCell, { iso: row.original.match_date }),
256
  enableGlobalFilter: false,
257
  meta: { label: 'Date' }
 
65
  {
66
  id: 'round',
67
  accessorKey: 'round',
68
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Round' }),
 
69
  cell: ({ row }) =>
70
  renderComponent(RoundCell, { round: row.original.round, total: row.original.rounds_played }),
71
  enableGlobalFilter: false,
 
74
  {
75
  id: 'duration_s',
76
  accessorKey: 'duration_s',
77
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Duration' }),
 
78
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
79
  enableGlobalFilter: false,
80
  meta: { label: 'Duration' }
 
83
  id: 'match_date',
84
  accessorFn: (r) => new Date(r.match_date).getTime(),
85
  sortingFn: (a, b) => dateSort(a.original, b.original),
86
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Date' }),
 
87
  cell: ({ row }) => renderComponent(DateCell, { iso: row.original.match_date }),
88
  enableGlobalFilter: false,
89
  meta: { label: 'Date' }
 
127
  {
128
  id: 'score',
129
  accessorFn: (r) => r.score1 + r.score2,
130
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Score', align: 'start' }),
 
131
  cell: ({ row }) =>
132
  renderComponent(ScoreCell, {
133
  score1: row.original.score1,
 
153
  {
154
  id: 'rounds_played',
155
  accessorKey: 'rounds_played',
156
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Rounds' }),
 
157
  cell: ({ row }) => renderComponent(RoundsPlayedCell, { rounds: row.original.rounds_played }),
158
  enableGlobalFilter: false,
159
  meta: { label: 'Rounds' }
 
161
  {
162
  id: 'duration_s',
163
  accessorKey: 'duration_s',
164
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Duration' }),
 
165
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
166
  enableGlobalFilter: false,
167
  meta: { label: 'Duration' }
 
181
  {
182
  id: 'event',
183
  accessorKey: 'event',
184
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Event' }),
 
185
  cell: ({ row }) =>
186
  renderComponent(EventCell, { event: row.original.event, format: row.original.format }),
187
  meta: { label: 'Event' }
 
202
  {
203
  id: 'score',
204
  accessorFn: (r) => r.score1 + r.score2,
205
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Maps' }),
 
206
  cell: ({ row }) =>
207
  renderComponent(ScoreCell, {
208
  score1: row.original.score1,
 
223
  {
224
  id: 'rounds_played',
225
  accessorKey: 'rounds_played',
226
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Rounds' }),
 
227
  cell: ({ row }) => renderComponent(RoundsPlayedCell, { rounds: row.original.rounds_played }),
228
  enableGlobalFilter: false,
229
  meta: { label: 'Rounds' }
 
231
  {
232
  id: 'duration_s',
233
  accessorKey: 'duration_s',
234
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Duration' }),
 
235
  cell: ({ row }) => renderComponent(DurationCell, { seconds: row.original.duration_s }),
236
  enableGlobalFilter: false,
237
  meta: { label: 'Duration' }
 
240
  id: 'match_date',
241
  accessorFn: (r) => new Date(r.match_date).getTime(),
242
  sortingFn: (a, b) => dateSort(a.original, b.original),
243
+ header: ({ column }) => renderComponent(SortHeader, { column, label: 'Date' }),
 
244
  cell: ({ row }) => renderComponent(DateCell, { iso: row.original.match_date }),
245
  enableGlobalFilter: false,
246
  meta: { label: 'Date' }
src/lib/components/match-table/data-table-pagination.svelte CHANGED
@@ -2,10 +2,10 @@
2
  import type { Table } from '@tanstack/table-core';
3
  import { Button } from '$lib/components/ui/button';
4
  import * as Select from '$lib/components/ui/select';
5
- import CaretLeftIcon from 'phosphor-svelte/lib/CaretLeftIcon';
6
- import CaretRightIcon from 'phosphor-svelte/lib/CaretRightIcon';
7
- import CaretDoubleLeftIcon from 'phosphor-svelte/lib/CaretDoubleLeftIcon';
8
- import CaretDoubleRightIcon from 'phosphor-svelte/lib/CaretDoubleRightIcon';
9
 
10
  interface Props {
11
  table: Table<TData>;
 
2
  import type { Table } from '@tanstack/table-core';
3
  import { Button } from '$lib/components/ui/button';
4
  import * as Select from '$lib/components/ui/select';
5
+ import CaretLeftIcon from 'phosphor-svelte/lib/CaretLeftIcon';
6
+ import CaretRightIcon from 'phosphor-svelte/lib/CaretRightIcon';
7
+ import CaretDoubleLeftIcon from 'phosphor-svelte/lib/CaretDoubleLeftIcon';
8
+ import CaretDoubleRightIcon from 'phosphor-svelte/lib/CaretDoubleRightIcon';
9
 
10
  interface Props {
11
  table: Table<TData>;
src/lib/components/match-table/data-table-plain-header.svelte CHANGED
@@ -12,7 +12,7 @@
12
 
13
  <span
14
  class={cn(
15
- 'text-muted-foreground inline-block px-2 text-[0.7rem] font-medium uppercase tracking-wide',
16
  align === 'end' && 'w-full text-right',
17
  className
18
  )}
 
12
 
13
  <span
14
  class={cn(
15
+ 'text-muted-foreground inline-block px-2 text-[0.7rem] font-medium tracking-wide uppercase',
16
  align === 'end' && 'w-full text-right',
17
  className
18
  )}
src/lib/components/match-table/data-table-sort-header.svelte CHANGED
@@ -29,8 +29,8 @@
29
  size="sm"
30
  onclick={() => column.toggleSorting(sort === 'asc')}
31
  class={cn(
32
- '-ml-2 h-7 px-2 font-medium tracking-wide uppercase text-[0.7rem] text-muted-foreground hover:text-foreground',
33
- align === 'end' && 'ml-0 -mr-2 w-full justify-end',
34
  className
35
  )}
36
  >
 
29
  size="sm"
30
  onclick={() => column.toggleSorting(sort === 'asc')}
31
  class={cn(
32
+ 'text-muted-foreground hover:text-foreground -ml-2 h-7 px-2 text-[0.7rem] font-medium tracking-wide uppercase',
33
+ align === 'end' && '-mr-2 ml-0 w-full justify-end',
34
  className
35
  )}
36
  >
src/lib/components/match-table/data-table-toolbar.svelte CHANGED
@@ -30,7 +30,7 @@
30
  <MagnifyingGlassIcon
31
  size={14}
32
  weight="bold"
33
- class="text-muted-foreground absolute left-2.5 top-1/2 -translate-y-1/2"
34
  />
35
  <Input
36
  placeholder={searchPlaceholder}
@@ -94,7 +94,8 @@
94
  checked={column.getIsVisible()}
95
  onCheckedChange={(v) => column.toggleVisibility(!!v)}
96
  >
97
- {(column.columnDef.meta as { label?: string } | undefined)?.label ?? column.id.replace(/_/g, ' ')}
 
98
  </DropdownMenu.CheckboxItem>
99
  {/each}
100
  </DropdownMenu.Content>
 
30
  <MagnifyingGlassIcon
31
  size={14}
32
  weight="bold"
33
+ class="text-muted-foreground absolute top-1/2 left-2.5 -translate-y-1/2"
34
  />
35
  <Input
36
  placeholder={searchPlaceholder}
 
94
  checked={column.getIsVisible()}
95
  onCheckedChange={(v) => column.toggleVisibility(!!v)}
96
  >
97
+ {(column.columnDef.meta as { label?: string } | undefined)?.label ??
98
+ column.id.replace(/_/g, ' ')}
99
  </DropdownMenu.CheckboxItem>
100
  {/each}
101
  </DropdownMenu.Content>
src/lib/components/match-table/match-table.svelte CHANGED
@@ -154,16 +154,16 @@
154
  >
155
  {#each row.getVisibleCells() as cell (cell.id)}
156
  <Table.Cell class="py-2 align-middle">
157
- <FlexRender
158
- content={cell.column.columnDef.cell}
159
- context={cell.getContext()}
160
- />
161
  </Table.Cell>
162
  {/each}
163
  </Table.Row>
164
  {:else}
165
  <Table.Row>
166
- <Table.Cell colspan={columns.length} class="text-muted-foreground h-24 text-center text-sm">
 
 
 
167
  {emptyMessage}
168
  </Table.Cell>
169
  </Table.Row>
 
154
  >
155
  {#each row.getVisibleCells() as cell (cell.id)}
156
  <Table.Cell class="py-2 align-middle">
157
+ <FlexRender content={cell.column.columnDef.cell} context={cell.getContext()} />
 
 
 
158
  </Table.Cell>
159
  {/each}
160
  </Table.Row>
161
  {:else}
162
  <Table.Row>
163
+ <Table.Cell
164
+ colspan={columns.length}
165
+ class="text-muted-foreground h-24 text-center text-sm"
166
+ >
167
  {emptyMessage}
168
  </Table.Cell>
169
  </Table.Row>
src/lib/components/match-table/rows.ts CHANGED
@@ -17,7 +17,7 @@ export type RoundRow = {
17
  team2: string;
18
  score1: number;
19
  score2: number;
20
- winner: string;
21
  format: string;
22
  match_date: string;
23
  rounds_played: number;
@@ -30,7 +30,7 @@ export type MatchRow = {
30
  team2: string;
31
  score1: number;
32
  score2: number;
33
- winner: string;
34
  format: string;
35
  match_date: string;
36
  maps: string[];
@@ -123,7 +123,8 @@ export function buildMatchRows(matches: Match[], rounds: Round[]): MatchRow[] {
123
  });
124
  }
125
  rows.sort(
126
- (a, b) => new Date(b.match_date).getTime() - new Date(a.match_date).getTime() || b.match_id - a.match_id
 
127
  );
128
  return rows;
129
  }
 
17
  team2: string;
18
  score1: number;
19
  score2: number;
20
+ winner: Match['winner'];
21
  format: string;
22
  match_date: string;
23
  rounds_played: number;
 
30
  team2: string;
31
  score1: number;
32
  score2: number;
33
+ winner: Match['winner'] | '';
34
  format: string;
35
  match_date: string;
36
  maps: string[];
 
123
  });
124
  }
125
  rows.sort(
126
+ (a, b) =>
127
+ new Date(b.match_date).getTime() - new Date(a.match_date).getTime() || b.match_id - a.match_id
128
  );
129
  return rows;
130
  }
src/lib/components/perspective-grid.svelte CHANGED
@@ -1,191 +1,190 @@
1
  <script lang="ts">
2
- import type { PreviewChunk } from "$lib/types";
3
- import GridTile from "./grid-tile.svelte";
4
- import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
5
- import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
6
- import { playerColor } from "$lib/utils/player-colors";
7
 
8
- interface Props {
9
- previews: PreviewChunk[];
10
- currentPlayer: number;
11
- availablePlayers: Set<number>;
12
- playerDurations: Map<number, number>;
13
- virtualTime: number;
14
- paused?: boolean;
15
- muted?: boolean;
16
- onPausedChange?: (paused: boolean) => void;
17
- onSelect: (player: number) => void;
18
- onTimeUpdate?: (t: number) => void;
19
- onLeaderEnded?: () => void;
20
- onBufferedChange?: (ranges: { start: number; end: number }[]) => void;
21
- }
22
 
23
- let {
24
- previews,
25
- currentPlayer,
26
- availablePlayers,
27
- playerDurations,
28
- virtualTime,
29
- paused = false,
30
- muted = false,
31
- onSelect,
32
- onTimeUpdate,
33
- onLeaderEnded,
34
- onBufferedChange,
35
- }: Props = $props();
36
 
37
- type PerPlayer = {
38
- player: number;
39
- side: "CT" | "T" | string;
40
- weapon: string;
41
- chunks: { src: string; duration: number }[];
42
- duration: number;
43
- };
44
 
45
- const perPlayer = $derived.by<PerPlayer[]>(() => {
46
- const map = new Map<number, PreviewChunk[]>();
47
- for (const p of previews) {
48
- if (!map.has(p.player)) map.set(p.player, []);
49
- map.get(p.player)!.push(p);
50
- }
51
- const out: PerPlayer[] = [];
52
- for (const [player, chunks] of map.entries()) {
53
- chunks.sort((a, b) => a.chunk_index - b.chunk_index);
54
- const last = chunks[chunks.length - 1];
55
- out.push({
56
- player,
57
- side: last.player_side,
58
- weapon: last.primary_weapon,
59
- chunks: chunks.map((c) => ({
60
- src: c.preview_video.src,
61
- duration: c.duration_s,
62
- })),
63
- duration: playerDurations.get(player) ?? 0,
64
- });
65
- }
66
- out.sort((a, b) => a.player - b.player);
67
- return out;
68
- });
69
 
70
- const ctPlayers = $derived(perPlayer.filter((p) => p.side === "CT"));
71
- const tPlayers = $derived(perPlayer.filter((p) => p.side === "T"));
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
- function onLeaderTime(t: number) {
74
- onTimeUpdate?.(t);
75
- }
76
 
77
- // Intersect every tile's buffered ranges: the timeline span that's safe
78
- // to play across *all* perspectives at once. Emit imperatively from the
79
- // tile callback (not via $effect) — wiring this through reactivity would
80
- // trip Svelte's effect-cycle detection because every emit produces fresh
81
- // array references that propagate back through prop changes.
82
- const tileBuffers = new Map<number, { start: number; end: number }[]>();
83
 
84
- function intersectAll() {
85
- const lists = Array.from(tileBuffers.values()).filter((r) => r.length > 0);
86
- if (!lists.length) return [] as { start: number; end: number }[];
87
- let acc = lists[0];
88
- for (let i = 1; i < lists.length; i++) {
89
- const next: { start: number; end: number }[] = [];
90
- for (const a of acc) {
91
- for (const b of lists[i]) {
92
- const start = Math.max(a.start, b.start);
93
- const end = Math.min(a.end, b.end);
94
- if (end > start) next.push({ start, end });
95
- }
96
- }
97
- if (!next.length) return [];
98
- acc = next;
99
- }
100
- return acc;
101
- }
102
 
103
- function handleTileBuffered(
104
- player: number,
105
- ranges: { start: number; end: number }[],
106
- ) {
107
- tileBuffers.set(player, ranges);
108
- onBufferedChange?.(intersectAll());
109
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  </script>
111
 
112
  <div class="bg-card max-h-[80vh] overflow-y-auto rounded-lg border shadow-sm">
113
- <div class="space-y-4 p-3">
114
- {#if ctPlayers.length}
115
- <div>
116
- <div
117
- class="mb-2 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-sky-700 dark:text-sky-400"
118
- >
119
- <ShieldIcon size={12} weight="duotone" /> Counter-Terrorists
120
- </div>
121
- <div class="grid gap-2 grid-cols-[repeat(auto-fit,minmax(180px,1fr))]">
122
- {#each ctPlayers as p (p.player)}
123
- <div class="flex min-w-0 flex-col gap-1">
124
- <GridTile
125
- chunks={p.chunks}
126
- masterTime={virtualTime}
127
- masterPaused={paused}
128
- isLeader={p.player === currentPlayer}
129
- isCurrent={p.player === currentPlayer}
130
- isMuted={muted || p.player !== currentPlayer}
131
- available={availablePlayers.has(p.player)}
132
- duration={p.duration}
133
- player={p.player}
134
- side={p.side}
135
- onSelect={() => onSelect(p.player)}
136
- {onLeaderTime}
137
- onLeaderEnded={() => onLeaderEnded?.()}
138
- onBufferedChange={handleTileBuffered}
139
- />
140
- <div class="flex items-center gap-1.5 px-0.5 text-xs">
141
- <span
142
- class="inline-block h-2 w-2 shrink-0 rounded-full"
143
- style="background: {playerColor(p.player)};"
144
- ></span>
145
- <span class="truncate font-medium">Player {p.player}</span>
146
- </div>
147
- </div>
148
- {/each}
149
- </div>
150
- </div>
151
- {/if}
152
- {#if tPlayers.length}
153
- <div>
154
- <div
155
- class="mb-2 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-amber-700 dark:text-amber-400"
156
- >
157
- <SwordIcon size={12} weight="duotone" /> Terrorists
158
- </div>
159
- <div class="grid gap-2 grid-cols-[repeat(auto-fit,minmax(180px,1fr))]">
160
- {#each tPlayers as p (p.player)}
161
- <div class="flex min-w-0 flex-col gap-1">
162
- <GridTile
163
- chunks={p.chunks}
164
- masterTime={virtualTime}
165
- masterPaused={paused}
166
- isLeader={p.player === currentPlayer}
167
- isCurrent={p.player === currentPlayer}
168
- isMuted={muted || p.player !== currentPlayer}
169
- available={availablePlayers.has(p.player)}
170
- duration={p.duration}
171
- player={p.player}
172
- side={p.side}
173
- onSelect={() => onSelect(p.player)}
174
- {onLeaderTime}
175
- onLeaderEnded={() => onLeaderEnded?.()}
176
- onBufferedChange={handleTileBuffered}
177
- />
178
- <div class="flex items-center gap-1.5 px-0.5 text-xs">
179
- <span
180
- class="inline-block h-2 w-2 shrink-0 rounded-full"
181
- style="background: {playerColor(p.player)};"
182
- ></span>
183
- <span class="truncate font-medium">Player {p.player}</span>
184
- </div>
185
- </div>
186
- {/each}
187
- </div>
188
- </div>
189
- {/if}
190
- </div>
 
191
  </div>
 
1
  <script lang="ts">
2
+ import type { BufferedRange, PreviewChunk } from '$lib/types';
3
+ import GridTile from './grid-tile.svelte';
4
+ import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
5
+ import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
6
+ import { playerColor } from '$lib/utils/player-colors';
7
 
8
+ interface Props {
9
+ previews: PreviewChunk[];
10
+ currentPlayer: number;
11
+ availablePlayers: Set<number>;
12
+ playerDurations: Map<number, number>;
13
+ virtualTime: number;
14
+ paused?: boolean;
15
+ muted?: boolean;
16
+ onPausedChange?: (paused: boolean) => void;
17
+ onSelect: (player: number) => void;
18
+ onTimeUpdate?: (t: number) => void;
19
+ onLeaderEnded?: () => void;
20
+ onBufferedChange?: (ranges: BufferedRange[]) => void;
21
+ }
22
 
23
+ let {
24
+ previews,
25
+ currentPlayer,
26
+ availablePlayers,
27
+ playerDurations,
28
+ virtualTime,
29
+ paused = false,
30
+ muted = false,
31
+ onSelect,
32
+ onTimeUpdate,
33
+ onLeaderEnded,
34
+ onBufferedChange
35
+ }: Props = $props();
36
 
37
+ type PerPlayer = {
38
+ player: number;
39
+ side: PreviewChunk['player_side'];
40
+ weapon: string;
41
+ chunks: { src: string; duration: number }[];
42
+ duration: number;
43
+ };
44
 
45
+ const perPlayer = $derived.by<PerPlayer[]>(() => {
46
+ const previewMap = new Map<number, PreviewChunk[]>();
47
+ for (const preview of previews) {
48
+ if (!previewMap.has(preview.player)) previewMap.set(preview.player, []);
49
+ previewMap.get(preview.player)!.push(preview);
50
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ const players: PerPlayer[] = [];
53
+ for (const [player, chunks] of previewMap.entries()) {
54
+ chunks.sort((a, b) => a.chunk_index - b.chunk_index);
55
+ const last = chunks[chunks.length - 1];
56
+ players.push({
57
+ player,
58
+ side: last.player_side,
59
+ weapon: last.primary_weapon,
60
+ chunks: chunks.map((chunk) => ({
61
+ src: chunk.preview_video.src,
62
+ duration: chunk.duration_s
63
+ })),
64
+ duration: playerDurations.get(player) ?? 0
65
+ });
66
+ }
67
 
68
+ players.sort((a, b) => a.player - b.player);
69
+ return players;
70
+ });
71
 
72
+ const ctPlayers = $derived(perPlayer.filter((player) => player.side === 'CT'));
73
+ const tPlayers = $derived(perPlayer.filter((player) => player.side === 'T'));
 
 
 
 
74
 
75
+ function onLeaderTime(t: number) {
76
+ onTimeUpdate?.(t);
77
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
+ // Intersect every tile's buffered ranges: the timeline span that's safe
80
+ // to play across all perspectives at once.
81
+ const tileBuffers = new Map<number, BufferedRange[]>();
82
+
83
+ function intersectAll(): BufferedRange[] {
84
+ const lists = Array.from(tileBuffers.values()).filter((ranges) => ranges.length > 0);
85
+ if (!lists.length) return [];
86
+
87
+ let acc = lists[0];
88
+ for (let i = 1; i < lists.length; i++) {
89
+ const next: BufferedRange[] = [];
90
+ for (const a of acc) {
91
+ for (const b of lists[i]) {
92
+ const start = Math.max(a.start, b.start);
93
+ const end = Math.min(a.end, b.end);
94
+ if (end > start) next.push({ start, end });
95
+ }
96
+ }
97
+ if (!next.length) return [];
98
+ acc = next;
99
+ }
100
+
101
+ return acc;
102
+ }
103
+
104
+ function handleTileBuffered(player: number, ranges: BufferedRange[]) {
105
+ tileBuffers.set(player, ranges);
106
+ onBufferedChange?.(intersectAll());
107
+ }
108
  </script>
109
 
110
  <div class="bg-card max-h-[80vh] overflow-y-auto rounded-lg border shadow-sm">
111
+ <div class="space-y-4 p-3">
112
+ {#if ctPlayers.length}
113
+ <div>
114
+ <div
115
+ class="mb-2 flex items-center gap-1.5 text-[11px] font-semibold tracking-wide text-sky-700 uppercase dark:text-sky-400"
116
+ >
117
+ <ShieldIcon size={12} weight="duotone" /> Counter-Terrorists
118
+ </div>
119
+ <div class="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-2">
120
+ {#each ctPlayers as player (player.player)}
121
+ <div class="flex min-w-0 flex-col gap-1">
122
+ <GridTile
123
+ chunks={player.chunks}
124
+ masterTime={virtualTime}
125
+ masterPaused={paused}
126
+ isLeader={player.player === currentPlayer}
127
+ isCurrent={player.player === currentPlayer}
128
+ isMuted={muted || player.player !== currentPlayer}
129
+ available={availablePlayers.has(player.player)}
130
+ duration={player.duration}
131
+ player={player.player}
132
+ side={player.side}
133
+ onSelect={() => onSelect(player.player)}
134
+ {onLeaderTime}
135
+ onLeaderEnded={() => onLeaderEnded?.()}
136
+ onBufferedChange={handleTileBuffered}
137
+ />
138
+ <div class="flex items-center gap-1.5 px-0.5 text-xs">
139
+ <span
140
+ class="inline-block h-2 w-2 shrink-0 rounded-full"
141
+ style={`background: ${playerColor(player.player)};`}
142
+ ></span>
143
+ <span class="truncate font-medium">Player {player.player}</span>
144
+ </div>
145
+ </div>
146
+ {/each}
147
+ </div>
148
+ </div>
149
+ {/if}
150
+
151
+ {#if tPlayers.length}
152
+ <div>
153
+ <div
154
+ class="mb-2 flex items-center gap-1.5 text-[11px] font-semibold tracking-wide text-amber-700 uppercase dark:text-amber-400"
155
+ >
156
+ <SwordIcon size={12} weight="duotone" /> Terrorists
157
+ </div>
158
+ <div class="grid grid-cols-[repeat(auto-fit,minmax(180px,1fr))] gap-2">
159
+ {#each tPlayers as player (player.player)}
160
+ <div class="flex min-w-0 flex-col gap-1">
161
+ <GridTile
162
+ chunks={player.chunks}
163
+ masterTime={virtualTime}
164
+ masterPaused={paused}
165
+ isLeader={player.player === currentPlayer}
166
+ isCurrent={player.player === currentPlayer}
167
+ isMuted={muted || player.player !== currentPlayer}
168
+ available={availablePlayers.has(player.player)}
169
+ duration={player.duration}
170
+ player={player.player}
171
+ side={player.side}
172
+ onSelect={() => onSelect(player.player)}
173
+ {onLeaderTime}
174
+ onLeaderEnded={() => onLeaderEnded?.()}
175
+ onBufferedChange={handleTileBuffered}
176
+ />
177
+ <div class="flex items-center gap-1.5 px-0.5 text-xs">
178
+ <span
179
+ class="inline-block h-2 w-2 shrink-0 rounded-full"
180
+ style={`background: ${playerColor(player.player)};`}
181
+ ></span>
182
+ <span class="truncate font-medium">Player {player.player}</span>
183
+ </div>
184
+ </div>
185
+ {/each}
186
+ </div>
187
+ </div>
188
+ {/if}
189
+ </div>
190
  </div>
src/lib/components/player-grid.svelte CHANGED
@@ -3,6 +3,7 @@
3
  import * as ToggleGroup from '$lib/components/ui/toggle-group';
4
  import { Switch } from '$lib/components/ui/switch';
5
  import { Label } from '$lib/components/ui/label';
 
6
  import SkullIcon from 'phosphor-svelte/lib/SkullIcon';
7
  import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
8
  import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
@@ -69,17 +70,21 @@
69
  {@const ready = preloadedPlayers.has(p.player)}
70
  {@const available = availablePlayers.has(p.player)}
71
  <ToggleGroup.Item
 
 
72
  value={String(p.player)}
73
  aria-label="Player {p.player} ({p.weapon || 'no weapon'})"
74
  title={available
75
  ? `Player ${p.player} — ${p.weapon || 'no weapon'}`
76
  : `Player ${p.player} died at ${formatDuration(p.duration)} — not available at current time`}
77
  disabled={!available}
78
- class="data-[state=on]:bg-accent data-[state=on]:text-accent-foreground group flex h-auto min-w-0 flex-1 basis-0 items-center justify-start gap-2 rounded-md border px-2 py-1.5 text-left text-sm transition disabled:cursor-not-allowed disabled:opacity-40 data-[state=on]:border-current
79
- {ct
80
- ? 'data-[state=on]:border-sky-500 data-[state=on]:bg-sky-500/10 data-[state=on]:text-foreground'
81
- : 'data-[state=on]:border-amber-500 data-[state=on]:bg-amber-500/10 data-[state=on]:text-foreground'}
82
- {available && ready ? 'ring-2 ring-emerald-500/60 ring-offset-1 ring-offset-background' : ''}"
 
 
83
  >
84
  <span
85
  class="flex h-7 w-7 shrink-0 items-center justify-center rounded-sm font-mono text-xs font-bold text-white/95 shadow-sm ring-1 ring-black/20"
@@ -105,11 +110,11 @@
105
 
106
  <div class="space-y-2">
107
  <div class="flex items-center justify-between gap-3">
108
- <div class="text-muted-foreground text-xs uppercase tracking-wide">Player perspectives</div>
109
  <div class="flex items-center gap-2">
110
  <Label
111
  for="preload-all-players"
112
- class="text-muted-foreground text-[11px] uppercase tracking-wide"
113
  >
114
  Preload all
115
  </Label>
@@ -133,7 +138,7 @@
133
  >
134
  <div class="w-full">
135
  <div
136
- class="mb-1 flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wide text-sky-700 dark:text-sky-400"
137
  >
138
  <ShieldIcon size={11} weight="duotone" /> Counter-Terrorists
139
  </div>
@@ -146,7 +151,7 @@
146
 
147
  <div class="w-full">
148
  <div
149
- class="mb-1 flex items-center gap-1.5 text-[10px] font-semibold uppercase tracking-wide text-amber-700 dark:text-amber-400"
150
  >
151
  <SwordIcon size={11} weight="duotone" /> Terrorists
152
  </div>
 
3
  import * as ToggleGroup from '$lib/components/ui/toggle-group';
4
  import { Switch } from '$lib/components/ui/switch';
5
  import { Label } from '$lib/components/ui/label';
6
+ import { cn } from '$lib/utils';
7
  import SkullIcon from 'phosphor-svelte/lib/SkullIcon';
8
  import ShieldIcon from 'phosphor-svelte/lib/ShieldIcon';
9
  import SwordIcon from 'phosphor-svelte/lib/SwordIcon';
 
70
  {@const ready = preloadedPlayers.has(p.player)}
71
  {@const available = availablePlayers.has(p.player)}
72
  <ToggleGroup.Item
73
+ data-ready={available && ready ? true : undefined}
74
+ data-side={ct ? 'ct' : 't'}
75
  value={String(p.player)}
76
  aria-label="Player {p.player} ({p.weapon || 'no weapon'})"
77
  title={available
78
  ? `Player ${p.player} — ${p.weapon || 'no weapon'}`
79
  : `Player ${p.player} died at ${formatDuration(p.duration)} — not available at current time`}
80
  disabled={!available}
81
+ class={cn(
82
+ 'group flex h-auto min-w-0 flex-1 basis-0 items-center justify-start gap-2 rounded-md border px-2 py-1.5 text-left text-sm transition',
83
+ 'data-[state=on]:bg-accent data-[state=on]:text-accent-foreground disabled:cursor-not-allowed disabled:opacity-40 data-[state=on]:border-current',
84
+ 'data-[side=ct]:data-[state=on]:text-foreground data-[side=ct]:data-[state=on]:border-sky-500 data-[side=ct]:data-[state=on]:bg-sky-500/10',
85
+ 'data-[side=t]:data-[state=on]:text-foreground data-[side=t]:data-[state=on]:border-amber-500 data-[side=t]:data-[state=on]:bg-amber-500/10',
86
+ 'data-[ready=true]:ring-offset-background data-[ready=true]:ring-2 data-[ready=true]:ring-emerald-500/60 data-[ready=true]:ring-offset-1'
87
+ )}
88
  >
89
  <span
90
  class="flex h-7 w-7 shrink-0 items-center justify-center rounded-sm font-mono text-xs font-bold text-white/95 shadow-sm ring-1 ring-black/20"
 
110
 
111
  <div class="space-y-2">
112
  <div class="flex items-center justify-between gap-3">
113
+ <div class="text-muted-foreground text-xs tracking-wide uppercase">Player perspectives</div>
114
  <div class="flex items-center gap-2">
115
  <Label
116
  for="preload-all-players"
117
+ class="text-muted-foreground text-[11px] tracking-wide uppercase"
118
  >
119
  Preload all
120
  </Label>
 
138
  >
139
  <div class="w-full">
140
  <div
141
+ class="mb-1 flex items-center gap-1.5 text-[10px] font-semibold tracking-wide text-sky-700 uppercase dark:text-sky-400"
142
  >
143
  <ShieldIcon size={11} weight="duotone" /> Counter-Terrorists
144
  </div>
 
151
 
152
  <div class="w-full">
153
  <div
154
+ class="mb-1 flex items-center gap-1.5 text-[10px] font-semibold tracking-wide text-amber-700 uppercase dark:text-amber-400"
155
  >
156
  <SwordIcon size={11} weight="duotone" /> Terrorists
157
  </div>
src/lib/components/round-list.svelte CHANGED
@@ -28,7 +28,9 @@
28
  </script>
29
 
30
  <div class="flex h-full min-h-0 flex-col">
31
- <div class="text-muted-foreground border-b px-2 py-2 text-[10px] font-semibold uppercase tracking-wide">
 
 
32
  Rounds <span class="text-muted-foreground/50 ml-1">({rounds.length})</span>
33
  </div>
34
  <ScrollArea class="min-h-0 flex-1">
@@ -45,7 +47,7 @@
45
  {#each rounds as r, i (r.round)}
46
  {#if i > 0 && isSideSwitchBefore(r.round)}
47
  <div
48
- class="text-muted-foreground/70 my-0.5 flex items-center gap-1.5 px-1 text-[9px] font-semibold uppercase tracking-wider"
49
  aria-hidden="true"
50
  >
51
  <span class="bg-border h-px flex-1"></span>
 
28
  </script>
29
 
30
  <div class="flex h-full min-h-0 flex-col">
31
+ <div
32
+ class="text-muted-foreground border-b px-2 py-2 text-[10px] font-semibold tracking-wide uppercase"
33
+ >
34
  Rounds <span class="text-muted-foreground/50 ml-1">({rounds.length})</span>
35
  </div>
36
  <ScrollArea class="min-h-0 flex-1">
 
47
  {#each rounds as r, i (r.round)}
48
  {#if i > 0 && isSideSwitchBefore(r.round)}
49
  <div
50
+ class="text-muted-foreground/70 my-0.5 flex items-center gap-1.5 px-1 text-[9px] font-semibold tracking-wider uppercase"
51
  aria-hidden="true"
52
  >
53
  <span class="bg-border h-px flex-1"></span>
src/lib/components/timeline-bar.svelte CHANGED
@@ -1,9 +1,11 @@
1
  <script lang="ts">
2
  import { Button } from '$lib/components/ui/button';
 
3
  import PlayIcon from 'phosphor-svelte/lib/PlayIcon';
4
  import PauseIcon from 'phosphor-svelte/lib/PauseIcon';
5
  import SpeakerHighIcon from 'phosphor-svelte/lib/SpeakerHighIcon';
6
  import SpeakerSlashIcon from 'phosphor-svelte/lib/SpeakerSlashIcon';
 
7
  import { formatDuration } from '$lib/utils/format';
8
  import Playbar from './video-player/playbar.svelte';
9
 
@@ -12,7 +14,7 @@
12
  duration: number;
13
  paused: boolean;
14
  muted: boolean;
15
- bufferedRanges?: { start: number; end: number }[];
16
  disabled?: boolean;
17
  onTogglePlay: () => void;
18
  onToggleMute: () => void;
@@ -37,14 +39,17 @@
37
  </script>
38
 
39
  <div
40
- class="bg-card flex items-center gap-3 rounded-lg border px-3 py-2 shadow-sm"
41
- class:opacity-60={disabled}
42
- class:pointer-events-none={disabled}
43
  aria-disabled={disabled}
 
 
 
 
44
  >
45
  <Button
46
  variant="ghost"
47
  size="icon-sm"
 
48
  onclick={onTogglePlay}
49
  aria-label={paused ? 'Play' : 'Pause'}
50
  >
@@ -60,14 +65,7 @@
60
  </span>
61
 
62
  <div class="flex-1">
63
- <Playbar
64
- {currentTime}
65
- {duration}
66
- {bufferedRanges}
67
- {onSeek}
68
- {onScrubStart}
69
- {onScrubEnd}
70
- />
71
  </div>
72
 
73
  <span class="text-muted-foreground w-12 font-mono text-[11px] tabular-nums">
@@ -77,6 +75,7 @@
77
  <Button
78
  variant="ghost"
79
  size="icon-sm"
 
80
  onclick={onToggleMute}
81
  aria-label={muted ? 'Unmute' : 'Mute'}
82
  >
 
1
  <script lang="ts">
2
  import { Button } from '$lib/components/ui/button';
3
+ import type { BufferedRange } from '$lib/types';
4
  import PlayIcon from 'phosphor-svelte/lib/PlayIcon';
5
  import PauseIcon from 'phosphor-svelte/lib/PauseIcon';
6
  import SpeakerHighIcon from 'phosphor-svelte/lib/SpeakerHighIcon';
7
  import SpeakerSlashIcon from 'phosphor-svelte/lib/SpeakerSlashIcon';
8
+ import { cn } from '$lib/utils';
9
  import { formatDuration } from '$lib/utils/format';
10
  import Playbar from './video-player/playbar.svelte';
11
 
 
14
  duration: number;
15
  paused: boolean;
16
  muted: boolean;
17
+ bufferedRanges?: BufferedRange[];
18
  disabled?: boolean;
19
  onTogglePlay: () => void;
20
  onToggleMute: () => void;
 
39
  </script>
40
 
41
  <div
42
+ data-disabled={disabled || undefined}
 
 
43
  aria-disabled={disabled}
44
+ class={cn(
45
+ 'bg-card flex items-center gap-3 rounded-lg border px-3 py-2 shadow-sm',
46
+ 'data-[disabled]:pointer-events-none data-[disabled]:opacity-60'
47
+ )}
48
  >
49
  <Button
50
  variant="ghost"
51
  size="icon-sm"
52
+ {disabled}
53
  onclick={onTogglePlay}
54
  aria-label={paused ? 'Play' : 'Pause'}
55
  >
 
65
  </span>
66
 
67
  <div class="flex-1">
68
+ <Playbar {currentTime} {duration} {bufferedRanges} {onSeek} {onScrubStart} {onScrubEnd} />
 
 
 
 
 
 
 
69
  </div>
70
 
71
  <span class="text-muted-foreground w-12 font-mono text-[11px] tabular-nums">
 
75
  <Button
76
  variant="ghost"
77
  size="icon-sm"
78
+ {disabled}
79
  onclick={onToggleMute}
80
  aria-label={muted ? 'Unmute' : 'Mute'}
81
  >
src/lib/components/ui/accordion/accordion-content.svelte DELETED
@@ -1,27 +0,0 @@
1
- <script lang="ts">
2
- import { Accordion as AccordionPrimitive } from "bits-ui";
3
- import { cn, type WithoutChild } from "$lib/utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- children,
9
- ...restProps
10
- }: WithoutChild<AccordionPrimitive.ContentProps> = $props();
11
- </script>
12
-
13
- <AccordionPrimitive.Content
14
- bind:ref
15
- data-slot="accordion-content"
16
- class="data-open:animate-accordion-down data-closed:animate-accordion-up px-2 text-xs/relaxed overflow-hidden"
17
- {...restProps}
18
- >
19
- <div
20
- class={cn(
21
- "pt-0 pb-4 [&_a]:hover:text-foreground [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",
22
- className
23
- )}
24
- >
25
- {@render children?.()}
26
- </div>
27
- </AccordionPrimitive.Content>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/accordion/accordion-item.svelte DELETED
@@ -1,17 +0,0 @@
1
- <script lang="ts">
2
- import { Accordion as AccordionPrimitive } from "bits-ui";
3
- import { cn } from "$lib/utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- ...restProps
9
- }: AccordionPrimitive.ItemProps = $props();
10
- </script>
11
-
12
- <AccordionPrimitive.Item
13
- bind:ref
14
- data-slot="accordion-item"
15
- class={cn("data-open:bg-muted/50 not-last:border-b", className)}
16
- {...restProps}
17
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/accordion/accordion-trigger.svelte DELETED
@@ -1,32 +0,0 @@
1
- <script lang="ts">
2
- import { Accordion as AccordionPrimitive } from "bits-ui";
3
- import { cn, type WithoutChild } from "$lib/utils.js";
4
- import CaretDownIcon from 'phosphor-svelte/lib/CaretDown';
5
- import CaretUpIcon from 'phosphor-svelte/lib/CaretUp';
6
-
7
- let {
8
- ref = $bindable(null),
9
- class: className,
10
- level = 3,
11
- children,
12
- ...restProps
13
- }: WithoutChild<AccordionPrimitive.TriggerProps> & {
14
- level?: AccordionPrimitive.HeaderProps["level"];
15
- } = $props();
16
- </script>
17
-
18
- <AccordionPrimitive.Header {level} class="flex">
19
- <AccordionPrimitive.Trigger
20
- data-slot="accordion-trigger"
21
- bind:ref
22
- class={cn(
23
- "**:data-[slot=accordion-trigger-icon]:text-muted-foreground gap-6 p-2 text-left text-xs/relaxed font-medium hover:underline **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 group/accordion-trigger relative flex flex-1 items-start justify-between border border-transparent transition-all outline-none disabled:pointer-events-none disabled:opacity-50",
24
- className
25
- )}
26
- {...restProps}
27
- >
28
- {@render children?.()}
29
- <CaretDownIcon data-slot="accordion-trigger-icon" class="cn-accordion-trigger-icon pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" />
30
- <CaretUpIcon data-slot="accordion-trigger-icon" class="cn-accordion-trigger-icon pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" />
31
- </AccordionPrimitive.Trigger>
32
- </AccordionPrimitive.Header>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/accordion/accordion.svelte DELETED
@@ -1,19 +0,0 @@
1
- <script lang="ts">
2
- import { Accordion as AccordionPrimitive } from "bits-ui";
3
- import { cn } from "$lib/utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- value = $bindable(),
8
- class: className,
9
- ...restProps
10
- }: AccordionPrimitive.RootProps = $props();
11
- </script>
12
-
13
- <AccordionPrimitive.Root
14
- bind:ref
15
- bind:value={value as never}
16
- data-slot="accordion"
17
- class={cn("overflow-hidden rounded-md border flex w-full flex-col", className)}
18
- {...restProps}
19
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/accordion/index.ts DELETED
@@ -1,16 +0,0 @@
1
- import Root from "./accordion.svelte";
2
- import Content from "./accordion-content.svelte";
3
- import Item from "./accordion-item.svelte";
4
- import Trigger from "./accordion-trigger.svelte";
5
-
6
- export {
7
- Root,
8
- Content,
9
- Item,
10
- Trigger,
11
- //
12
- Root as Accordion,
13
- Content as AccordionContent,
14
- Item as AccordionItem,
15
- Trigger as AccordionTrigger,
16
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/alert-dialog/alert-dialog-action.svelte DELETED
@@ -1,27 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import {
4
- buttonVariants,
5
- type ButtonVariant,
6
- type ButtonSize,
7
- } from "$lib/components/ui/button/index.js";
8
- import { cn } from "$lib/utils.js";
9
-
10
- let {
11
- ref = $bindable(null),
12
- class: className,
13
- variant = "default",
14
- size = "default",
15
- ...restProps
16
- }: AlertDialogPrimitive.ActionProps & {
17
- variant?: ButtonVariant;
18
- size?: ButtonSize;
19
- } = $props();
20
- </script>
21
-
22
- <AlertDialogPrimitive.Action
23
- bind:ref
24
- data-slot="alert-dialog-action"
25
- class={cn(buttonVariants({ variant, size }), "cn-alert-dialog-action", className)}
26
- {...restProps}
27
- />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte DELETED
@@ -1,27 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import {
4
- buttonVariants,
5
- type ButtonVariant,
6
- type ButtonSize,
7
- } from "$lib/components/ui/button/index.js";
8
- import { cn } from "$lib/utils.js";
9
-
10
- let {
11
- ref = $bindable(null),
12
- class: className,
13
- variant = "outline",
14
- size = "default",
15
- ...restProps
16
- }: AlertDialogPrimitive.CancelProps & {
17
- variant?: ButtonVariant;
18
- size?: ButtonSize;
19
- } = $props();
20
- </script>
21
-
22
- <AlertDialogPrimitive.Cancel
23
- bind:ref
24
- data-slot="alert-dialog-cancel"
25
- class={cn(buttonVariants({ variant, size }), "cn-alert-dialog-cancel", className)}
26
- {...restProps}
27
- />