tangled
alpha
login
or
join now
emarref.net
/
ticks
0
fork
atom
A daily game
0
fork
atom
overview
issues
pulls
pipelines
Initial import
Malcolm Fell
5 months ago
12013af9
+5204
36 changed files
expand all
collapse all
unified
split
.gitignore
components.json
package.json
pnpm-lock.yaml
public
robots.txt
src
components
debug-game.tsx
game
celebration.tsx
clear-button.tsx
game-button.tsx
game-header.tsx
new-game-button.tsx
preferences-button.tsx
preferences-form.tsx
preferences-modal.tsx
variant-caption.tsx
variant-header.tsx
variant-hints.tsx
game.tsx
providers
hydration-provider.tsx
state-provider.tsx
ui
button.tsx
dialog.tsx
form.tsx
input.tsx
label.tsx
lib
game.ts
hooks.ts
state.ts
utils.ts
pages
_layout.tsx
index.tsx
pages.gen.ts
styles.css
tsconfig.json
waku.config.ts
wrangler.jsonc
+7
.gitignore
···
0
0
0
0
0
0
0
···
1
+
node_modules
2
+
dist
3
+
.env*
4
+
*.tsbuildinfo
5
+
.cache
6
+
.DS_Store
7
+
*.pem
+21
components.json
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
{
2
+
"$schema": "https://ui.shadcn.com/schema.json",
3
+
"style": "new-york",
4
+
"rsc": false,
5
+
"tsx": true,
6
+
"tailwind": {
7
+
"config": "",
8
+
"css": "src/styles.css",
9
+
"baseColor": "neutral",
10
+
"cssVariables": true,
11
+
"prefix": ""
12
+
},
13
+
"aliases": {
14
+
"components": "@/components",
15
+
"utils": "@/lib/utils",
16
+
"ui": "@/components/ui",
17
+
"lib": "@/lib",
18
+
"hooks": "@/hooks"
19
+
},
20
+
"iconLibrary": "lucide"
21
+
}
+40
package.json
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
{
2
+
"name": "ticks",
3
+
"version": "0.0.0",
4
+
"type": "module",
5
+
"private": true,
6
+
"scripts": {
7
+
"dev": "waku dev",
8
+
"build": "waku build --with-cloudflare",
9
+
"start": "waku start"
10
+
},
11
+
"dependencies": {
12
+
"@fontsource-variable/dm-sans": "^5.2.8",
13
+
"@hookform/resolvers": "^5.2.2",
14
+
"@radix-ui/react-dialog": "^1.1.15",
15
+
"@radix-ui/react-label": "^2.1.7",
16
+
"@radix-ui/react-slot": "^1.2.3",
17
+
"class-variance-authority": "^0.7.1",
18
+
"clsx": "^2.1.1",
19
+
"jotai": "^2.14.0",
20
+
"lucide-react": "^0.544.0",
21
+
"react": "19.1.1",
22
+
"react-confetti": "^6.4.0",
23
+
"react-dom": "19.1.1",
24
+
"react-hook-form": "^7.63.0",
25
+
"react-server-dom-webpack": "19.1.1",
26
+
"tailwind-merge": "^3.3.1",
27
+
"tw-animate-css": "^1.4.0",
28
+
"waku": "0.26.1",
29
+
"zod": "^4.1.11"
30
+
},
31
+
"devDependencies": {
32
+
"@tailwindcss/vite": "4.1.13",
33
+
"@types/react": "19.1.12",
34
+
"@types/react-dom": "19.1.9",
35
+
"tailwindcss": "4.1.13",
36
+
"typescript": "5.9.2",
37
+
"wrangler": "^4.40.2"
38
+
}
39
+
}
40
+
+3700
pnpm-lock.yaml
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
lockfileVersion: '9.0'
2
+
3
+
settings:
4
+
autoInstallPeers: true
5
+
excludeLinksFromLockfile: false
6
+
7
+
importers:
8
+
9
+
.:
10
+
dependencies:
11
+
'@fontsource-variable/dm-sans':
12
+
specifier: ^5.2.8
13
+
version: 5.2.8
14
+
'@hookform/resolvers':
15
+
specifier: ^5.2.2
16
+
version: 5.2.2(react-hook-form@7.63.0(react@19.1.1))
17
+
'@radix-ui/react-dialog':
18
+
specifier: ^1.1.15
19
+
version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
20
+
'@radix-ui/react-label':
21
+
specifier: ^2.1.7
22
+
version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
23
+
'@radix-ui/react-slot':
24
+
specifier: ^1.2.3
25
+
version: 1.2.3(@types/react@19.1.12)(react@19.1.1)
26
+
class-variance-authority:
27
+
specifier: ^0.7.1
28
+
version: 0.7.1
29
+
clsx:
30
+
specifier: ^2.1.1
31
+
version: 2.1.1
32
+
jotai:
33
+
specifier: ^2.14.0
34
+
version: 2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1)
35
+
lucide-react:
36
+
specifier: ^0.544.0
37
+
version: 0.544.0(react@19.1.1)
38
+
react:
39
+
specifier: 19.1.1
40
+
version: 19.1.1
41
+
react-confetti:
42
+
specifier: ^6.4.0
43
+
version: 6.4.0(react@19.1.1)
44
+
react-dom:
45
+
specifier: 19.1.1
46
+
version: 19.1.1(react@19.1.1)
47
+
react-hook-form:
48
+
specifier: ^7.63.0
49
+
version: 7.63.0(react@19.1.1)
50
+
react-server-dom-webpack:
51
+
specifier: 19.1.1
52
+
version: 19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(webpack@5.101.3)
53
+
tailwind-merge:
54
+
specifier: ^3.3.1
55
+
version: 3.3.1
56
+
tw-animate-css:
57
+
specifier: ^1.4.0
58
+
version: 1.4.0
59
+
waku:
60
+
specifier: 0.26.1
61
+
version: 0.26.1(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(react-dom@19.1.1(react@19.1.1))(react-server-dom-webpack@19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(webpack@5.101.3))(react@19.1.1)(terser@5.44.0)
62
+
zod:
63
+
specifier: ^4.1.11
64
+
version: 4.1.11
65
+
devDependencies:
66
+
'@tailwindcss/vite':
67
+
specifier: 4.1.13
68
+
version: 4.1.13(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))
69
+
'@types/react':
70
+
specifier: 19.1.12
71
+
version: 19.1.12
72
+
'@types/react-dom':
73
+
specifier: 19.1.9
74
+
version: 19.1.9(@types/react@19.1.12)
75
+
tailwindcss:
76
+
specifier: 4.1.13
77
+
version: 4.1.13
78
+
typescript:
79
+
specifier: 5.9.2
80
+
version: 5.9.2
81
+
wrangler:
82
+
specifier: ^4.40.2
83
+
version: 4.40.2
84
+
85
+
packages:
86
+
87
+
'@babel/code-frame@7.27.1':
88
+
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
89
+
engines: {node: '>=6.9.0'}
90
+
91
+
'@babel/compat-data@7.28.4':
92
+
resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
93
+
engines: {node: '>=6.9.0'}
94
+
95
+
'@babel/core@7.28.4':
96
+
resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
97
+
engines: {node: '>=6.9.0'}
98
+
99
+
'@babel/generator@7.28.3':
100
+
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
101
+
engines: {node: '>=6.9.0'}
102
+
103
+
'@babel/helper-compilation-targets@7.27.2':
104
+
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
105
+
engines: {node: '>=6.9.0'}
106
+
107
+
'@babel/helper-globals@7.28.0':
108
+
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
109
+
engines: {node: '>=6.9.0'}
110
+
111
+
'@babel/helper-module-imports@7.27.1':
112
+
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
113
+
engines: {node: '>=6.9.0'}
114
+
115
+
'@babel/helper-module-transforms@7.28.3':
116
+
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
117
+
engines: {node: '>=6.9.0'}
118
+
peerDependencies:
119
+
'@babel/core': ^7.0.0
120
+
121
+
'@babel/helper-plugin-utils@7.27.1':
122
+
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
123
+
engines: {node: '>=6.9.0'}
124
+
125
+
'@babel/helper-string-parser@7.27.1':
126
+
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
127
+
engines: {node: '>=6.9.0'}
128
+
129
+
'@babel/helper-validator-identifier@7.27.1':
130
+
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
131
+
engines: {node: '>=6.9.0'}
132
+
133
+
'@babel/helper-validator-option@7.27.1':
134
+
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
135
+
engines: {node: '>=6.9.0'}
136
+
137
+
'@babel/helpers@7.28.4':
138
+
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
139
+
engines: {node: '>=6.9.0'}
140
+
141
+
'@babel/parser@7.28.4':
142
+
resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
143
+
engines: {node: '>=6.0.0'}
144
+
hasBin: true
145
+
146
+
'@babel/plugin-transform-react-jsx-self@7.27.1':
147
+
resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
148
+
engines: {node: '>=6.9.0'}
149
+
peerDependencies:
150
+
'@babel/core': ^7.0.0-0
151
+
152
+
'@babel/plugin-transform-react-jsx-source@7.27.1':
153
+
resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
154
+
engines: {node: '>=6.9.0'}
155
+
peerDependencies:
156
+
'@babel/core': ^7.0.0-0
157
+
158
+
'@babel/template@7.27.2':
159
+
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
160
+
engines: {node: '>=6.9.0'}
161
+
162
+
'@babel/traverse@7.28.4':
163
+
resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
164
+
engines: {node: '>=6.9.0'}
165
+
166
+
'@babel/types@7.28.4':
167
+
resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
168
+
engines: {node: '>=6.9.0'}
169
+
170
+
'@cloudflare/kv-asset-handler@0.4.0':
171
+
resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==}
172
+
engines: {node: '>=18.0.0'}
173
+
174
+
'@cloudflare/unenv-preset@2.7.4':
175
+
resolution: {integrity: sha512-KIjbu/Dt50zseJIoOOK5y4eYpSojD9+xxkePYVK1Rg9k/p/st4YyMtz1Clju/zrenJHrOH+AAcjNArOPMwH4Bw==}
176
+
peerDependencies:
177
+
unenv: 2.0.0-rc.21
178
+
workerd: ^1.20250912.0
179
+
peerDependenciesMeta:
180
+
workerd:
181
+
optional: true
182
+
183
+
'@cloudflare/workerd-darwin-64@1.20250924.0':
184
+
resolution: {integrity: sha512-/+nWoNDIzdQaQib7MrWYEfeDt1vA40Ah68nXlZGXHonkIqJvkjaTP8dzdKZLuwnQokiV/SpnAXNMH0WGH31XMw==}
185
+
engines: {node: '>=16'}
186
+
cpu: [x64]
187
+
os: [darwin]
188
+
189
+
'@cloudflare/workerd-darwin-arm64@1.20250924.0':
190
+
resolution: {integrity: sha512-UAjC5mra+WNWy6jMbIDe9orsFmYvvMlfvZdUyn5p3NlQhhU6cc4FkFuXJ/bV+6oVw5hIhlLlFCTnsGatki/uHg==}
191
+
engines: {node: '>=16'}
192
+
cpu: [arm64]
193
+
os: [darwin]
194
+
195
+
'@cloudflare/workerd-linux-64@1.20250924.0':
196
+
resolution: {integrity: sha512-IcwaoZFXGHq+yOBEj91QZH4qU61ws5upE7T43wVcrUAk8VXgxL12IGUVkMCEqfFXTO40PjKZBmK16B2q1HoFow==}
197
+
engines: {node: '>=16'}
198
+
cpu: [x64]
199
+
os: [linux]
200
+
201
+
'@cloudflare/workerd-linux-arm64@1.20250924.0':
202
+
resolution: {integrity: sha512-NgKG/cJiRNoJFa8QqweG0/bpkrUYKpR9mA9/qLJcGiwfvJrfK9b+ucw0lCru1BVMlyuS3kWDjagjMWqfujdBkA==}
203
+
engines: {node: '>=16'}
204
+
cpu: [arm64]
205
+
os: [linux]
206
+
207
+
'@cloudflare/workerd-windows-64@1.20250924.0':
208
+
resolution: {integrity: sha512-PntewemtjgLO2+8Gjw3G/NowDjpWZNKpKk/n4KmOQaWS9jIRq3IG1LkTqxj/BbMXqa4Oyrywk2kdqspj6QllOw==}
209
+
engines: {node: '>=16'}
210
+
cpu: [x64]
211
+
os: [win32]
212
+
213
+
'@cspotcode/source-map-support@0.8.1':
214
+
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
215
+
engines: {node: '>=12'}
216
+
217
+
'@emnapi/runtime@1.5.0':
218
+
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
219
+
220
+
'@esbuild/aix-ppc64@0.25.10':
221
+
resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
222
+
engines: {node: '>=18'}
223
+
cpu: [ppc64]
224
+
os: [aix]
225
+
226
+
'@esbuild/aix-ppc64@0.25.4':
227
+
resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
228
+
engines: {node: '>=18'}
229
+
cpu: [ppc64]
230
+
os: [aix]
231
+
232
+
'@esbuild/android-arm64@0.25.10':
233
+
resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
234
+
engines: {node: '>=18'}
235
+
cpu: [arm64]
236
+
os: [android]
237
+
238
+
'@esbuild/android-arm64@0.25.4':
239
+
resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
240
+
engines: {node: '>=18'}
241
+
cpu: [arm64]
242
+
os: [android]
243
+
244
+
'@esbuild/android-arm@0.25.10':
245
+
resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
246
+
engines: {node: '>=18'}
247
+
cpu: [arm]
248
+
os: [android]
249
+
250
+
'@esbuild/android-arm@0.25.4':
251
+
resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
252
+
engines: {node: '>=18'}
253
+
cpu: [arm]
254
+
os: [android]
255
+
256
+
'@esbuild/android-x64@0.25.10':
257
+
resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
258
+
engines: {node: '>=18'}
259
+
cpu: [x64]
260
+
os: [android]
261
+
262
+
'@esbuild/android-x64@0.25.4':
263
+
resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
264
+
engines: {node: '>=18'}
265
+
cpu: [x64]
266
+
os: [android]
267
+
268
+
'@esbuild/darwin-arm64@0.25.10':
269
+
resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
270
+
engines: {node: '>=18'}
271
+
cpu: [arm64]
272
+
os: [darwin]
273
+
274
+
'@esbuild/darwin-arm64@0.25.4':
275
+
resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
276
+
engines: {node: '>=18'}
277
+
cpu: [arm64]
278
+
os: [darwin]
279
+
280
+
'@esbuild/darwin-x64@0.25.10':
281
+
resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
282
+
engines: {node: '>=18'}
283
+
cpu: [x64]
284
+
os: [darwin]
285
+
286
+
'@esbuild/darwin-x64@0.25.4':
287
+
resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
288
+
engines: {node: '>=18'}
289
+
cpu: [x64]
290
+
os: [darwin]
291
+
292
+
'@esbuild/freebsd-arm64@0.25.10':
293
+
resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
294
+
engines: {node: '>=18'}
295
+
cpu: [arm64]
296
+
os: [freebsd]
297
+
298
+
'@esbuild/freebsd-arm64@0.25.4':
299
+
resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
300
+
engines: {node: '>=18'}
301
+
cpu: [arm64]
302
+
os: [freebsd]
303
+
304
+
'@esbuild/freebsd-x64@0.25.10':
305
+
resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
306
+
engines: {node: '>=18'}
307
+
cpu: [x64]
308
+
os: [freebsd]
309
+
310
+
'@esbuild/freebsd-x64@0.25.4':
311
+
resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
312
+
engines: {node: '>=18'}
313
+
cpu: [x64]
314
+
os: [freebsd]
315
+
316
+
'@esbuild/linux-arm64@0.25.10':
317
+
resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
318
+
engines: {node: '>=18'}
319
+
cpu: [arm64]
320
+
os: [linux]
321
+
322
+
'@esbuild/linux-arm64@0.25.4':
323
+
resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
324
+
engines: {node: '>=18'}
325
+
cpu: [arm64]
326
+
os: [linux]
327
+
328
+
'@esbuild/linux-arm@0.25.10':
329
+
resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
330
+
engines: {node: '>=18'}
331
+
cpu: [arm]
332
+
os: [linux]
333
+
334
+
'@esbuild/linux-arm@0.25.4':
335
+
resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
336
+
engines: {node: '>=18'}
337
+
cpu: [arm]
338
+
os: [linux]
339
+
340
+
'@esbuild/linux-ia32@0.25.10':
341
+
resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
342
+
engines: {node: '>=18'}
343
+
cpu: [ia32]
344
+
os: [linux]
345
+
346
+
'@esbuild/linux-ia32@0.25.4':
347
+
resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
348
+
engines: {node: '>=18'}
349
+
cpu: [ia32]
350
+
os: [linux]
351
+
352
+
'@esbuild/linux-loong64@0.25.10':
353
+
resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
354
+
engines: {node: '>=18'}
355
+
cpu: [loong64]
356
+
os: [linux]
357
+
358
+
'@esbuild/linux-loong64@0.25.4':
359
+
resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
360
+
engines: {node: '>=18'}
361
+
cpu: [loong64]
362
+
os: [linux]
363
+
364
+
'@esbuild/linux-mips64el@0.25.10':
365
+
resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
366
+
engines: {node: '>=18'}
367
+
cpu: [mips64el]
368
+
os: [linux]
369
+
370
+
'@esbuild/linux-mips64el@0.25.4':
371
+
resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
372
+
engines: {node: '>=18'}
373
+
cpu: [mips64el]
374
+
os: [linux]
375
+
376
+
'@esbuild/linux-ppc64@0.25.10':
377
+
resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
378
+
engines: {node: '>=18'}
379
+
cpu: [ppc64]
380
+
os: [linux]
381
+
382
+
'@esbuild/linux-ppc64@0.25.4':
383
+
resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
384
+
engines: {node: '>=18'}
385
+
cpu: [ppc64]
386
+
os: [linux]
387
+
388
+
'@esbuild/linux-riscv64@0.25.10':
389
+
resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
390
+
engines: {node: '>=18'}
391
+
cpu: [riscv64]
392
+
os: [linux]
393
+
394
+
'@esbuild/linux-riscv64@0.25.4':
395
+
resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
396
+
engines: {node: '>=18'}
397
+
cpu: [riscv64]
398
+
os: [linux]
399
+
400
+
'@esbuild/linux-s390x@0.25.10':
401
+
resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
402
+
engines: {node: '>=18'}
403
+
cpu: [s390x]
404
+
os: [linux]
405
+
406
+
'@esbuild/linux-s390x@0.25.4':
407
+
resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
408
+
engines: {node: '>=18'}
409
+
cpu: [s390x]
410
+
os: [linux]
411
+
412
+
'@esbuild/linux-x64@0.25.10':
413
+
resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
414
+
engines: {node: '>=18'}
415
+
cpu: [x64]
416
+
os: [linux]
417
+
418
+
'@esbuild/linux-x64@0.25.4':
419
+
resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
420
+
engines: {node: '>=18'}
421
+
cpu: [x64]
422
+
os: [linux]
423
+
424
+
'@esbuild/netbsd-arm64@0.25.10':
425
+
resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
426
+
engines: {node: '>=18'}
427
+
cpu: [arm64]
428
+
os: [netbsd]
429
+
430
+
'@esbuild/netbsd-arm64@0.25.4':
431
+
resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
432
+
engines: {node: '>=18'}
433
+
cpu: [arm64]
434
+
os: [netbsd]
435
+
436
+
'@esbuild/netbsd-x64@0.25.10':
437
+
resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
438
+
engines: {node: '>=18'}
439
+
cpu: [x64]
440
+
os: [netbsd]
441
+
442
+
'@esbuild/netbsd-x64@0.25.4':
443
+
resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
444
+
engines: {node: '>=18'}
445
+
cpu: [x64]
446
+
os: [netbsd]
447
+
448
+
'@esbuild/openbsd-arm64@0.25.10':
449
+
resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
450
+
engines: {node: '>=18'}
451
+
cpu: [arm64]
452
+
os: [openbsd]
453
+
454
+
'@esbuild/openbsd-arm64@0.25.4':
455
+
resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
456
+
engines: {node: '>=18'}
457
+
cpu: [arm64]
458
+
os: [openbsd]
459
+
460
+
'@esbuild/openbsd-x64@0.25.10':
461
+
resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
462
+
engines: {node: '>=18'}
463
+
cpu: [x64]
464
+
os: [openbsd]
465
+
466
+
'@esbuild/openbsd-x64@0.25.4':
467
+
resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
468
+
engines: {node: '>=18'}
469
+
cpu: [x64]
470
+
os: [openbsd]
471
+
472
+
'@esbuild/openharmony-arm64@0.25.10':
473
+
resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
474
+
engines: {node: '>=18'}
475
+
cpu: [arm64]
476
+
os: [openharmony]
477
+
478
+
'@esbuild/sunos-x64@0.25.10':
479
+
resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
480
+
engines: {node: '>=18'}
481
+
cpu: [x64]
482
+
os: [sunos]
483
+
484
+
'@esbuild/sunos-x64@0.25.4':
485
+
resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
486
+
engines: {node: '>=18'}
487
+
cpu: [x64]
488
+
os: [sunos]
489
+
490
+
'@esbuild/win32-arm64@0.25.10':
491
+
resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
492
+
engines: {node: '>=18'}
493
+
cpu: [arm64]
494
+
os: [win32]
495
+
496
+
'@esbuild/win32-arm64@0.25.4':
497
+
resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
498
+
engines: {node: '>=18'}
499
+
cpu: [arm64]
500
+
os: [win32]
501
+
502
+
'@esbuild/win32-ia32@0.25.10':
503
+
resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
504
+
engines: {node: '>=18'}
505
+
cpu: [ia32]
506
+
os: [win32]
507
+
508
+
'@esbuild/win32-ia32@0.25.4':
509
+
resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
510
+
engines: {node: '>=18'}
511
+
cpu: [ia32]
512
+
os: [win32]
513
+
514
+
'@esbuild/win32-x64@0.25.10':
515
+
resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
516
+
engines: {node: '>=18'}
517
+
cpu: [x64]
518
+
os: [win32]
519
+
520
+
'@esbuild/win32-x64@0.25.4':
521
+
resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
522
+
engines: {node: '>=18'}
523
+
cpu: [x64]
524
+
os: [win32]
525
+
526
+
'@fontsource-variable/dm-sans@5.2.8':
527
+
resolution: {integrity: sha512-AxkvMTvNWgfrmlyjiV05vlHYJa+nRQCf1EfvIrQAPBpFJW0O9VTz7oAFr9S3lvbWdmnFoBk7yFqQL86u64nl2g==}
528
+
529
+
'@hono/node-server@1.19.1':
530
+
resolution: {integrity: sha512-h44e5s+ByUriaRIbeS/C74O8v90m0A95luyYQGMF7KEn96KkYMXO7bZAwombzTpjQTU4e0TkU8U1WBIXlwuwtA==}
531
+
engines: {node: '>=18.14.1'}
532
+
peerDependencies:
533
+
hono: ^4
534
+
535
+
'@hookform/resolvers@5.2.2':
536
+
resolution: {integrity: sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==}
537
+
peerDependencies:
538
+
react-hook-form: ^7.55.0
539
+
540
+
'@img/sharp-darwin-arm64@0.33.5':
541
+
resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
542
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
543
+
cpu: [arm64]
544
+
os: [darwin]
545
+
546
+
'@img/sharp-darwin-x64@0.33.5':
547
+
resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
548
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
549
+
cpu: [x64]
550
+
os: [darwin]
551
+
552
+
'@img/sharp-libvips-darwin-arm64@1.0.4':
553
+
resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
554
+
cpu: [arm64]
555
+
os: [darwin]
556
+
557
+
'@img/sharp-libvips-darwin-x64@1.0.4':
558
+
resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
559
+
cpu: [x64]
560
+
os: [darwin]
561
+
562
+
'@img/sharp-libvips-linux-arm64@1.0.4':
563
+
resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
564
+
cpu: [arm64]
565
+
os: [linux]
566
+
567
+
'@img/sharp-libvips-linux-arm@1.0.5':
568
+
resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
569
+
cpu: [arm]
570
+
os: [linux]
571
+
572
+
'@img/sharp-libvips-linux-s390x@1.0.4':
573
+
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
574
+
cpu: [s390x]
575
+
os: [linux]
576
+
577
+
'@img/sharp-libvips-linux-x64@1.0.4':
578
+
resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
579
+
cpu: [x64]
580
+
os: [linux]
581
+
582
+
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
583
+
resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
584
+
cpu: [arm64]
585
+
os: [linux]
586
+
587
+
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
588
+
resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
589
+
cpu: [x64]
590
+
os: [linux]
591
+
592
+
'@img/sharp-linux-arm64@0.33.5':
593
+
resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
594
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
595
+
cpu: [arm64]
596
+
os: [linux]
597
+
598
+
'@img/sharp-linux-arm@0.33.5':
599
+
resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
600
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
601
+
cpu: [arm]
602
+
os: [linux]
603
+
604
+
'@img/sharp-linux-s390x@0.33.5':
605
+
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
606
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
607
+
cpu: [s390x]
608
+
os: [linux]
609
+
610
+
'@img/sharp-linux-x64@0.33.5':
611
+
resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
612
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
613
+
cpu: [x64]
614
+
os: [linux]
615
+
616
+
'@img/sharp-linuxmusl-arm64@0.33.5':
617
+
resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
618
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
619
+
cpu: [arm64]
620
+
os: [linux]
621
+
622
+
'@img/sharp-linuxmusl-x64@0.33.5':
623
+
resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
624
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
625
+
cpu: [x64]
626
+
os: [linux]
627
+
628
+
'@img/sharp-wasm32@0.33.5':
629
+
resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
630
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
631
+
cpu: [wasm32]
632
+
633
+
'@img/sharp-win32-ia32@0.33.5':
634
+
resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
635
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
636
+
cpu: [ia32]
637
+
os: [win32]
638
+
639
+
'@img/sharp-win32-x64@0.33.5':
640
+
resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
641
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
642
+
cpu: [x64]
643
+
os: [win32]
644
+
645
+
'@isaacs/fs-minipass@4.0.1':
646
+
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
647
+
engines: {node: '>=18.0.0'}
648
+
649
+
'@jridgewell/gen-mapping@0.3.13':
650
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
651
+
652
+
'@jridgewell/remapping@2.3.5':
653
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
654
+
655
+
'@jridgewell/resolve-uri@3.1.2':
656
+
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
657
+
engines: {node: '>=6.0.0'}
658
+
659
+
'@jridgewell/source-map@0.3.11':
660
+
resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
661
+
662
+
'@jridgewell/sourcemap-codec@1.5.5':
663
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
664
+
665
+
'@jridgewell/trace-mapping@0.3.31':
666
+
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
667
+
668
+
'@jridgewell/trace-mapping@0.3.9':
669
+
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
670
+
671
+
'@poppinss/colors@4.1.5':
672
+
resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==}
673
+
674
+
'@poppinss/dumper@0.6.4':
675
+
resolution: {integrity: sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==}
676
+
677
+
'@poppinss/exception@1.2.2':
678
+
resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==}
679
+
680
+
'@radix-ui/primitive@1.1.3':
681
+
resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
682
+
683
+
'@radix-ui/react-compose-refs@1.1.2':
684
+
resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
685
+
peerDependencies:
686
+
'@types/react': '*'
687
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
688
+
peerDependenciesMeta:
689
+
'@types/react':
690
+
optional: true
691
+
692
+
'@radix-ui/react-context@1.1.2':
693
+
resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
694
+
peerDependencies:
695
+
'@types/react': '*'
696
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
697
+
peerDependenciesMeta:
698
+
'@types/react':
699
+
optional: true
700
+
701
+
'@radix-ui/react-dialog@1.1.15':
702
+
resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
703
+
peerDependencies:
704
+
'@types/react': '*'
705
+
'@types/react-dom': '*'
706
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
707
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
708
+
peerDependenciesMeta:
709
+
'@types/react':
710
+
optional: true
711
+
'@types/react-dom':
712
+
optional: true
713
+
714
+
'@radix-ui/react-dismissable-layer@1.1.11':
715
+
resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
716
+
peerDependencies:
717
+
'@types/react': '*'
718
+
'@types/react-dom': '*'
719
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
720
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
721
+
peerDependenciesMeta:
722
+
'@types/react':
723
+
optional: true
724
+
'@types/react-dom':
725
+
optional: true
726
+
727
+
'@radix-ui/react-focus-guards@1.1.3':
728
+
resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
729
+
peerDependencies:
730
+
'@types/react': '*'
731
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
732
+
peerDependenciesMeta:
733
+
'@types/react':
734
+
optional: true
735
+
736
+
'@radix-ui/react-focus-scope@1.1.7':
737
+
resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
738
+
peerDependencies:
739
+
'@types/react': '*'
740
+
'@types/react-dom': '*'
741
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
742
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
743
+
peerDependenciesMeta:
744
+
'@types/react':
745
+
optional: true
746
+
'@types/react-dom':
747
+
optional: true
748
+
749
+
'@radix-ui/react-id@1.1.1':
750
+
resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
751
+
peerDependencies:
752
+
'@types/react': '*'
753
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
754
+
peerDependenciesMeta:
755
+
'@types/react':
756
+
optional: true
757
+
758
+
'@radix-ui/react-label@2.1.7':
759
+
resolution: {integrity: sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==}
760
+
peerDependencies:
761
+
'@types/react': '*'
762
+
'@types/react-dom': '*'
763
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
764
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
765
+
peerDependenciesMeta:
766
+
'@types/react':
767
+
optional: true
768
+
'@types/react-dom':
769
+
optional: true
770
+
771
+
'@radix-ui/react-portal@1.1.9':
772
+
resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
773
+
peerDependencies:
774
+
'@types/react': '*'
775
+
'@types/react-dom': '*'
776
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
777
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
778
+
peerDependenciesMeta:
779
+
'@types/react':
780
+
optional: true
781
+
'@types/react-dom':
782
+
optional: true
783
+
784
+
'@radix-ui/react-presence@1.1.5':
785
+
resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
786
+
peerDependencies:
787
+
'@types/react': '*'
788
+
'@types/react-dom': '*'
789
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
790
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
791
+
peerDependenciesMeta:
792
+
'@types/react':
793
+
optional: true
794
+
'@types/react-dom':
795
+
optional: true
796
+
797
+
'@radix-ui/react-primitive@2.1.3':
798
+
resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
799
+
peerDependencies:
800
+
'@types/react': '*'
801
+
'@types/react-dom': '*'
802
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
803
+
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
804
+
peerDependenciesMeta:
805
+
'@types/react':
806
+
optional: true
807
+
'@types/react-dom':
808
+
optional: true
809
+
810
+
'@radix-ui/react-slot@1.2.3':
811
+
resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
812
+
peerDependencies:
813
+
'@types/react': '*'
814
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
815
+
peerDependenciesMeta:
816
+
'@types/react':
817
+
optional: true
818
+
819
+
'@radix-ui/react-use-callback-ref@1.1.1':
820
+
resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
821
+
peerDependencies:
822
+
'@types/react': '*'
823
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
824
+
peerDependenciesMeta:
825
+
'@types/react':
826
+
optional: true
827
+
828
+
'@radix-ui/react-use-controllable-state@1.2.2':
829
+
resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
830
+
peerDependencies:
831
+
'@types/react': '*'
832
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
833
+
peerDependenciesMeta:
834
+
'@types/react':
835
+
optional: true
836
+
837
+
'@radix-ui/react-use-effect-event@0.0.2':
838
+
resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
839
+
peerDependencies:
840
+
'@types/react': '*'
841
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
842
+
peerDependenciesMeta:
843
+
'@types/react':
844
+
optional: true
845
+
846
+
'@radix-ui/react-use-escape-keydown@1.1.1':
847
+
resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
848
+
peerDependencies:
849
+
'@types/react': '*'
850
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
851
+
peerDependenciesMeta:
852
+
'@types/react':
853
+
optional: true
854
+
855
+
'@radix-ui/react-use-layout-effect@1.1.1':
856
+
resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
857
+
peerDependencies:
858
+
'@types/react': '*'
859
+
react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
860
+
peerDependenciesMeta:
861
+
'@types/react':
862
+
optional: true
863
+
864
+
'@remix-run/node-fetch-server@0.8.1':
865
+
resolution: {integrity: sha512-J1dev372wtJqmqn9U/qbpbZxbJSQrogNN2+Qv1lKlpATpe/WQ9aCZfl/xSb9d2Rgh1IyLSvNxZAXPZxruO6Xig==}
866
+
867
+
'@rolldown/pluginutils@1.0.0-beta.34':
868
+
resolution: {integrity: sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==}
869
+
870
+
'@rollup/rollup-android-arm-eabi@4.50.2':
871
+
resolution: {integrity: sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==}
872
+
cpu: [arm]
873
+
os: [android]
874
+
875
+
'@rollup/rollup-android-arm64@4.50.2':
876
+
resolution: {integrity: sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==}
877
+
cpu: [arm64]
878
+
os: [android]
879
+
880
+
'@rollup/rollup-darwin-arm64@4.50.2':
881
+
resolution: {integrity: sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==}
882
+
cpu: [arm64]
883
+
os: [darwin]
884
+
885
+
'@rollup/rollup-darwin-x64@4.50.2':
886
+
resolution: {integrity: sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==}
887
+
cpu: [x64]
888
+
os: [darwin]
889
+
890
+
'@rollup/rollup-freebsd-arm64@4.50.2':
891
+
resolution: {integrity: sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==}
892
+
cpu: [arm64]
893
+
os: [freebsd]
894
+
895
+
'@rollup/rollup-freebsd-x64@4.50.2':
896
+
resolution: {integrity: sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==}
897
+
cpu: [x64]
898
+
os: [freebsd]
899
+
900
+
'@rollup/rollup-linux-arm-gnueabihf@4.50.2':
901
+
resolution: {integrity: sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==}
902
+
cpu: [arm]
903
+
os: [linux]
904
+
905
+
'@rollup/rollup-linux-arm-musleabihf@4.50.2':
906
+
resolution: {integrity: sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==}
907
+
cpu: [arm]
908
+
os: [linux]
909
+
910
+
'@rollup/rollup-linux-arm64-gnu@4.50.2':
911
+
resolution: {integrity: sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==}
912
+
cpu: [arm64]
913
+
os: [linux]
914
+
915
+
'@rollup/rollup-linux-arm64-musl@4.50.2':
916
+
resolution: {integrity: sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==}
917
+
cpu: [arm64]
918
+
os: [linux]
919
+
920
+
'@rollup/rollup-linux-loong64-gnu@4.50.2':
921
+
resolution: {integrity: sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==}
922
+
cpu: [loong64]
923
+
os: [linux]
924
+
925
+
'@rollup/rollup-linux-ppc64-gnu@4.50.2':
926
+
resolution: {integrity: sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==}
927
+
cpu: [ppc64]
928
+
os: [linux]
929
+
930
+
'@rollup/rollup-linux-riscv64-gnu@4.50.2':
931
+
resolution: {integrity: sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==}
932
+
cpu: [riscv64]
933
+
os: [linux]
934
+
935
+
'@rollup/rollup-linux-riscv64-musl@4.50.2':
936
+
resolution: {integrity: sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==}
937
+
cpu: [riscv64]
938
+
os: [linux]
939
+
940
+
'@rollup/rollup-linux-s390x-gnu@4.50.2':
941
+
resolution: {integrity: sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==}
942
+
cpu: [s390x]
943
+
os: [linux]
944
+
945
+
'@rollup/rollup-linux-x64-gnu@4.50.2':
946
+
resolution: {integrity: sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==}
947
+
cpu: [x64]
948
+
os: [linux]
949
+
950
+
'@rollup/rollup-linux-x64-musl@4.50.2':
951
+
resolution: {integrity: sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==}
952
+
cpu: [x64]
953
+
os: [linux]
954
+
955
+
'@rollup/rollup-openharmony-arm64@4.50.2':
956
+
resolution: {integrity: sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==}
957
+
cpu: [arm64]
958
+
os: [openharmony]
959
+
960
+
'@rollup/rollup-win32-arm64-msvc@4.50.2':
961
+
resolution: {integrity: sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==}
962
+
cpu: [arm64]
963
+
os: [win32]
964
+
965
+
'@rollup/rollup-win32-ia32-msvc@4.50.2':
966
+
resolution: {integrity: sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==}
967
+
cpu: [ia32]
968
+
os: [win32]
969
+
970
+
'@rollup/rollup-win32-x64-msvc@4.50.2':
971
+
resolution: {integrity: sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==}
972
+
cpu: [x64]
973
+
os: [win32]
974
+
975
+
'@sindresorhus/is@7.1.0':
976
+
resolution: {integrity: sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==}
977
+
engines: {node: '>=18'}
978
+
979
+
'@speed-highlight/core@1.2.7':
980
+
resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==}
981
+
982
+
'@standard-schema/utils@0.3.0':
983
+
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
984
+
985
+
'@swc/core-darwin-arm64@1.13.5':
986
+
resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==}
987
+
engines: {node: '>=10'}
988
+
cpu: [arm64]
989
+
os: [darwin]
990
+
991
+
'@swc/core-darwin-x64@1.13.5':
992
+
resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==}
993
+
engines: {node: '>=10'}
994
+
cpu: [x64]
995
+
os: [darwin]
996
+
997
+
'@swc/core-linux-arm-gnueabihf@1.13.5':
998
+
resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==}
999
+
engines: {node: '>=10'}
1000
+
cpu: [arm]
1001
+
os: [linux]
1002
+
1003
+
'@swc/core-linux-arm64-gnu@1.13.5':
1004
+
resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==}
1005
+
engines: {node: '>=10'}
1006
+
cpu: [arm64]
1007
+
os: [linux]
1008
+
1009
+
'@swc/core-linux-arm64-musl@1.13.5':
1010
+
resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==}
1011
+
engines: {node: '>=10'}
1012
+
cpu: [arm64]
1013
+
os: [linux]
1014
+
1015
+
'@swc/core-linux-x64-gnu@1.13.5':
1016
+
resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==}
1017
+
engines: {node: '>=10'}
1018
+
cpu: [x64]
1019
+
os: [linux]
1020
+
1021
+
'@swc/core-linux-x64-musl@1.13.5':
1022
+
resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==}
1023
+
engines: {node: '>=10'}
1024
+
cpu: [x64]
1025
+
os: [linux]
1026
+
1027
+
'@swc/core-win32-arm64-msvc@1.13.5':
1028
+
resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==}
1029
+
engines: {node: '>=10'}
1030
+
cpu: [arm64]
1031
+
os: [win32]
1032
+
1033
+
'@swc/core-win32-ia32-msvc@1.13.5':
1034
+
resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==}
1035
+
engines: {node: '>=10'}
1036
+
cpu: [ia32]
1037
+
os: [win32]
1038
+
1039
+
'@swc/core-win32-x64-msvc@1.13.5':
1040
+
resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==}
1041
+
engines: {node: '>=10'}
1042
+
cpu: [x64]
1043
+
os: [win32]
1044
+
1045
+
'@swc/core@1.13.5':
1046
+
resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==}
1047
+
engines: {node: '>=10'}
1048
+
peerDependencies:
1049
+
'@swc/helpers': '>=0.5.17'
1050
+
peerDependenciesMeta:
1051
+
'@swc/helpers':
1052
+
optional: true
1053
+
1054
+
'@swc/counter@0.1.3':
1055
+
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
1056
+
1057
+
'@swc/types@0.1.25':
1058
+
resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
1059
+
1060
+
'@tailwindcss/node@4.1.13':
1061
+
resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==}
1062
+
1063
+
'@tailwindcss/oxide-android-arm64@4.1.13':
1064
+
resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==}
1065
+
engines: {node: '>= 10'}
1066
+
cpu: [arm64]
1067
+
os: [android]
1068
+
1069
+
'@tailwindcss/oxide-darwin-arm64@4.1.13':
1070
+
resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==}
1071
+
engines: {node: '>= 10'}
1072
+
cpu: [arm64]
1073
+
os: [darwin]
1074
+
1075
+
'@tailwindcss/oxide-darwin-x64@4.1.13':
1076
+
resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==}
1077
+
engines: {node: '>= 10'}
1078
+
cpu: [x64]
1079
+
os: [darwin]
1080
+
1081
+
'@tailwindcss/oxide-freebsd-x64@4.1.13':
1082
+
resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==}
1083
+
engines: {node: '>= 10'}
1084
+
cpu: [x64]
1085
+
os: [freebsd]
1086
+
1087
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
1088
+
resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==}
1089
+
engines: {node: '>= 10'}
1090
+
cpu: [arm]
1091
+
os: [linux]
1092
+
1093
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
1094
+
resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==}
1095
+
engines: {node: '>= 10'}
1096
+
cpu: [arm64]
1097
+
os: [linux]
1098
+
1099
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.13':
1100
+
resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==}
1101
+
engines: {node: '>= 10'}
1102
+
cpu: [arm64]
1103
+
os: [linux]
1104
+
1105
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.13':
1106
+
resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==}
1107
+
engines: {node: '>= 10'}
1108
+
cpu: [x64]
1109
+
os: [linux]
1110
+
1111
+
'@tailwindcss/oxide-linux-x64-musl@4.1.13':
1112
+
resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==}
1113
+
engines: {node: '>= 10'}
1114
+
cpu: [x64]
1115
+
os: [linux]
1116
+
1117
+
'@tailwindcss/oxide-wasm32-wasi@4.1.13':
1118
+
resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==}
1119
+
engines: {node: '>=14.0.0'}
1120
+
cpu: [wasm32]
1121
+
bundledDependencies:
1122
+
- '@napi-rs/wasm-runtime'
1123
+
- '@emnapi/core'
1124
+
- '@emnapi/runtime'
1125
+
- '@tybys/wasm-util'
1126
+
- '@emnapi/wasi-threads'
1127
+
- tslib
1128
+
1129
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
1130
+
resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==}
1131
+
engines: {node: '>= 10'}
1132
+
cpu: [arm64]
1133
+
os: [win32]
1134
+
1135
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.13':
1136
+
resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==}
1137
+
engines: {node: '>= 10'}
1138
+
cpu: [x64]
1139
+
os: [win32]
1140
+
1141
+
'@tailwindcss/oxide@4.1.13':
1142
+
resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==}
1143
+
engines: {node: '>= 10'}
1144
+
1145
+
'@tailwindcss/vite@4.1.13':
1146
+
resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==}
1147
+
peerDependencies:
1148
+
vite: ^5.2.0 || ^6 || ^7
1149
+
1150
+
'@types/babel__core@7.20.5':
1151
+
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
1152
+
1153
+
'@types/babel__generator@7.27.0':
1154
+
resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
1155
+
1156
+
'@types/babel__template@7.4.4':
1157
+
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
1158
+
1159
+
'@types/babel__traverse@7.28.0':
1160
+
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
1161
+
1162
+
'@types/eslint-scope@3.7.7':
1163
+
resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
1164
+
1165
+
'@types/eslint@9.6.1':
1166
+
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
1167
+
1168
+
'@types/estree@1.0.8':
1169
+
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
1170
+
1171
+
'@types/json-schema@7.0.15':
1172
+
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
1173
+
1174
+
'@types/node@24.5.2':
1175
+
resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==}
1176
+
1177
+
'@types/react-dom@19.1.9':
1178
+
resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==}
1179
+
peerDependencies:
1180
+
'@types/react': ^19.0.0
1181
+
1182
+
'@types/react@19.1.12':
1183
+
resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==}
1184
+
1185
+
'@vitejs/plugin-react@5.0.2':
1186
+
resolution: {integrity: sha512-tmyFgixPZCx2+e6VO9TNITWcCQl8+Nl/E8YbAyPVv85QCc7/A3JrdfG2A8gIzvVhWuzMOVrFW1aReaNxrI6tbw==}
1187
+
engines: {node: ^20.19.0 || >=22.12.0}
1188
+
peerDependencies:
1189
+
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
1190
+
1191
+
'@vitejs/plugin-rsc@0.4.29':
1192
+
resolution: {integrity: sha512-sNR86RuKfk0KQ8H3Ustmp1GC9ABmWyJo736WqCtaipH8mfnxDO2c9gvm+q24yoESerOlNI/zHkCGX8vGm00NCw==}
1193
+
peerDependencies:
1194
+
react: '*'
1195
+
react-dom: '*'
1196
+
vite: '*'
1197
+
1198
+
'@webassemblyjs/ast@1.14.1':
1199
+
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
1200
+
1201
+
'@webassemblyjs/floating-point-hex-parser@1.13.2':
1202
+
resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
1203
+
1204
+
'@webassemblyjs/helper-api-error@1.13.2':
1205
+
resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
1206
+
1207
+
'@webassemblyjs/helper-buffer@1.14.1':
1208
+
resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
1209
+
1210
+
'@webassemblyjs/helper-numbers@1.13.2':
1211
+
resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
1212
+
1213
+
'@webassemblyjs/helper-wasm-bytecode@1.13.2':
1214
+
resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
1215
+
1216
+
'@webassemblyjs/helper-wasm-section@1.14.1':
1217
+
resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
1218
+
1219
+
'@webassemblyjs/ieee754@1.13.2':
1220
+
resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
1221
+
1222
+
'@webassemblyjs/leb128@1.13.2':
1223
+
resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
1224
+
1225
+
'@webassemblyjs/utf8@1.13.2':
1226
+
resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
1227
+
1228
+
'@webassemblyjs/wasm-edit@1.14.1':
1229
+
resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
1230
+
1231
+
'@webassemblyjs/wasm-gen@1.14.1':
1232
+
resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
1233
+
1234
+
'@webassemblyjs/wasm-opt@1.14.1':
1235
+
resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
1236
+
1237
+
'@webassemblyjs/wasm-parser@1.14.1':
1238
+
resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
1239
+
1240
+
'@webassemblyjs/wast-printer@1.14.1':
1241
+
resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
1242
+
1243
+
'@xtuc/ieee754@1.2.0':
1244
+
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
1245
+
1246
+
'@xtuc/long@4.2.2':
1247
+
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
1248
+
1249
+
acorn-import-phases@1.0.4:
1250
+
resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
1251
+
engines: {node: '>=10.13.0'}
1252
+
peerDependencies:
1253
+
acorn: ^8.14.0
1254
+
1255
+
acorn-loose@8.5.2:
1256
+
resolution: {integrity: sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A==}
1257
+
engines: {node: '>=0.4.0'}
1258
+
1259
+
acorn-walk@8.3.2:
1260
+
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
1261
+
engines: {node: '>=0.4.0'}
1262
+
1263
+
acorn@8.14.0:
1264
+
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
1265
+
engines: {node: '>=0.4.0'}
1266
+
hasBin: true
1267
+
1268
+
acorn@8.15.0:
1269
+
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
1270
+
engines: {node: '>=0.4.0'}
1271
+
hasBin: true
1272
+
1273
+
ajv-formats@2.1.1:
1274
+
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
1275
+
peerDependencies:
1276
+
ajv: ^8.0.0
1277
+
peerDependenciesMeta:
1278
+
ajv:
1279
+
optional: true
1280
+
1281
+
ajv-keywords@5.1.0:
1282
+
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
1283
+
peerDependencies:
1284
+
ajv: ^8.8.2
1285
+
1286
+
ajv@8.17.1:
1287
+
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
1288
+
1289
+
aria-hidden@1.2.6:
1290
+
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
1291
+
engines: {node: '>=10'}
1292
+
1293
+
baseline-browser-mapping@2.8.5:
1294
+
resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==}
1295
+
hasBin: true
1296
+
1297
+
blake3-wasm@2.1.5:
1298
+
resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
1299
+
1300
+
browserslist@4.26.2:
1301
+
resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
1302
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1303
+
hasBin: true
1304
+
1305
+
buffer-from@1.1.2:
1306
+
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1307
+
1308
+
caniuse-lite@1.0.30001743:
1309
+
resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==}
1310
+
1311
+
chownr@3.0.0:
1312
+
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
1313
+
engines: {node: '>=18'}
1314
+
1315
+
chrome-trace-event@1.0.4:
1316
+
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
1317
+
engines: {node: '>=6.0'}
1318
+
1319
+
class-variance-authority@0.7.1:
1320
+
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
1321
+
1322
+
clsx@2.1.1:
1323
+
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
1324
+
engines: {node: '>=6'}
1325
+
1326
+
color-convert@2.0.1:
1327
+
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1328
+
engines: {node: '>=7.0.0'}
1329
+
1330
+
color-name@1.1.4:
1331
+
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1332
+
1333
+
color-string@1.9.1:
1334
+
resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
1335
+
1336
+
color@4.2.3:
1337
+
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
1338
+
engines: {node: '>=12.5.0'}
1339
+
1340
+
commander@2.20.3:
1341
+
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
1342
+
1343
+
convert-source-map@2.0.0:
1344
+
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1345
+
1346
+
cookie@1.0.2:
1347
+
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
1348
+
engines: {node: '>=18'}
1349
+
1350
+
csstype@3.1.3:
1351
+
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
1352
+
1353
+
debug@4.4.3:
1354
+
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
1355
+
engines: {node: '>=6.0'}
1356
+
peerDependencies:
1357
+
supports-color: '*'
1358
+
peerDependenciesMeta:
1359
+
supports-color:
1360
+
optional: true
1361
+
1362
+
defu@6.1.4:
1363
+
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
1364
+
1365
+
detect-libc@2.1.0:
1366
+
resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==}
1367
+
engines: {node: '>=8'}
1368
+
1369
+
detect-node-es@1.1.0:
1370
+
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
1371
+
1372
+
dotenv@17.2.2:
1373
+
resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
1374
+
engines: {node: '>=12'}
1375
+
1376
+
electron-to-chromium@1.5.221:
1377
+
resolution: {integrity: sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==}
1378
+
1379
+
enhanced-resolve@5.18.3:
1380
+
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
1381
+
engines: {node: '>=10.13.0'}
1382
+
1383
+
error-stack-parser-es@1.0.5:
1384
+
resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
1385
+
1386
+
es-module-lexer@1.7.0:
1387
+
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
1388
+
1389
+
esbuild@0.25.10:
1390
+
resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
1391
+
engines: {node: '>=18'}
1392
+
hasBin: true
1393
+
1394
+
esbuild@0.25.4:
1395
+
resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
1396
+
engines: {node: '>=18'}
1397
+
hasBin: true
1398
+
1399
+
escalade@3.2.0:
1400
+
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
1401
+
engines: {node: '>=6'}
1402
+
1403
+
eslint-scope@5.1.1:
1404
+
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1405
+
engines: {node: '>=8.0.0'}
1406
+
1407
+
esrecurse@4.3.0:
1408
+
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1409
+
engines: {node: '>=4.0'}
1410
+
1411
+
estraverse@4.3.0:
1412
+
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1413
+
engines: {node: '>=4.0'}
1414
+
1415
+
estraverse@5.3.0:
1416
+
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1417
+
engines: {node: '>=4.0'}
1418
+
1419
+
estree-walker@3.0.3:
1420
+
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
1421
+
1422
+
events@3.3.0:
1423
+
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
1424
+
engines: {node: '>=0.8.x'}
1425
+
1426
+
exit-hook@2.2.1:
1427
+
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
1428
+
engines: {node: '>=6'}
1429
+
1430
+
exsolve@1.0.7:
1431
+
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
1432
+
1433
+
fast-deep-equal@3.1.3:
1434
+
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1435
+
1436
+
fast-uri@3.1.0:
1437
+
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
1438
+
1439
+
fdir@6.5.0:
1440
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
1441
+
engines: {node: '>=12.0.0'}
1442
+
peerDependencies:
1443
+
picomatch: ^3 || ^4
1444
+
peerDependenciesMeta:
1445
+
picomatch:
1446
+
optional: true
1447
+
1448
+
fsevents@2.3.3:
1449
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1450
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1451
+
os: [darwin]
1452
+
1453
+
gensync@1.0.0-beta.2:
1454
+
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1455
+
engines: {node: '>=6.9.0'}
1456
+
1457
+
get-nonce@1.0.1:
1458
+
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
1459
+
engines: {node: '>=6'}
1460
+
1461
+
glob-to-regexp@0.4.1:
1462
+
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
1463
+
1464
+
graceful-fs@4.2.11:
1465
+
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1466
+
1467
+
has-flag@4.0.0:
1468
+
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1469
+
engines: {node: '>=8'}
1470
+
1471
+
hono@4.9.6:
1472
+
resolution: {integrity: sha512-doVjXhSFvYZ7y0dNokjwwSahcrAfdz+/BCLvAMa/vHLzjj8+CFyV5xteThGUsKdkaasgN+gF2mUxao+SGLpUeA==}
1473
+
engines: {node: '>=16.9.0'}
1474
+
1475
+
is-arrayish@0.3.4:
1476
+
resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
1477
+
1478
+
is-reference@3.0.3:
1479
+
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
1480
+
1481
+
jest-worker@27.5.1:
1482
+
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
1483
+
engines: {node: '>= 10.13.0'}
1484
+
1485
+
jiti@2.5.1:
1486
+
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
1487
+
hasBin: true
1488
+
1489
+
jotai@2.14.0:
1490
+
resolution: {integrity: sha512-JQkNkTnqjk1BlSUjHfXi+pGG/573bVN104gp6CymhrWDseZGDReTNniWrLhJ+zXbM6pH+82+UNJ2vwYQUkQMWQ==}
1491
+
engines: {node: '>=12.20.0'}
1492
+
peerDependencies:
1493
+
'@babel/core': '>=7.0.0'
1494
+
'@babel/template': '>=7.0.0'
1495
+
'@types/react': '>=17.0.0'
1496
+
react: '>=17.0.0'
1497
+
peerDependenciesMeta:
1498
+
'@babel/core':
1499
+
optional: true
1500
+
'@babel/template':
1501
+
optional: true
1502
+
'@types/react':
1503
+
optional: true
1504
+
react:
1505
+
optional: true
1506
+
1507
+
js-tokens@4.0.0:
1508
+
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1509
+
1510
+
jsesc@3.1.0:
1511
+
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1512
+
engines: {node: '>=6'}
1513
+
hasBin: true
1514
+
1515
+
json-parse-even-better-errors@2.3.1:
1516
+
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1517
+
1518
+
json-schema-traverse@1.0.0:
1519
+
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
1520
+
1521
+
json5@2.2.3:
1522
+
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1523
+
engines: {node: '>=6'}
1524
+
hasBin: true
1525
+
1526
+
kleur@4.1.5:
1527
+
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1528
+
engines: {node: '>=6'}
1529
+
1530
+
lightningcss-darwin-arm64@1.30.1:
1531
+
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
1532
+
engines: {node: '>= 12.0.0'}
1533
+
cpu: [arm64]
1534
+
os: [darwin]
1535
+
1536
+
lightningcss-darwin-x64@1.30.1:
1537
+
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
1538
+
engines: {node: '>= 12.0.0'}
1539
+
cpu: [x64]
1540
+
os: [darwin]
1541
+
1542
+
lightningcss-freebsd-x64@1.30.1:
1543
+
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
1544
+
engines: {node: '>= 12.0.0'}
1545
+
cpu: [x64]
1546
+
os: [freebsd]
1547
+
1548
+
lightningcss-linux-arm-gnueabihf@1.30.1:
1549
+
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
1550
+
engines: {node: '>= 12.0.0'}
1551
+
cpu: [arm]
1552
+
os: [linux]
1553
+
1554
+
lightningcss-linux-arm64-gnu@1.30.1:
1555
+
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
1556
+
engines: {node: '>= 12.0.0'}
1557
+
cpu: [arm64]
1558
+
os: [linux]
1559
+
1560
+
lightningcss-linux-arm64-musl@1.30.1:
1561
+
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
1562
+
engines: {node: '>= 12.0.0'}
1563
+
cpu: [arm64]
1564
+
os: [linux]
1565
+
1566
+
lightningcss-linux-x64-gnu@1.30.1:
1567
+
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
1568
+
engines: {node: '>= 12.0.0'}
1569
+
cpu: [x64]
1570
+
os: [linux]
1571
+
1572
+
lightningcss-linux-x64-musl@1.30.1:
1573
+
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
1574
+
engines: {node: '>= 12.0.0'}
1575
+
cpu: [x64]
1576
+
os: [linux]
1577
+
1578
+
lightningcss-win32-arm64-msvc@1.30.1:
1579
+
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
1580
+
engines: {node: '>= 12.0.0'}
1581
+
cpu: [arm64]
1582
+
os: [win32]
1583
+
1584
+
lightningcss-win32-x64-msvc@1.30.1:
1585
+
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
1586
+
engines: {node: '>= 12.0.0'}
1587
+
cpu: [x64]
1588
+
os: [win32]
1589
+
1590
+
lightningcss@1.30.1:
1591
+
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
1592
+
engines: {node: '>= 12.0.0'}
1593
+
1594
+
loader-runner@4.3.0:
1595
+
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
1596
+
engines: {node: '>=6.11.5'}
1597
+
1598
+
lru-cache@5.1.1:
1599
+
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1600
+
1601
+
lucide-react@0.544.0:
1602
+
resolution: {integrity: sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==}
1603
+
peerDependencies:
1604
+
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
1605
+
1606
+
magic-string@0.30.19:
1607
+
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
1608
+
1609
+
merge-stream@2.0.0:
1610
+
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1611
+
1612
+
mime-db@1.52.0:
1613
+
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1614
+
engines: {node: '>= 0.6'}
1615
+
1616
+
mime-types@2.1.35:
1617
+
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1618
+
engines: {node: '>= 0.6'}
1619
+
1620
+
mime@3.0.0:
1621
+
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
1622
+
engines: {node: '>=10.0.0'}
1623
+
hasBin: true
1624
+
1625
+
miniflare@4.20250924.0:
1626
+
resolution: {integrity: sha512-eQuWHklTeYYOil7sPPWo7Wrw86I4oac1kGAYfYcjg5dqMgMAiPUHvUWXMlTvW8ON6q33Ew23AsGDirm+Bea9ig==}
1627
+
engines: {node: '>=18.0.0'}
1628
+
hasBin: true
1629
+
1630
+
minipass@7.1.2:
1631
+
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1632
+
engines: {node: '>=16 || 14 >=14.17'}
1633
+
1634
+
minizlib@3.0.2:
1635
+
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
1636
+
engines: {node: '>= 18'}
1637
+
1638
+
mkdirp@3.0.1:
1639
+
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
1640
+
engines: {node: '>=10'}
1641
+
hasBin: true
1642
+
1643
+
ms@2.1.3:
1644
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1645
+
1646
+
nanoid@3.3.11:
1647
+
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1648
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1649
+
hasBin: true
1650
+
1651
+
neo-async@2.6.2:
1652
+
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
1653
+
1654
+
node-releases@2.0.21:
1655
+
resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
1656
+
1657
+
ohash@2.0.11:
1658
+
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
1659
+
1660
+
path-to-regexp@6.3.0:
1661
+
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
1662
+
1663
+
pathe@2.0.3:
1664
+
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1665
+
1666
+
periscopic@4.0.2:
1667
+
resolution: {integrity: sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==}
1668
+
1669
+
picocolors@1.1.1:
1670
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1671
+
1672
+
picomatch@4.0.3:
1673
+
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
1674
+
engines: {node: '>=12'}
1675
+
1676
+
postcss@8.5.6:
1677
+
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
1678
+
engines: {node: ^10 || ^12 || >=14}
1679
+
1680
+
randombytes@2.1.0:
1681
+
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
1682
+
1683
+
react-confetti@6.4.0:
1684
+
resolution: {integrity: sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg==}
1685
+
engines: {node: '>=16'}
1686
+
peerDependencies:
1687
+
react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0
1688
+
1689
+
react-dom@19.1.1:
1690
+
resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==}
1691
+
peerDependencies:
1692
+
react: ^19.1.1
1693
+
1694
+
react-hook-form@7.63.0:
1695
+
resolution: {integrity: sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==}
1696
+
engines: {node: '>=18.0.0'}
1697
+
peerDependencies:
1698
+
react: ^16.8.0 || ^17 || ^18 || ^19
1699
+
1700
+
react-refresh@0.17.0:
1701
+
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1702
+
engines: {node: '>=0.10.0'}
1703
+
1704
+
react-remove-scroll-bar@2.3.8:
1705
+
resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
1706
+
engines: {node: '>=10'}
1707
+
peerDependencies:
1708
+
'@types/react': '*'
1709
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1710
+
peerDependenciesMeta:
1711
+
'@types/react':
1712
+
optional: true
1713
+
1714
+
react-remove-scroll@2.7.1:
1715
+
resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==}
1716
+
engines: {node: '>=10'}
1717
+
peerDependencies:
1718
+
'@types/react': '*'
1719
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1720
+
peerDependenciesMeta:
1721
+
'@types/react':
1722
+
optional: true
1723
+
1724
+
react-server-dom-webpack@19.1.1:
1725
+
resolution: {integrity: sha512-6MJwCAgQKcNxzRQebeyDspWzcncJMxe7JfmA8OFHWCMtp6L++HyJMgScM492iIeQZln3C834HyG4/UeMMZeRMw==}
1726
+
engines: {node: '>=0.10.0'}
1727
+
peerDependencies:
1728
+
react: ^19.1.1
1729
+
react-dom: ^19.1.1
1730
+
webpack: ^5.59.0
1731
+
1732
+
react-style-singleton@2.2.3:
1733
+
resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
1734
+
engines: {node: '>=10'}
1735
+
peerDependencies:
1736
+
'@types/react': '*'
1737
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1738
+
peerDependenciesMeta:
1739
+
'@types/react':
1740
+
optional: true
1741
+
1742
+
react@19.1.1:
1743
+
resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==}
1744
+
engines: {node: '>=0.10.0'}
1745
+
1746
+
require-from-string@2.0.2:
1747
+
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1748
+
engines: {node: '>=0.10.0'}
1749
+
1750
+
rollup@4.50.2:
1751
+
resolution: {integrity: sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==}
1752
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1753
+
hasBin: true
1754
+
1755
+
rsc-html-stream@0.0.7:
1756
+
resolution: {integrity: sha512-v9+fuY7usTgvXdNl8JmfXCvSsQbq2YMd60kOeeMIqCJFZ69fViuIxztHei7v5mlMMa2h3SqS+v44Gu9i9xANZA==}
1757
+
1758
+
safe-buffer@5.2.1:
1759
+
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1760
+
1761
+
scheduler@0.26.0:
1762
+
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
1763
+
1764
+
schema-utils@4.3.2:
1765
+
resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
1766
+
engines: {node: '>= 10.13.0'}
1767
+
1768
+
semver@6.3.1:
1769
+
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1770
+
hasBin: true
1771
+
1772
+
semver@7.7.2:
1773
+
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1774
+
engines: {node: '>=10'}
1775
+
hasBin: true
1776
+
1777
+
serialize-javascript@6.0.2:
1778
+
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
1779
+
1780
+
sharp@0.33.5:
1781
+
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
1782
+
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
1783
+
1784
+
simple-swizzle@0.2.4:
1785
+
resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
1786
+
1787
+
source-map-js@1.2.1:
1788
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1789
+
engines: {node: '>=0.10.0'}
1790
+
1791
+
source-map-support@0.5.21:
1792
+
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1793
+
1794
+
source-map@0.6.1:
1795
+
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1796
+
engines: {node: '>=0.10.0'}
1797
+
1798
+
stoppable@1.1.0:
1799
+
resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
1800
+
engines: {node: '>=4', npm: '>=6'}
1801
+
1802
+
supports-color@10.2.2:
1803
+
resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
1804
+
engines: {node: '>=18'}
1805
+
1806
+
supports-color@8.1.1:
1807
+
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1808
+
engines: {node: '>=10'}
1809
+
1810
+
tailwind-merge@3.3.1:
1811
+
resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
1812
+
1813
+
tailwindcss@4.1.13:
1814
+
resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==}
1815
+
1816
+
tapable@2.2.3:
1817
+
resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
1818
+
engines: {node: '>=6'}
1819
+
1820
+
tar@7.4.3:
1821
+
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
1822
+
engines: {node: '>=18'}
1823
+
1824
+
terser-webpack-plugin@5.3.14:
1825
+
resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
1826
+
engines: {node: '>= 10.13.0'}
1827
+
peerDependencies:
1828
+
'@swc/core': '*'
1829
+
esbuild: '*'
1830
+
uglify-js: '*'
1831
+
webpack: ^5.1.0
1832
+
peerDependenciesMeta:
1833
+
'@swc/core':
1834
+
optional: true
1835
+
esbuild:
1836
+
optional: true
1837
+
uglify-js:
1838
+
optional: true
1839
+
1840
+
terser@5.44.0:
1841
+
resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
1842
+
engines: {node: '>=10'}
1843
+
hasBin: true
1844
+
1845
+
tinyglobby@0.2.15:
1846
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
1847
+
engines: {node: '>=12.0.0'}
1848
+
1849
+
tslib@2.8.1:
1850
+
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1851
+
1852
+
turbo-stream@3.1.0:
1853
+
resolution: {integrity: sha512-tVI25WEXl4fckNEmrq70xU1XumxUwEx/FZD5AgEcV8ri7Wvrg2o7GEq8U7htrNx3CajciGm+kDyhRf5JB6t7/A==}
1854
+
1855
+
tw-animate-css@1.4.0:
1856
+
resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
1857
+
1858
+
tween-functions@1.2.0:
1859
+
resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==}
1860
+
1861
+
typescript@5.9.2:
1862
+
resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
1863
+
engines: {node: '>=14.17'}
1864
+
hasBin: true
1865
+
1866
+
ufo@1.6.1:
1867
+
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
1868
+
1869
+
undici-types@7.12.0:
1870
+
resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==}
1871
+
1872
+
undici@7.14.0:
1873
+
resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==}
1874
+
engines: {node: '>=20.18.1'}
1875
+
1876
+
unenv@2.0.0-rc.21:
1877
+
resolution: {integrity: sha512-Wj7/AMtE9MRnAXa6Su3Lk0LNCfqDYgfwVjwRFVum9U7wsto1imuHqk4kTm7Jni+5A0Hn7dttL6O/zjvUvoo+8A==}
1878
+
1879
+
update-browserslist-db@1.1.3:
1880
+
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1881
+
hasBin: true
1882
+
peerDependencies:
1883
+
browserslist: '>= 4.21.0'
1884
+
1885
+
use-callback-ref@1.3.3:
1886
+
resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
1887
+
engines: {node: '>=10'}
1888
+
peerDependencies:
1889
+
'@types/react': '*'
1890
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1891
+
peerDependenciesMeta:
1892
+
'@types/react':
1893
+
optional: true
1894
+
1895
+
use-sidecar@1.1.3:
1896
+
resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
1897
+
engines: {node: '>=10'}
1898
+
peerDependencies:
1899
+
'@types/react': '*'
1900
+
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
1901
+
peerDependenciesMeta:
1902
+
'@types/react':
1903
+
optional: true
1904
+
1905
+
vite@7.1.5:
1906
+
resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==}
1907
+
engines: {node: ^20.19.0 || >=22.12.0}
1908
+
hasBin: true
1909
+
peerDependencies:
1910
+
'@types/node': ^20.19.0 || >=22.12.0
1911
+
jiti: '>=1.21.0'
1912
+
less: ^4.0.0
1913
+
lightningcss: ^1.21.0
1914
+
sass: ^1.70.0
1915
+
sass-embedded: ^1.70.0
1916
+
stylus: '>=0.54.8'
1917
+
sugarss: ^5.0.0
1918
+
terser: ^5.16.0
1919
+
tsx: ^4.8.1
1920
+
yaml: ^2.4.2
1921
+
peerDependenciesMeta:
1922
+
'@types/node':
1923
+
optional: true
1924
+
jiti:
1925
+
optional: true
1926
+
less:
1927
+
optional: true
1928
+
lightningcss:
1929
+
optional: true
1930
+
sass:
1931
+
optional: true
1932
+
sass-embedded:
1933
+
optional: true
1934
+
stylus:
1935
+
optional: true
1936
+
sugarss:
1937
+
optional: true
1938
+
terser:
1939
+
optional: true
1940
+
tsx:
1941
+
optional: true
1942
+
yaml:
1943
+
optional: true
1944
+
1945
+
vitefu@1.1.1:
1946
+
resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
1947
+
peerDependencies:
1948
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
1949
+
peerDependenciesMeta:
1950
+
vite:
1951
+
optional: true
1952
+
1953
+
waku@0.26.1:
1954
+
resolution: {integrity: sha512-b8nH8PFlZfnL8Yu1vbHISLAgcyFXeDaJAllKdB3oAWk71INQcTN8x0JfdZGUa0x/b2Lcn7souvub2chkGGh9Lg==}
1955
+
engines: {node: ^24.0.0 || ^22.12.0 || ^20.19.0}
1956
+
hasBin: true
1957
+
peerDependencies:
1958
+
react: ~19.1.1
1959
+
react-dom: ~19.1.1
1960
+
react-server-dom-webpack: ~19.1.1
1961
+
1962
+
watchpack@2.4.4:
1963
+
resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
1964
+
engines: {node: '>=10.13.0'}
1965
+
1966
+
webpack-sources@3.3.3:
1967
+
resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
1968
+
engines: {node: '>=10.13.0'}
1969
+
1970
+
webpack@5.101.3:
1971
+
resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==}
1972
+
engines: {node: '>=10.13.0'}
1973
+
hasBin: true
1974
+
peerDependencies:
1975
+
webpack-cli: '*'
1976
+
peerDependenciesMeta:
1977
+
webpack-cli:
1978
+
optional: true
1979
+
1980
+
workerd@1.20250924.0:
1981
+
resolution: {integrity: sha512-ovO2vwRCcMOlOm3bNwQQrVb8KDcewE/3rjfbZAYSF535BQQDUZ9dE1kyGBYlGx4W5udH3kqmOr+0YqTBLlycyA==}
1982
+
engines: {node: '>=16'}
1983
+
hasBin: true
1984
+
1985
+
wrangler@4.40.2:
1986
+
resolution: {integrity: sha512-wcev8GF6GU4ME5AsYY/gUehHrGdRiUCkifuyCeuVvpOtha3TMK4/s39x+jLuJBRtibpgejDekO68rqxfamf16A==}
1987
+
engines: {node: '>=18.0.0'}
1988
+
hasBin: true
1989
+
peerDependencies:
1990
+
'@cloudflare/workers-types': ^4.20250924.0
1991
+
peerDependenciesMeta:
1992
+
'@cloudflare/workers-types':
1993
+
optional: true
1994
+
1995
+
ws@8.18.0:
1996
+
resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
1997
+
engines: {node: '>=10.0.0'}
1998
+
peerDependencies:
1999
+
bufferutil: ^4.0.1
2000
+
utf-8-validate: '>=5.0.2'
2001
+
peerDependenciesMeta:
2002
+
bufferutil:
2003
+
optional: true
2004
+
utf-8-validate:
2005
+
optional: true
2006
+
2007
+
yallist@3.1.1:
2008
+
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2009
+
2010
+
yallist@5.0.0:
2011
+
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
2012
+
engines: {node: '>=18'}
2013
+
2014
+
youch-core@0.3.3:
2015
+
resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
2016
+
2017
+
youch@4.1.0-beta.10:
2018
+
resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==}
2019
+
2020
+
zimmerframe@1.1.4:
2021
+
resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
2022
+
2023
+
zod@3.22.3:
2024
+
resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==}
2025
+
2026
+
zod@4.1.11:
2027
+
resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==}
2028
+
2029
+
snapshots:
2030
+
2031
+
'@babel/code-frame@7.27.1':
2032
+
dependencies:
2033
+
'@babel/helper-validator-identifier': 7.27.1
2034
+
js-tokens: 4.0.0
2035
+
picocolors: 1.1.1
2036
+
2037
+
'@babel/compat-data@7.28.4': {}
2038
+
2039
+
'@babel/core@7.28.4':
2040
+
dependencies:
2041
+
'@babel/code-frame': 7.27.1
2042
+
'@babel/generator': 7.28.3
2043
+
'@babel/helper-compilation-targets': 7.27.2
2044
+
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
2045
+
'@babel/helpers': 7.28.4
2046
+
'@babel/parser': 7.28.4
2047
+
'@babel/template': 7.27.2
2048
+
'@babel/traverse': 7.28.4
2049
+
'@babel/types': 7.28.4
2050
+
'@jridgewell/remapping': 2.3.5
2051
+
convert-source-map: 2.0.0
2052
+
debug: 4.4.3
2053
+
gensync: 1.0.0-beta.2
2054
+
json5: 2.2.3
2055
+
semver: 6.3.1
2056
+
transitivePeerDependencies:
2057
+
- supports-color
2058
+
2059
+
'@babel/generator@7.28.3':
2060
+
dependencies:
2061
+
'@babel/parser': 7.28.4
2062
+
'@babel/types': 7.28.4
2063
+
'@jridgewell/gen-mapping': 0.3.13
2064
+
'@jridgewell/trace-mapping': 0.3.31
2065
+
jsesc: 3.1.0
2066
+
2067
+
'@babel/helper-compilation-targets@7.27.2':
2068
+
dependencies:
2069
+
'@babel/compat-data': 7.28.4
2070
+
'@babel/helper-validator-option': 7.27.1
2071
+
browserslist: 4.26.2
2072
+
lru-cache: 5.1.1
2073
+
semver: 6.3.1
2074
+
2075
+
'@babel/helper-globals@7.28.0': {}
2076
+
2077
+
'@babel/helper-module-imports@7.27.1':
2078
+
dependencies:
2079
+
'@babel/traverse': 7.28.4
2080
+
'@babel/types': 7.28.4
2081
+
transitivePeerDependencies:
2082
+
- supports-color
2083
+
2084
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
2085
+
dependencies:
2086
+
'@babel/core': 7.28.4
2087
+
'@babel/helper-module-imports': 7.27.1
2088
+
'@babel/helper-validator-identifier': 7.27.1
2089
+
'@babel/traverse': 7.28.4
2090
+
transitivePeerDependencies:
2091
+
- supports-color
2092
+
2093
+
'@babel/helper-plugin-utils@7.27.1': {}
2094
+
2095
+
'@babel/helper-string-parser@7.27.1': {}
2096
+
2097
+
'@babel/helper-validator-identifier@7.27.1': {}
2098
+
2099
+
'@babel/helper-validator-option@7.27.1': {}
2100
+
2101
+
'@babel/helpers@7.28.4':
2102
+
dependencies:
2103
+
'@babel/template': 7.27.2
2104
+
'@babel/types': 7.28.4
2105
+
2106
+
'@babel/parser@7.28.4':
2107
+
dependencies:
2108
+
'@babel/types': 7.28.4
2109
+
2110
+
'@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)':
2111
+
dependencies:
2112
+
'@babel/core': 7.28.4
2113
+
'@babel/helper-plugin-utils': 7.27.1
2114
+
2115
+
'@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)':
2116
+
dependencies:
2117
+
'@babel/core': 7.28.4
2118
+
'@babel/helper-plugin-utils': 7.27.1
2119
+
2120
+
'@babel/template@7.27.2':
2121
+
dependencies:
2122
+
'@babel/code-frame': 7.27.1
2123
+
'@babel/parser': 7.28.4
2124
+
'@babel/types': 7.28.4
2125
+
2126
+
'@babel/traverse@7.28.4':
2127
+
dependencies:
2128
+
'@babel/code-frame': 7.27.1
2129
+
'@babel/generator': 7.28.3
2130
+
'@babel/helper-globals': 7.28.0
2131
+
'@babel/parser': 7.28.4
2132
+
'@babel/template': 7.27.2
2133
+
'@babel/types': 7.28.4
2134
+
debug: 4.4.3
2135
+
transitivePeerDependencies:
2136
+
- supports-color
2137
+
2138
+
'@babel/types@7.28.4':
2139
+
dependencies:
2140
+
'@babel/helper-string-parser': 7.27.1
2141
+
'@babel/helper-validator-identifier': 7.27.1
2142
+
2143
+
'@cloudflare/kv-asset-handler@0.4.0':
2144
+
dependencies:
2145
+
mime: 3.0.0
2146
+
2147
+
'@cloudflare/unenv-preset@2.7.4(unenv@2.0.0-rc.21)(workerd@1.20250924.0)':
2148
+
dependencies:
2149
+
unenv: 2.0.0-rc.21
2150
+
optionalDependencies:
2151
+
workerd: 1.20250924.0
2152
+
2153
+
'@cloudflare/workerd-darwin-64@1.20250924.0':
2154
+
optional: true
2155
+
2156
+
'@cloudflare/workerd-darwin-arm64@1.20250924.0':
2157
+
optional: true
2158
+
2159
+
'@cloudflare/workerd-linux-64@1.20250924.0':
2160
+
optional: true
2161
+
2162
+
'@cloudflare/workerd-linux-arm64@1.20250924.0':
2163
+
optional: true
2164
+
2165
+
'@cloudflare/workerd-windows-64@1.20250924.0':
2166
+
optional: true
2167
+
2168
+
'@cspotcode/source-map-support@0.8.1':
2169
+
dependencies:
2170
+
'@jridgewell/trace-mapping': 0.3.9
2171
+
2172
+
'@emnapi/runtime@1.5.0':
2173
+
dependencies:
2174
+
tslib: 2.8.1
2175
+
optional: true
2176
+
2177
+
'@esbuild/aix-ppc64@0.25.10':
2178
+
optional: true
2179
+
2180
+
'@esbuild/aix-ppc64@0.25.4':
2181
+
optional: true
2182
+
2183
+
'@esbuild/android-arm64@0.25.10':
2184
+
optional: true
2185
+
2186
+
'@esbuild/android-arm64@0.25.4':
2187
+
optional: true
2188
+
2189
+
'@esbuild/android-arm@0.25.10':
2190
+
optional: true
2191
+
2192
+
'@esbuild/android-arm@0.25.4':
2193
+
optional: true
2194
+
2195
+
'@esbuild/android-x64@0.25.10':
2196
+
optional: true
2197
+
2198
+
'@esbuild/android-x64@0.25.4':
2199
+
optional: true
2200
+
2201
+
'@esbuild/darwin-arm64@0.25.10':
2202
+
optional: true
2203
+
2204
+
'@esbuild/darwin-arm64@0.25.4':
2205
+
optional: true
2206
+
2207
+
'@esbuild/darwin-x64@0.25.10':
2208
+
optional: true
2209
+
2210
+
'@esbuild/darwin-x64@0.25.4':
2211
+
optional: true
2212
+
2213
+
'@esbuild/freebsd-arm64@0.25.10':
2214
+
optional: true
2215
+
2216
+
'@esbuild/freebsd-arm64@0.25.4':
2217
+
optional: true
2218
+
2219
+
'@esbuild/freebsd-x64@0.25.10':
2220
+
optional: true
2221
+
2222
+
'@esbuild/freebsd-x64@0.25.4':
2223
+
optional: true
2224
+
2225
+
'@esbuild/linux-arm64@0.25.10':
2226
+
optional: true
2227
+
2228
+
'@esbuild/linux-arm64@0.25.4':
2229
+
optional: true
2230
+
2231
+
'@esbuild/linux-arm@0.25.10':
2232
+
optional: true
2233
+
2234
+
'@esbuild/linux-arm@0.25.4':
2235
+
optional: true
2236
+
2237
+
'@esbuild/linux-ia32@0.25.10':
2238
+
optional: true
2239
+
2240
+
'@esbuild/linux-ia32@0.25.4':
2241
+
optional: true
2242
+
2243
+
'@esbuild/linux-loong64@0.25.10':
2244
+
optional: true
2245
+
2246
+
'@esbuild/linux-loong64@0.25.4':
2247
+
optional: true
2248
+
2249
+
'@esbuild/linux-mips64el@0.25.10':
2250
+
optional: true
2251
+
2252
+
'@esbuild/linux-mips64el@0.25.4':
2253
+
optional: true
2254
+
2255
+
'@esbuild/linux-ppc64@0.25.10':
2256
+
optional: true
2257
+
2258
+
'@esbuild/linux-ppc64@0.25.4':
2259
+
optional: true
2260
+
2261
+
'@esbuild/linux-riscv64@0.25.10':
2262
+
optional: true
2263
+
2264
+
'@esbuild/linux-riscv64@0.25.4':
2265
+
optional: true
2266
+
2267
+
'@esbuild/linux-s390x@0.25.10':
2268
+
optional: true
2269
+
2270
+
'@esbuild/linux-s390x@0.25.4':
2271
+
optional: true
2272
+
2273
+
'@esbuild/linux-x64@0.25.10':
2274
+
optional: true
2275
+
2276
+
'@esbuild/linux-x64@0.25.4':
2277
+
optional: true
2278
+
2279
+
'@esbuild/netbsd-arm64@0.25.10':
2280
+
optional: true
2281
+
2282
+
'@esbuild/netbsd-arm64@0.25.4':
2283
+
optional: true
2284
+
2285
+
'@esbuild/netbsd-x64@0.25.10':
2286
+
optional: true
2287
+
2288
+
'@esbuild/netbsd-x64@0.25.4':
2289
+
optional: true
2290
+
2291
+
'@esbuild/openbsd-arm64@0.25.10':
2292
+
optional: true
2293
+
2294
+
'@esbuild/openbsd-arm64@0.25.4':
2295
+
optional: true
2296
+
2297
+
'@esbuild/openbsd-x64@0.25.10':
2298
+
optional: true
2299
+
2300
+
'@esbuild/openbsd-x64@0.25.4':
2301
+
optional: true
2302
+
2303
+
'@esbuild/openharmony-arm64@0.25.10':
2304
+
optional: true
2305
+
2306
+
'@esbuild/sunos-x64@0.25.10':
2307
+
optional: true
2308
+
2309
+
'@esbuild/sunos-x64@0.25.4':
2310
+
optional: true
2311
+
2312
+
'@esbuild/win32-arm64@0.25.10':
2313
+
optional: true
2314
+
2315
+
'@esbuild/win32-arm64@0.25.4':
2316
+
optional: true
2317
+
2318
+
'@esbuild/win32-ia32@0.25.10':
2319
+
optional: true
2320
+
2321
+
'@esbuild/win32-ia32@0.25.4':
2322
+
optional: true
2323
+
2324
+
'@esbuild/win32-x64@0.25.10':
2325
+
optional: true
2326
+
2327
+
'@esbuild/win32-x64@0.25.4':
2328
+
optional: true
2329
+
2330
+
'@fontsource-variable/dm-sans@5.2.8': {}
2331
+
2332
+
'@hono/node-server@1.19.1(hono@4.9.6)':
2333
+
dependencies:
2334
+
hono: 4.9.6
2335
+
2336
+
'@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@19.1.1))':
2337
+
dependencies:
2338
+
'@standard-schema/utils': 0.3.0
2339
+
react-hook-form: 7.63.0(react@19.1.1)
2340
+
2341
+
'@img/sharp-darwin-arm64@0.33.5':
2342
+
optionalDependencies:
2343
+
'@img/sharp-libvips-darwin-arm64': 1.0.4
2344
+
optional: true
2345
+
2346
+
'@img/sharp-darwin-x64@0.33.5':
2347
+
optionalDependencies:
2348
+
'@img/sharp-libvips-darwin-x64': 1.0.4
2349
+
optional: true
2350
+
2351
+
'@img/sharp-libvips-darwin-arm64@1.0.4':
2352
+
optional: true
2353
+
2354
+
'@img/sharp-libvips-darwin-x64@1.0.4':
2355
+
optional: true
2356
+
2357
+
'@img/sharp-libvips-linux-arm64@1.0.4':
2358
+
optional: true
2359
+
2360
+
'@img/sharp-libvips-linux-arm@1.0.5':
2361
+
optional: true
2362
+
2363
+
'@img/sharp-libvips-linux-s390x@1.0.4':
2364
+
optional: true
2365
+
2366
+
'@img/sharp-libvips-linux-x64@1.0.4':
2367
+
optional: true
2368
+
2369
+
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
2370
+
optional: true
2371
+
2372
+
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
2373
+
optional: true
2374
+
2375
+
'@img/sharp-linux-arm64@0.33.5':
2376
+
optionalDependencies:
2377
+
'@img/sharp-libvips-linux-arm64': 1.0.4
2378
+
optional: true
2379
+
2380
+
'@img/sharp-linux-arm@0.33.5':
2381
+
optionalDependencies:
2382
+
'@img/sharp-libvips-linux-arm': 1.0.5
2383
+
optional: true
2384
+
2385
+
'@img/sharp-linux-s390x@0.33.5':
2386
+
optionalDependencies:
2387
+
'@img/sharp-libvips-linux-s390x': 1.0.4
2388
+
optional: true
2389
+
2390
+
'@img/sharp-linux-x64@0.33.5':
2391
+
optionalDependencies:
2392
+
'@img/sharp-libvips-linux-x64': 1.0.4
2393
+
optional: true
2394
+
2395
+
'@img/sharp-linuxmusl-arm64@0.33.5':
2396
+
optionalDependencies:
2397
+
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4
2398
+
optional: true
2399
+
2400
+
'@img/sharp-linuxmusl-x64@0.33.5':
2401
+
optionalDependencies:
2402
+
'@img/sharp-libvips-linuxmusl-x64': 1.0.4
2403
+
optional: true
2404
+
2405
+
'@img/sharp-wasm32@0.33.5':
2406
+
dependencies:
2407
+
'@emnapi/runtime': 1.5.0
2408
+
optional: true
2409
+
2410
+
'@img/sharp-win32-ia32@0.33.5':
2411
+
optional: true
2412
+
2413
+
'@img/sharp-win32-x64@0.33.5':
2414
+
optional: true
2415
+
2416
+
'@isaacs/fs-minipass@4.0.1':
2417
+
dependencies:
2418
+
minipass: 7.1.2
2419
+
2420
+
'@jridgewell/gen-mapping@0.3.13':
2421
+
dependencies:
2422
+
'@jridgewell/sourcemap-codec': 1.5.5
2423
+
'@jridgewell/trace-mapping': 0.3.31
2424
+
2425
+
'@jridgewell/remapping@2.3.5':
2426
+
dependencies:
2427
+
'@jridgewell/gen-mapping': 0.3.13
2428
+
'@jridgewell/trace-mapping': 0.3.31
2429
+
2430
+
'@jridgewell/resolve-uri@3.1.2': {}
2431
+
2432
+
'@jridgewell/source-map@0.3.11':
2433
+
dependencies:
2434
+
'@jridgewell/gen-mapping': 0.3.13
2435
+
'@jridgewell/trace-mapping': 0.3.31
2436
+
2437
+
'@jridgewell/sourcemap-codec@1.5.5': {}
2438
+
2439
+
'@jridgewell/trace-mapping@0.3.31':
2440
+
dependencies:
2441
+
'@jridgewell/resolve-uri': 3.1.2
2442
+
'@jridgewell/sourcemap-codec': 1.5.5
2443
+
2444
+
'@jridgewell/trace-mapping@0.3.9':
2445
+
dependencies:
2446
+
'@jridgewell/resolve-uri': 3.1.2
2447
+
'@jridgewell/sourcemap-codec': 1.5.5
2448
+
2449
+
'@poppinss/colors@4.1.5':
2450
+
dependencies:
2451
+
kleur: 4.1.5
2452
+
2453
+
'@poppinss/dumper@0.6.4':
2454
+
dependencies:
2455
+
'@poppinss/colors': 4.1.5
2456
+
'@sindresorhus/is': 7.1.0
2457
+
supports-color: 10.2.2
2458
+
2459
+
'@poppinss/exception@1.2.2': {}
2460
+
2461
+
'@radix-ui/primitive@1.1.3': {}
2462
+
2463
+
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.12)(react@19.1.1)':
2464
+
dependencies:
2465
+
react: 19.1.1
2466
+
optionalDependencies:
2467
+
'@types/react': 19.1.12
2468
+
2469
+
'@radix-ui/react-context@1.1.2(@types/react@19.1.12)(react@19.1.1)':
2470
+
dependencies:
2471
+
react: 19.1.1
2472
+
optionalDependencies:
2473
+
'@types/react': 19.1.12
2474
+
2475
+
'@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2476
+
dependencies:
2477
+
'@radix-ui/primitive': 1.1.3
2478
+
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2479
+
'@radix-ui/react-context': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2480
+
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2481
+
'@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.12)(react@19.1.1)
2482
+
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2483
+
'@radix-ui/react-id': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2484
+
'@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2485
+
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2486
+
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2487
+
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1)
2488
+
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.12)(react@19.1.1)
2489
+
aria-hidden: 1.2.6
2490
+
react: 19.1.1
2491
+
react-dom: 19.1.1(react@19.1.1)
2492
+
react-remove-scroll: 2.7.1(@types/react@19.1.12)(react@19.1.1)
2493
+
optionalDependencies:
2494
+
'@types/react': 19.1.12
2495
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2496
+
2497
+
'@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2498
+
dependencies:
2499
+
'@radix-ui/primitive': 1.1.3
2500
+
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2501
+
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2502
+
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2503
+
'@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2504
+
react: 19.1.1
2505
+
react-dom: 19.1.1(react@19.1.1)
2506
+
optionalDependencies:
2507
+
'@types/react': 19.1.12
2508
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2509
+
2510
+
'@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.12)(react@19.1.1)':
2511
+
dependencies:
2512
+
react: 19.1.1
2513
+
optionalDependencies:
2514
+
'@types/react': 19.1.12
2515
+
2516
+
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2517
+
dependencies:
2518
+
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2519
+
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2520
+
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2521
+
react: 19.1.1
2522
+
react-dom: 19.1.1(react@19.1.1)
2523
+
optionalDependencies:
2524
+
'@types/react': 19.1.12
2525
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2526
+
2527
+
'@radix-ui/react-id@1.1.1(@types/react@19.1.12)(react@19.1.1)':
2528
+
dependencies:
2529
+
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2530
+
react: 19.1.1
2531
+
optionalDependencies:
2532
+
'@types/react': 19.1.12
2533
+
2534
+
'@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2535
+
dependencies:
2536
+
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2537
+
react: 19.1.1
2538
+
react-dom: 19.1.1(react@19.1.1)
2539
+
optionalDependencies:
2540
+
'@types/react': 19.1.12
2541
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2542
+
2543
+
'@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2544
+
dependencies:
2545
+
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
2546
+
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2547
+
react: 19.1.1
2548
+
react-dom: 19.1.1(react@19.1.1)
2549
+
optionalDependencies:
2550
+
'@types/react': 19.1.12
2551
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2552
+
2553
+
'@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2554
+
dependencies:
2555
+
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2556
+
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2557
+
react: 19.1.1
2558
+
react-dom: 19.1.1(react@19.1.1)
2559
+
optionalDependencies:
2560
+
'@types/react': 19.1.12
2561
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2562
+
2563
+
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.12))(@types/react@19.1.12)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
2564
+
dependencies:
2565
+
'@radix-ui/react-slot': 1.2.3(@types/react@19.1.12)(react@19.1.1)
2566
+
react: 19.1.1
2567
+
react-dom: 19.1.1(react@19.1.1)
2568
+
optionalDependencies:
2569
+
'@types/react': 19.1.12
2570
+
'@types/react-dom': 19.1.9(@types/react@19.1.12)
2571
+
2572
+
'@radix-ui/react-slot@1.2.3(@types/react@19.1.12)(react@19.1.1)':
2573
+
dependencies:
2574
+
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.12)(react@19.1.1)
2575
+
react: 19.1.1
2576
+
optionalDependencies:
2577
+
'@types/react': 19.1.12
2578
+
2579
+
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.12)(react@19.1.1)':
2580
+
dependencies:
2581
+
react: 19.1.1
2582
+
optionalDependencies:
2583
+
'@types/react': 19.1.12
2584
+
2585
+
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.12)(react@19.1.1)':
2586
+
dependencies:
2587
+
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.12)(react@19.1.1)
2588
+
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2589
+
react: 19.1.1
2590
+
optionalDependencies:
2591
+
'@types/react': 19.1.12
2592
+
2593
+
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.12)(react@19.1.1)':
2594
+
dependencies:
2595
+
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2596
+
react: 19.1.1
2597
+
optionalDependencies:
2598
+
'@types/react': 19.1.12
2599
+
2600
+
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.12)(react@19.1.1)':
2601
+
dependencies:
2602
+
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.12)(react@19.1.1)
2603
+
react: 19.1.1
2604
+
optionalDependencies:
2605
+
'@types/react': 19.1.12
2606
+
2607
+
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.12)(react@19.1.1)':
2608
+
dependencies:
2609
+
react: 19.1.1
2610
+
optionalDependencies:
2611
+
'@types/react': 19.1.12
2612
+
2613
+
'@remix-run/node-fetch-server@0.8.1': {}
2614
+
2615
+
'@rolldown/pluginutils@1.0.0-beta.34': {}
2616
+
2617
+
'@rollup/rollup-android-arm-eabi@4.50.2':
2618
+
optional: true
2619
+
2620
+
'@rollup/rollup-android-arm64@4.50.2':
2621
+
optional: true
2622
+
2623
+
'@rollup/rollup-darwin-arm64@4.50.2':
2624
+
optional: true
2625
+
2626
+
'@rollup/rollup-darwin-x64@4.50.2':
2627
+
optional: true
2628
+
2629
+
'@rollup/rollup-freebsd-arm64@4.50.2':
2630
+
optional: true
2631
+
2632
+
'@rollup/rollup-freebsd-x64@4.50.2':
2633
+
optional: true
2634
+
2635
+
'@rollup/rollup-linux-arm-gnueabihf@4.50.2':
2636
+
optional: true
2637
+
2638
+
'@rollup/rollup-linux-arm-musleabihf@4.50.2':
2639
+
optional: true
2640
+
2641
+
'@rollup/rollup-linux-arm64-gnu@4.50.2':
2642
+
optional: true
2643
+
2644
+
'@rollup/rollup-linux-arm64-musl@4.50.2':
2645
+
optional: true
2646
+
2647
+
'@rollup/rollup-linux-loong64-gnu@4.50.2':
2648
+
optional: true
2649
+
2650
+
'@rollup/rollup-linux-ppc64-gnu@4.50.2':
2651
+
optional: true
2652
+
2653
+
'@rollup/rollup-linux-riscv64-gnu@4.50.2':
2654
+
optional: true
2655
+
2656
+
'@rollup/rollup-linux-riscv64-musl@4.50.2':
2657
+
optional: true
2658
+
2659
+
'@rollup/rollup-linux-s390x-gnu@4.50.2':
2660
+
optional: true
2661
+
2662
+
'@rollup/rollup-linux-x64-gnu@4.50.2':
2663
+
optional: true
2664
+
2665
+
'@rollup/rollup-linux-x64-musl@4.50.2':
2666
+
optional: true
2667
+
2668
+
'@rollup/rollup-openharmony-arm64@4.50.2':
2669
+
optional: true
2670
+
2671
+
'@rollup/rollup-win32-arm64-msvc@4.50.2':
2672
+
optional: true
2673
+
2674
+
'@rollup/rollup-win32-ia32-msvc@4.50.2':
2675
+
optional: true
2676
+
2677
+
'@rollup/rollup-win32-x64-msvc@4.50.2':
2678
+
optional: true
2679
+
2680
+
'@sindresorhus/is@7.1.0': {}
2681
+
2682
+
'@speed-highlight/core@1.2.7': {}
2683
+
2684
+
'@standard-schema/utils@0.3.0': {}
2685
+
2686
+
'@swc/core-darwin-arm64@1.13.5':
2687
+
optional: true
2688
+
2689
+
'@swc/core-darwin-x64@1.13.5':
2690
+
optional: true
2691
+
2692
+
'@swc/core-linux-arm-gnueabihf@1.13.5':
2693
+
optional: true
2694
+
2695
+
'@swc/core-linux-arm64-gnu@1.13.5':
2696
+
optional: true
2697
+
2698
+
'@swc/core-linux-arm64-musl@1.13.5':
2699
+
optional: true
2700
+
2701
+
'@swc/core-linux-x64-gnu@1.13.5':
2702
+
optional: true
2703
+
2704
+
'@swc/core-linux-x64-musl@1.13.5':
2705
+
optional: true
2706
+
2707
+
'@swc/core-win32-arm64-msvc@1.13.5':
2708
+
optional: true
2709
+
2710
+
'@swc/core-win32-ia32-msvc@1.13.5':
2711
+
optional: true
2712
+
2713
+
'@swc/core-win32-x64-msvc@1.13.5':
2714
+
optional: true
2715
+
2716
+
'@swc/core@1.13.5':
2717
+
dependencies:
2718
+
'@swc/counter': 0.1.3
2719
+
'@swc/types': 0.1.25
2720
+
optionalDependencies:
2721
+
'@swc/core-darwin-arm64': 1.13.5
2722
+
'@swc/core-darwin-x64': 1.13.5
2723
+
'@swc/core-linux-arm-gnueabihf': 1.13.5
2724
+
'@swc/core-linux-arm64-gnu': 1.13.5
2725
+
'@swc/core-linux-arm64-musl': 1.13.5
2726
+
'@swc/core-linux-x64-gnu': 1.13.5
2727
+
'@swc/core-linux-x64-musl': 1.13.5
2728
+
'@swc/core-win32-arm64-msvc': 1.13.5
2729
+
'@swc/core-win32-ia32-msvc': 1.13.5
2730
+
'@swc/core-win32-x64-msvc': 1.13.5
2731
+
2732
+
'@swc/counter@0.1.3': {}
2733
+
2734
+
'@swc/types@0.1.25':
2735
+
dependencies:
2736
+
'@swc/counter': 0.1.3
2737
+
2738
+
'@tailwindcss/node@4.1.13':
2739
+
dependencies:
2740
+
'@jridgewell/remapping': 2.3.5
2741
+
enhanced-resolve: 5.18.3
2742
+
jiti: 2.5.1
2743
+
lightningcss: 1.30.1
2744
+
magic-string: 0.30.19
2745
+
source-map-js: 1.2.1
2746
+
tailwindcss: 4.1.13
2747
+
2748
+
'@tailwindcss/oxide-android-arm64@4.1.13':
2749
+
optional: true
2750
+
2751
+
'@tailwindcss/oxide-darwin-arm64@4.1.13':
2752
+
optional: true
2753
+
2754
+
'@tailwindcss/oxide-darwin-x64@4.1.13':
2755
+
optional: true
2756
+
2757
+
'@tailwindcss/oxide-freebsd-x64@4.1.13':
2758
+
optional: true
2759
+
2760
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
2761
+
optional: true
2762
+
2763
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
2764
+
optional: true
2765
+
2766
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.13':
2767
+
optional: true
2768
+
2769
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.13':
2770
+
optional: true
2771
+
2772
+
'@tailwindcss/oxide-linux-x64-musl@4.1.13':
2773
+
optional: true
2774
+
2775
+
'@tailwindcss/oxide-wasm32-wasi@4.1.13':
2776
+
optional: true
2777
+
2778
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
2779
+
optional: true
2780
+
2781
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.13':
2782
+
optional: true
2783
+
2784
+
'@tailwindcss/oxide@4.1.13':
2785
+
dependencies:
2786
+
detect-libc: 2.1.0
2787
+
tar: 7.4.3
2788
+
optionalDependencies:
2789
+
'@tailwindcss/oxide-android-arm64': 4.1.13
2790
+
'@tailwindcss/oxide-darwin-arm64': 4.1.13
2791
+
'@tailwindcss/oxide-darwin-x64': 4.1.13
2792
+
'@tailwindcss/oxide-freebsd-x64': 4.1.13
2793
+
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13
2794
+
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.13
2795
+
'@tailwindcss/oxide-linux-arm64-musl': 4.1.13
2796
+
'@tailwindcss/oxide-linux-x64-gnu': 4.1.13
2797
+
'@tailwindcss/oxide-linux-x64-musl': 4.1.13
2798
+
'@tailwindcss/oxide-wasm32-wasi': 4.1.13
2799
+
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.13
2800
+
'@tailwindcss/oxide-win32-x64-msvc': 4.1.13
2801
+
2802
+
'@tailwindcss/vite@4.1.13(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))':
2803
+
dependencies:
2804
+
'@tailwindcss/node': 4.1.13
2805
+
'@tailwindcss/oxide': 4.1.13
2806
+
tailwindcss: 4.1.13
2807
+
vite: 7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)
2808
+
2809
+
'@types/babel__core@7.20.5':
2810
+
dependencies:
2811
+
'@babel/parser': 7.28.4
2812
+
'@babel/types': 7.28.4
2813
+
'@types/babel__generator': 7.27.0
2814
+
'@types/babel__template': 7.4.4
2815
+
'@types/babel__traverse': 7.28.0
2816
+
2817
+
'@types/babel__generator@7.27.0':
2818
+
dependencies:
2819
+
'@babel/types': 7.28.4
2820
+
2821
+
'@types/babel__template@7.4.4':
2822
+
dependencies:
2823
+
'@babel/parser': 7.28.4
2824
+
'@babel/types': 7.28.4
2825
+
2826
+
'@types/babel__traverse@7.28.0':
2827
+
dependencies:
2828
+
'@babel/types': 7.28.4
2829
+
2830
+
'@types/eslint-scope@3.7.7':
2831
+
dependencies:
2832
+
'@types/eslint': 9.6.1
2833
+
'@types/estree': 1.0.8
2834
+
2835
+
'@types/eslint@9.6.1':
2836
+
dependencies:
2837
+
'@types/estree': 1.0.8
2838
+
'@types/json-schema': 7.0.15
2839
+
2840
+
'@types/estree@1.0.8': {}
2841
+
2842
+
'@types/json-schema@7.0.15': {}
2843
+
2844
+
'@types/node@24.5.2':
2845
+
dependencies:
2846
+
undici-types: 7.12.0
2847
+
2848
+
'@types/react-dom@19.1.9(@types/react@19.1.12)':
2849
+
dependencies:
2850
+
'@types/react': 19.1.12
2851
+
2852
+
'@types/react@19.1.12':
2853
+
dependencies:
2854
+
csstype: 3.1.3
2855
+
2856
+
'@vitejs/plugin-react@5.0.2(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))':
2857
+
dependencies:
2858
+
'@babel/core': 7.28.4
2859
+
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4)
2860
+
'@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4)
2861
+
'@rolldown/pluginutils': 1.0.0-beta.34
2862
+
'@types/babel__core': 7.20.5
2863
+
react-refresh: 0.17.0
2864
+
vite: 7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)
2865
+
transitivePeerDependencies:
2866
+
- supports-color
2867
+
2868
+
'@vitejs/plugin-rsc@0.4.29(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))':
2869
+
dependencies:
2870
+
'@remix-run/node-fetch-server': 0.8.1
2871
+
es-module-lexer: 1.7.0
2872
+
estree-walker: 3.0.3
2873
+
magic-string: 0.30.19
2874
+
periscopic: 4.0.2
2875
+
react: 19.1.1
2876
+
react-dom: 19.1.1(react@19.1.1)
2877
+
turbo-stream: 3.1.0
2878
+
vite: 7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)
2879
+
vitefu: 1.1.1(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))
2880
+
2881
+
'@webassemblyjs/ast@1.14.1':
2882
+
dependencies:
2883
+
'@webassemblyjs/helper-numbers': 1.13.2
2884
+
'@webassemblyjs/helper-wasm-bytecode': 1.13.2
2885
+
2886
+
'@webassemblyjs/floating-point-hex-parser@1.13.2': {}
2887
+
2888
+
'@webassemblyjs/helper-api-error@1.13.2': {}
2889
+
2890
+
'@webassemblyjs/helper-buffer@1.14.1': {}
2891
+
2892
+
'@webassemblyjs/helper-numbers@1.13.2':
2893
+
dependencies:
2894
+
'@webassemblyjs/floating-point-hex-parser': 1.13.2
2895
+
'@webassemblyjs/helper-api-error': 1.13.2
2896
+
'@xtuc/long': 4.2.2
2897
+
2898
+
'@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
2899
+
2900
+
'@webassemblyjs/helper-wasm-section@1.14.1':
2901
+
dependencies:
2902
+
'@webassemblyjs/ast': 1.14.1
2903
+
'@webassemblyjs/helper-buffer': 1.14.1
2904
+
'@webassemblyjs/helper-wasm-bytecode': 1.13.2
2905
+
'@webassemblyjs/wasm-gen': 1.14.1
2906
+
2907
+
'@webassemblyjs/ieee754@1.13.2':
2908
+
dependencies:
2909
+
'@xtuc/ieee754': 1.2.0
2910
+
2911
+
'@webassemblyjs/leb128@1.13.2':
2912
+
dependencies:
2913
+
'@xtuc/long': 4.2.2
2914
+
2915
+
'@webassemblyjs/utf8@1.13.2': {}
2916
+
2917
+
'@webassemblyjs/wasm-edit@1.14.1':
2918
+
dependencies:
2919
+
'@webassemblyjs/ast': 1.14.1
2920
+
'@webassemblyjs/helper-buffer': 1.14.1
2921
+
'@webassemblyjs/helper-wasm-bytecode': 1.13.2
2922
+
'@webassemblyjs/helper-wasm-section': 1.14.1
2923
+
'@webassemblyjs/wasm-gen': 1.14.1
2924
+
'@webassemblyjs/wasm-opt': 1.14.1
2925
+
'@webassemblyjs/wasm-parser': 1.14.1
2926
+
'@webassemblyjs/wast-printer': 1.14.1
2927
+
2928
+
'@webassemblyjs/wasm-gen@1.14.1':
2929
+
dependencies:
2930
+
'@webassemblyjs/ast': 1.14.1
2931
+
'@webassemblyjs/helper-wasm-bytecode': 1.13.2
2932
+
'@webassemblyjs/ieee754': 1.13.2
2933
+
'@webassemblyjs/leb128': 1.13.2
2934
+
'@webassemblyjs/utf8': 1.13.2
2935
+
2936
+
'@webassemblyjs/wasm-opt@1.14.1':
2937
+
dependencies:
2938
+
'@webassemblyjs/ast': 1.14.1
2939
+
'@webassemblyjs/helper-buffer': 1.14.1
2940
+
'@webassemblyjs/wasm-gen': 1.14.1
2941
+
'@webassemblyjs/wasm-parser': 1.14.1
2942
+
2943
+
'@webassemblyjs/wasm-parser@1.14.1':
2944
+
dependencies:
2945
+
'@webassemblyjs/ast': 1.14.1
2946
+
'@webassemblyjs/helper-api-error': 1.13.2
2947
+
'@webassemblyjs/helper-wasm-bytecode': 1.13.2
2948
+
'@webassemblyjs/ieee754': 1.13.2
2949
+
'@webassemblyjs/leb128': 1.13.2
2950
+
'@webassemblyjs/utf8': 1.13.2
2951
+
2952
+
'@webassemblyjs/wast-printer@1.14.1':
2953
+
dependencies:
2954
+
'@webassemblyjs/ast': 1.14.1
2955
+
'@xtuc/long': 4.2.2
2956
+
2957
+
'@xtuc/ieee754@1.2.0': {}
2958
+
2959
+
'@xtuc/long@4.2.2': {}
2960
+
2961
+
acorn-import-phases@1.0.4(acorn@8.15.0):
2962
+
dependencies:
2963
+
acorn: 8.15.0
2964
+
2965
+
acorn-loose@8.5.2:
2966
+
dependencies:
2967
+
acorn: 8.15.0
2968
+
2969
+
acorn-walk@8.3.2: {}
2970
+
2971
+
acorn@8.14.0: {}
2972
+
2973
+
acorn@8.15.0: {}
2974
+
2975
+
ajv-formats@2.1.1(ajv@8.17.1):
2976
+
optionalDependencies:
2977
+
ajv: 8.17.1
2978
+
2979
+
ajv-keywords@5.1.0(ajv@8.17.1):
2980
+
dependencies:
2981
+
ajv: 8.17.1
2982
+
fast-deep-equal: 3.1.3
2983
+
2984
+
ajv@8.17.1:
2985
+
dependencies:
2986
+
fast-deep-equal: 3.1.3
2987
+
fast-uri: 3.1.0
2988
+
json-schema-traverse: 1.0.0
2989
+
require-from-string: 2.0.2
2990
+
2991
+
aria-hidden@1.2.6:
2992
+
dependencies:
2993
+
tslib: 2.8.1
2994
+
2995
+
baseline-browser-mapping@2.8.5: {}
2996
+
2997
+
blake3-wasm@2.1.5: {}
2998
+
2999
+
browserslist@4.26.2:
3000
+
dependencies:
3001
+
baseline-browser-mapping: 2.8.5
3002
+
caniuse-lite: 1.0.30001743
3003
+
electron-to-chromium: 1.5.221
3004
+
node-releases: 2.0.21
3005
+
update-browserslist-db: 1.1.3(browserslist@4.26.2)
3006
+
3007
+
buffer-from@1.1.2: {}
3008
+
3009
+
caniuse-lite@1.0.30001743: {}
3010
+
3011
+
chownr@3.0.0: {}
3012
+
3013
+
chrome-trace-event@1.0.4: {}
3014
+
3015
+
class-variance-authority@0.7.1:
3016
+
dependencies:
3017
+
clsx: 2.1.1
3018
+
3019
+
clsx@2.1.1: {}
3020
+
3021
+
color-convert@2.0.1:
3022
+
dependencies:
3023
+
color-name: 1.1.4
3024
+
3025
+
color-name@1.1.4: {}
3026
+
3027
+
color-string@1.9.1:
3028
+
dependencies:
3029
+
color-name: 1.1.4
3030
+
simple-swizzle: 0.2.4
3031
+
3032
+
color@4.2.3:
3033
+
dependencies:
3034
+
color-convert: 2.0.1
3035
+
color-string: 1.9.1
3036
+
3037
+
commander@2.20.3: {}
3038
+
3039
+
convert-source-map@2.0.0: {}
3040
+
3041
+
cookie@1.0.2: {}
3042
+
3043
+
csstype@3.1.3: {}
3044
+
3045
+
debug@4.4.3:
3046
+
dependencies:
3047
+
ms: 2.1.3
3048
+
3049
+
defu@6.1.4: {}
3050
+
3051
+
detect-libc@2.1.0: {}
3052
+
3053
+
detect-node-es@1.1.0: {}
3054
+
3055
+
dotenv@17.2.2: {}
3056
+
3057
+
electron-to-chromium@1.5.221: {}
3058
+
3059
+
enhanced-resolve@5.18.3:
3060
+
dependencies:
3061
+
graceful-fs: 4.2.11
3062
+
tapable: 2.2.3
3063
+
3064
+
error-stack-parser-es@1.0.5: {}
3065
+
3066
+
es-module-lexer@1.7.0: {}
3067
+
3068
+
esbuild@0.25.10:
3069
+
optionalDependencies:
3070
+
'@esbuild/aix-ppc64': 0.25.10
3071
+
'@esbuild/android-arm': 0.25.10
3072
+
'@esbuild/android-arm64': 0.25.10
3073
+
'@esbuild/android-x64': 0.25.10
3074
+
'@esbuild/darwin-arm64': 0.25.10
3075
+
'@esbuild/darwin-x64': 0.25.10
3076
+
'@esbuild/freebsd-arm64': 0.25.10
3077
+
'@esbuild/freebsd-x64': 0.25.10
3078
+
'@esbuild/linux-arm': 0.25.10
3079
+
'@esbuild/linux-arm64': 0.25.10
3080
+
'@esbuild/linux-ia32': 0.25.10
3081
+
'@esbuild/linux-loong64': 0.25.10
3082
+
'@esbuild/linux-mips64el': 0.25.10
3083
+
'@esbuild/linux-ppc64': 0.25.10
3084
+
'@esbuild/linux-riscv64': 0.25.10
3085
+
'@esbuild/linux-s390x': 0.25.10
3086
+
'@esbuild/linux-x64': 0.25.10
3087
+
'@esbuild/netbsd-arm64': 0.25.10
3088
+
'@esbuild/netbsd-x64': 0.25.10
3089
+
'@esbuild/openbsd-arm64': 0.25.10
3090
+
'@esbuild/openbsd-x64': 0.25.10
3091
+
'@esbuild/openharmony-arm64': 0.25.10
3092
+
'@esbuild/sunos-x64': 0.25.10
3093
+
'@esbuild/win32-arm64': 0.25.10
3094
+
'@esbuild/win32-ia32': 0.25.10
3095
+
'@esbuild/win32-x64': 0.25.10
3096
+
3097
+
esbuild@0.25.4:
3098
+
optionalDependencies:
3099
+
'@esbuild/aix-ppc64': 0.25.4
3100
+
'@esbuild/android-arm': 0.25.4
3101
+
'@esbuild/android-arm64': 0.25.4
3102
+
'@esbuild/android-x64': 0.25.4
3103
+
'@esbuild/darwin-arm64': 0.25.4
3104
+
'@esbuild/darwin-x64': 0.25.4
3105
+
'@esbuild/freebsd-arm64': 0.25.4
3106
+
'@esbuild/freebsd-x64': 0.25.4
3107
+
'@esbuild/linux-arm': 0.25.4
3108
+
'@esbuild/linux-arm64': 0.25.4
3109
+
'@esbuild/linux-ia32': 0.25.4
3110
+
'@esbuild/linux-loong64': 0.25.4
3111
+
'@esbuild/linux-mips64el': 0.25.4
3112
+
'@esbuild/linux-ppc64': 0.25.4
3113
+
'@esbuild/linux-riscv64': 0.25.4
3114
+
'@esbuild/linux-s390x': 0.25.4
3115
+
'@esbuild/linux-x64': 0.25.4
3116
+
'@esbuild/netbsd-arm64': 0.25.4
3117
+
'@esbuild/netbsd-x64': 0.25.4
3118
+
'@esbuild/openbsd-arm64': 0.25.4
3119
+
'@esbuild/openbsd-x64': 0.25.4
3120
+
'@esbuild/sunos-x64': 0.25.4
3121
+
'@esbuild/win32-arm64': 0.25.4
3122
+
'@esbuild/win32-ia32': 0.25.4
3123
+
'@esbuild/win32-x64': 0.25.4
3124
+
3125
+
escalade@3.2.0: {}
3126
+
3127
+
eslint-scope@5.1.1:
3128
+
dependencies:
3129
+
esrecurse: 4.3.0
3130
+
estraverse: 4.3.0
3131
+
3132
+
esrecurse@4.3.0:
3133
+
dependencies:
3134
+
estraverse: 5.3.0
3135
+
3136
+
estraverse@4.3.0: {}
3137
+
3138
+
estraverse@5.3.0: {}
3139
+
3140
+
estree-walker@3.0.3:
3141
+
dependencies:
3142
+
'@types/estree': 1.0.8
3143
+
3144
+
events@3.3.0: {}
3145
+
3146
+
exit-hook@2.2.1: {}
3147
+
3148
+
exsolve@1.0.7: {}
3149
+
3150
+
fast-deep-equal@3.1.3: {}
3151
+
3152
+
fast-uri@3.1.0: {}
3153
+
3154
+
fdir@6.5.0(picomatch@4.0.3):
3155
+
optionalDependencies:
3156
+
picomatch: 4.0.3
3157
+
3158
+
fsevents@2.3.3:
3159
+
optional: true
3160
+
3161
+
gensync@1.0.0-beta.2: {}
3162
+
3163
+
get-nonce@1.0.1: {}
3164
+
3165
+
glob-to-regexp@0.4.1: {}
3166
+
3167
+
graceful-fs@4.2.11: {}
3168
+
3169
+
has-flag@4.0.0: {}
3170
+
3171
+
hono@4.9.6: {}
3172
+
3173
+
is-arrayish@0.3.4: {}
3174
+
3175
+
is-reference@3.0.3:
3176
+
dependencies:
3177
+
'@types/estree': 1.0.8
3178
+
3179
+
jest-worker@27.5.1:
3180
+
dependencies:
3181
+
'@types/node': 24.5.2
3182
+
merge-stream: 2.0.0
3183
+
supports-color: 8.1.1
3184
+
3185
+
jiti@2.5.1: {}
3186
+
3187
+
jotai@2.14.0(@babel/core@7.28.4)(@babel/template@7.27.2)(@types/react@19.1.12)(react@19.1.1):
3188
+
optionalDependencies:
3189
+
'@babel/core': 7.28.4
3190
+
'@babel/template': 7.27.2
3191
+
'@types/react': 19.1.12
3192
+
react: 19.1.1
3193
+
3194
+
js-tokens@4.0.0: {}
3195
+
3196
+
jsesc@3.1.0: {}
3197
+
3198
+
json-parse-even-better-errors@2.3.1: {}
3199
+
3200
+
json-schema-traverse@1.0.0: {}
3201
+
3202
+
json5@2.2.3: {}
3203
+
3204
+
kleur@4.1.5: {}
3205
+
3206
+
lightningcss-darwin-arm64@1.30.1:
3207
+
optional: true
3208
+
3209
+
lightningcss-darwin-x64@1.30.1:
3210
+
optional: true
3211
+
3212
+
lightningcss-freebsd-x64@1.30.1:
3213
+
optional: true
3214
+
3215
+
lightningcss-linux-arm-gnueabihf@1.30.1:
3216
+
optional: true
3217
+
3218
+
lightningcss-linux-arm64-gnu@1.30.1:
3219
+
optional: true
3220
+
3221
+
lightningcss-linux-arm64-musl@1.30.1:
3222
+
optional: true
3223
+
3224
+
lightningcss-linux-x64-gnu@1.30.1:
3225
+
optional: true
3226
+
3227
+
lightningcss-linux-x64-musl@1.30.1:
3228
+
optional: true
3229
+
3230
+
lightningcss-win32-arm64-msvc@1.30.1:
3231
+
optional: true
3232
+
3233
+
lightningcss-win32-x64-msvc@1.30.1:
3234
+
optional: true
3235
+
3236
+
lightningcss@1.30.1:
3237
+
dependencies:
3238
+
detect-libc: 2.1.0
3239
+
optionalDependencies:
3240
+
lightningcss-darwin-arm64: 1.30.1
3241
+
lightningcss-darwin-x64: 1.30.1
3242
+
lightningcss-freebsd-x64: 1.30.1
3243
+
lightningcss-linux-arm-gnueabihf: 1.30.1
3244
+
lightningcss-linux-arm64-gnu: 1.30.1
3245
+
lightningcss-linux-arm64-musl: 1.30.1
3246
+
lightningcss-linux-x64-gnu: 1.30.1
3247
+
lightningcss-linux-x64-musl: 1.30.1
3248
+
lightningcss-win32-arm64-msvc: 1.30.1
3249
+
lightningcss-win32-x64-msvc: 1.30.1
3250
+
3251
+
loader-runner@4.3.0: {}
3252
+
3253
+
lru-cache@5.1.1:
3254
+
dependencies:
3255
+
yallist: 3.1.1
3256
+
3257
+
lucide-react@0.544.0(react@19.1.1):
3258
+
dependencies:
3259
+
react: 19.1.1
3260
+
3261
+
magic-string@0.30.19:
3262
+
dependencies:
3263
+
'@jridgewell/sourcemap-codec': 1.5.5
3264
+
3265
+
merge-stream@2.0.0: {}
3266
+
3267
+
mime-db@1.52.0: {}
3268
+
3269
+
mime-types@2.1.35:
3270
+
dependencies:
3271
+
mime-db: 1.52.0
3272
+
3273
+
mime@3.0.0: {}
3274
+
3275
+
miniflare@4.20250924.0:
3276
+
dependencies:
3277
+
'@cspotcode/source-map-support': 0.8.1
3278
+
acorn: 8.14.0
3279
+
acorn-walk: 8.3.2
3280
+
exit-hook: 2.2.1
3281
+
glob-to-regexp: 0.4.1
3282
+
sharp: 0.33.5
3283
+
stoppable: 1.1.0
3284
+
undici: 7.14.0
3285
+
workerd: 1.20250924.0
3286
+
ws: 8.18.0
3287
+
youch: 4.1.0-beta.10
3288
+
zod: 3.22.3
3289
+
transitivePeerDependencies:
3290
+
- bufferutil
3291
+
- utf-8-validate
3292
+
3293
+
minipass@7.1.2: {}
3294
+
3295
+
minizlib@3.0.2:
3296
+
dependencies:
3297
+
minipass: 7.1.2
3298
+
3299
+
mkdirp@3.0.1: {}
3300
+
3301
+
ms@2.1.3: {}
3302
+
3303
+
nanoid@3.3.11: {}
3304
+
3305
+
neo-async@2.6.2: {}
3306
+
3307
+
node-releases@2.0.21: {}
3308
+
3309
+
ohash@2.0.11: {}
3310
+
3311
+
path-to-regexp@6.3.0: {}
3312
+
3313
+
pathe@2.0.3: {}
3314
+
3315
+
periscopic@4.0.2:
3316
+
dependencies:
3317
+
'@types/estree': 1.0.8
3318
+
is-reference: 3.0.3
3319
+
zimmerframe: 1.1.4
3320
+
3321
+
picocolors@1.1.1: {}
3322
+
3323
+
picomatch@4.0.3: {}
3324
+
3325
+
postcss@8.5.6:
3326
+
dependencies:
3327
+
nanoid: 3.3.11
3328
+
picocolors: 1.1.1
3329
+
source-map-js: 1.2.1
3330
+
3331
+
randombytes@2.1.0:
3332
+
dependencies:
3333
+
safe-buffer: 5.2.1
3334
+
3335
+
react-confetti@6.4.0(react@19.1.1):
3336
+
dependencies:
3337
+
react: 19.1.1
3338
+
tween-functions: 1.2.0
3339
+
3340
+
react-dom@19.1.1(react@19.1.1):
3341
+
dependencies:
3342
+
react: 19.1.1
3343
+
scheduler: 0.26.0
3344
+
3345
+
react-hook-form@7.63.0(react@19.1.1):
3346
+
dependencies:
3347
+
react: 19.1.1
3348
+
3349
+
react-refresh@0.17.0: {}
3350
+
3351
+
react-remove-scroll-bar@2.3.8(@types/react@19.1.12)(react@19.1.1):
3352
+
dependencies:
3353
+
react: 19.1.1
3354
+
react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1)
3355
+
tslib: 2.8.1
3356
+
optionalDependencies:
3357
+
'@types/react': 19.1.12
3358
+
3359
+
react-remove-scroll@2.7.1(@types/react@19.1.12)(react@19.1.1):
3360
+
dependencies:
3361
+
react: 19.1.1
3362
+
react-remove-scroll-bar: 2.3.8(@types/react@19.1.12)(react@19.1.1)
3363
+
react-style-singleton: 2.2.3(@types/react@19.1.12)(react@19.1.1)
3364
+
tslib: 2.8.1
3365
+
use-callback-ref: 1.3.3(@types/react@19.1.12)(react@19.1.1)
3366
+
use-sidecar: 1.1.3(@types/react@19.1.12)(react@19.1.1)
3367
+
optionalDependencies:
3368
+
'@types/react': 19.1.12
3369
+
3370
+
react-server-dom-webpack@19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(webpack@5.101.3):
3371
+
dependencies:
3372
+
acorn-loose: 8.5.2
3373
+
neo-async: 2.6.2
3374
+
react: 19.1.1
3375
+
react-dom: 19.1.1(react@19.1.1)
3376
+
webpack: 5.101.3
3377
+
webpack-sources: 3.3.3
3378
+
3379
+
react-style-singleton@2.2.3(@types/react@19.1.12)(react@19.1.1):
3380
+
dependencies:
3381
+
get-nonce: 1.0.1
3382
+
react: 19.1.1
3383
+
tslib: 2.8.1
3384
+
optionalDependencies:
3385
+
'@types/react': 19.1.12
3386
+
3387
+
react@19.1.1: {}
3388
+
3389
+
require-from-string@2.0.2: {}
3390
+
3391
+
rollup@4.50.2:
3392
+
dependencies:
3393
+
'@types/estree': 1.0.8
3394
+
optionalDependencies:
3395
+
'@rollup/rollup-android-arm-eabi': 4.50.2
3396
+
'@rollup/rollup-android-arm64': 4.50.2
3397
+
'@rollup/rollup-darwin-arm64': 4.50.2
3398
+
'@rollup/rollup-darwin-x64': 4.50.2
3399
+
'@rollup/rollup-freebsd-arm64': 4.50.2
3400
+
'@rollup/rollup-freebsd-x64': 4.50.2
3401
+
'@rollup/rollup-linux-arm-gnueabihf': 4.50.2
3402
+
'@rollup/rollup-linux-arm-musleabihf': 4.50.2
3403
+
'@rollup/rollup-linux-arm64-gnu': 4.50.2
3404
+
'@rollup/rollup-linux-arm64-musl': 4.50.2
3405
+
'@rollup/rollup-linux-loong64-gnu': 4.50.2
3406
+
'@rollup/rollup-linux-ppc64-gnu': 4.50.2
3407
+
'@rollup/rollup-linux-riscv64-gnu': 4.50.2
3408
+
'@rollup/rollup-linux-riscv64-musl': 4.50.2
3409
+
'@rollup/rollup-linux-s390x-gnu': 4.50.2
3410
+
'@rollup/rollup-linux-x64-gnu': 4.50.2
3411
+
'@rollup/rollup-linux-x64-musl': 4.50.2
3412
+
'@rollup/rollup-openharmony-arm64': 4.50.2
3413
+
'@rollup/rollup-win32-arm64-msvc': 4.50.2
3414
+
'@rollup/rollup-win32-ia32-msvc': 4.50.2
3415
+
'@rollup/rollup-win32-x64-msvc': 4.50.2
3416
+
fsevents: 2.3.3
3417
+
3418
+
rsc-html-stream@0.0.7: {}
3419
+
3420
+
safe-buffer@5.2.1: {}
3421
+
3422
+
scheduler@0.26.0: {}
3423
+
3424
+
schema-utils@4.3.2:
3425
+
dependencies:
3426
+
'@types/json-schema': 7.0.15
3427
+
ajv: 8.17.1
3428
+
ajv-formats: 2.1.1(ajv@8.17.1)
3429
+
ajv-keywords: 5.1.0(ajv@8.17.1)
3430
+
3431
+
semver@6.3.1: {}
3432
+
3433
+
semver@7.7.2: {}
3434
+
3435
+
serialize-javascript@6.0.2:
3436
+
dependencies:
3437
+
randombytes: 2.1.0
3438
+
3439
+
sharp@0.33.5:
3440
+
dependencies:
3441
+
color: 4.2.3
3442
+
detect-libc: 2.1.0
3443
+
semver: 7.7.2
3444
+
optionalDependencies:
3445
+
'@img/sharp-darwin-arm64': 0.33.5
3446
+
'@img/sharp-darwin-x64': 0.33.5
3447
+
'@img/sharp-libvips-darwin-arm64': 1.0.4
3448
+
'@img/sharp-libvips-darwin-x64': 1.0.4
3449
+
'@img/sharp-libvips-linux-arm': 1.0.5
3450
+
'@img/sharp-libvips-linux-arm64': 1.0.4
3451
+
'@img/sharp-libvips-linux-s390x': 1.0.4
3452
+
'@img/sharp-libvips-linux-x64': 1.0.4
3453
+
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4
3454
+
'@img/sharp-libvips-linuxmusl-x64': 1.0.4
3455
+
'@img/sharp-linux-arm': 0.33.5
3456
+
'@img/sharp-linux-arm64': 0.33.5
3457
+
'@img/sharp-linux-s390x': 0.33.5
3458
+
'@img/sharp-linux-x64': 0.33.5
3459
+
'@img/sharp-linuxmusl-arm64': 0.33.5
3460
+
'@img/sharp-linuxmusl-x64': 0.33.5
3461
+
'@img/sharp-wasm32': 0.33.5
3462
+
'@img/sharp-win32-ia32': 0.33.5
3463
+
'@img/sharp-win32-x64': 0.33.5
3464
+
3465
+
simple-swizzle@0.2.4:
3466
+
dependencies:
3467
+
is-arrayish: 0.3.4
3468
+
3469
+
source-map-js@1.2.1: {}
3470
+
3471
+
source-map-support@0.5.21:
3472
+
dependencies:
3473
+
buffer-from: 1.1.2
3474
+
source-map: 0.6.1
3475
+
3476
+
source-map@0.6.1: {}
3477
+
3478
+
stoppable@1.1.0: {}
3479
+
3480
+
supports-color@10.2.2: {}
3481
+
3482
+
supports-color@8.1.1:
3483
+
dependencies:
3484
+
has-flag: 4.0.0
3485
+
3486
+
tailwind-merge@3.3.1: {}
3487
+
3488
+
tailwindcss@4.1.13: {}
3489
+
3490
+
tapable@2.2.3: {}
3491
+
3492
+
tar@7.4.3:
3493
+
dependencies:
3494
+
'@isaacs/fs-minipass': 4.0.1
3495
+
chownr: 3.0.0
3496
+
minipass: 7.1.2
3497
+
minizlib: 3.0.2
3498
+
mkdirp: 3.0.1
3499
+
yallist: 5.0.0
3500
+
3501
+
terser-webpack-plugin@5.3.14(webpack@5.101.3):
3502
+
dependencies:
3503
+
'@jridgewell/trace-mapping': 0.3.31
3504
+
jest-worker: 27.5.1
3505
+
schema-utils: 4.3.2
3506
+
serialize-javascript: 6.0.2
3507
+
terser: 5.44.0
3508
+
webpack: 5.101.3
3509
+
3510
+
terser@5.44.0:
3511
+
dependencies:
3512
+
'@jridgewell/source-map': 0.3.11
3513
+
acorn: 8.15.0
3514
+
commander: 2.20.3
3515
+
source-map-support: 0.5.21
3516
+
3517
+
tinyglobby@0.2.15:
3518
+
dependencies:
3519
+
fdir: 6.5.0(picomatch@4.0.3)
3520
+
picomatch: 4.0.3
3521
+
3522
+
tslib@2.8.1: {}
3523
+
3524
+
turbo-stream@3.1.0: {}
3525
+
3526
+
tw-animate-css@1.4.0: {}
3527
+
3528
+
tween-functions@1.2.0: {}
3529
+
3530
+
typescript@5.9.2: {}
3531
+
3532
+
ufo@1.6.1: {}
3533
+
3534
+
undici-types@7.12.0: {}
3535
+
3536
+
undici@7.14.0: {}
3537
+
3538
+
unenv@2.0.0-rc.21:
3539
+
dependencies:
3540
+
defu: 6.1.4
3541
+
exsolve: 1.0.7
3542
+
ohash: 2.0.11
3543
+
pathe: 2.0.3
3544
+
ufo: 1.6.1
3545
+
3546
+
update-browserslist-db@1.1.3(browserslist@4.26.2):
3547
+
dependencies:
3548
+
browserslist: 4.26.2
3549
+
escalade: 3.2.0
3550
+
picocolors: 1.1.1
3551
+
3552
+
use-callback-ref@1.3.3(@types/react@19.1.12)(react@19.1.1):
3553
+
dependencies:
3554
+
react: 19.1.1
3555
+
tslib: 2.8.1
3556
+
optionalDependencies:
3557
+
'@types/react': 19.1.12
3558
+
3559
+
use-sidecar@1.1.3(@types/react@19.1.12)(react@19.1.1):
3560
+
dependencies:
3561
+
detect-node-es: 1.1.0
3562
+
react: 19.1.1
3563
+
tslib: 2.8.1
3564
+
optionalDependencies:
3565
+
'@types/react': 19.1.12
3566
+
3567
+
vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0):
3568
+
dependencies:
3569
+
esbuild: 0.25.10
3570
+
fdir: 6.5.0(picomatch@4.0.3)
3571
+
picomatch: 4.0.3
3572
+
postcss: 8.5.6
3573
+
rollup: 4.50.2
3574
+
tinyglobby: 0.2.15
3575
+
optionalDependencies:
3576
+
'@types/node': 24.5.2
3577
+
fsevents: 2.3.3
3578
+
jiti: 2.5.1
3579
+
lightningcss: 1.30.1
3580
+
terser: 5.44.0
3581
+
3582
+
vitefu@1.1.1(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)):
3583
+
optionalDependencies:
3584
+
vite: 7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)
3585
+
3586
+
waku@0.26.1(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(react-dom@19.1.1(react@19.1.1))(react-server-dom-webpack@19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(webpack@5.101.3))(react@19.1.1)(terser@5.44.0):
3587
+
dependencies:
3588
+
'@hono/node-server': 1.19.1(hono@4.9.6)
3589
+
'@swc/core': 1.13.5
3590
+
'@vitejs/plugin-react': 5.0.2(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))
3591
+
'@vitejs/plugin-rsc': 0.4.29(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0))
3592
+
dotenv: 17.2.2
3593
+
hono: 4.9.6
3594
+
react: 19.1.1
3595
+
react-dom: 19.1.1(react@19.1.1)
3596
+
react-server-dom-webpack: 19.1.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(webpack@5.101.3)
3597
+
rsc-html-stream: 0.0.7
3598
+
vite: 7.1.5(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)
3599
+
transitivePeerDependencies:
3600
+
- '@swc/helpers'
3601
+
- '@types/node'
3602
+
- jiti
3603
+
- less
3604
+
- lightningcss
3605
+
- sass
3606
+
- sass-embedded
3607
+
- stylus
3608
+
- sugarss
3609
+
- supports-color
3610
+
- terser
3611
+
- tsx
3612
+
- yaml
3613
+
3614
+
watchpack@2.4.4:
3615
+
dependencies:
3616
+
glob-to-regexp: 0.4.1
3617
+
graceful-fs: 4.2.11
3618
+
3619
+
webpack-sources@3.3.3: {}
3620
+
3621
+
webpack@5.101.3:
3622
+
dependencies:
3623
+
'@types/eslint-scope': 3.7.7
3624
+
'@types/estree': 1.0.8
3625
+
'@types/json-schema': 7.0.15
3626
+
'@webassemblyjs/ast': 1.14.1
3627
+
'@webassemblyjs/wasm-edit': 1.14.1
3628
+
'@webassemblyjs/wasm-parser': 1.14.1
3629
+
acorn: 8.15.0
3630
+
acorn-import-phases: 1.0.4(acorn@8.15.0)
3631
+
browserslist: 4.26.2
3632
+
chrome-trace-event: 1.0.4
3633
+
enhanced-resolve: 5.18.3
3634
+
es-module-lexer: 1.7.0
3635
+
eslint-scope: 5.1.1
3636
+
events: 3.3.0
3637
+
glob-to-regexp: 0.4.1
3638
+
graceful-fs: 4.2.11
3639
+
json-parse-even-better-errors: 2.3.1
3640
+
loader-runner: 4.3.0
3641
+
mime-types: 2.1.35
3642
+
neo-async: 2.6.2
3643
+
schema-utils: 4.3.2
3644
+
tapable: 2.2.3
3645
+
terser-webpack-plugin: 5.3.14(webpack@5.101.3)
3646
+
watchpack: 2.4.4
3647
+
webpack-sources: 3.3.3
3648
+
transitivePeerDependencies:
3649
+
- '@swc/core'
3650
+
- esbuild
3651
+
- uglify-js
3652
+
3653
+
workerd@1.20250924.0:
3654
+
optionalDependencies:
3655
+
'@cloudflare/workerd-darwin-64': 1.20250924.0
3656
+
'@cloudflare/workerd-darwin-arm64': 1.20250924.0
3657
+
'@cloudflare/workerd-linux-64': 1.20250924.0
3658
+
'@cloudflare/workerd-linux-arm64': 1.20250924.0
3659
+
'@cloudflare/workerd-windows-64': 1.20250924.0
3660
+
3661
+
wrangler@4.40.2:
3662
+
dependencies:
3663
+
'@cloudflare/kv-asset-handler': 0.4.0
3664
+
'@cloudflare/unenv-preset': 2.7.4(unenv@2.0.0-rc.21)(workerd@1.20250924.0)
3665
+
blake3-wasm: 2.1.5
3666
+
esbuild: 0.25.4
3667
+
miniflare: 4.20250924.0
3668
+
path-to-regexp: 6.3.0
3669
+
unenv: 2.0.0-rc.21
3670
+
workerd: 1.20250924.0
3671
+
optionalDependencies:
3672
+
fsevents: 2.3.3
3673
+
transitivePeerDependencies:
3674
+
- bufferutil
3675
+
- utf-8-validate
3676
+
3677
+
ws@8.18.0: {}
3678
+
3679
+
yallist@3.1.1: {}
3680
+
3681
+
yallist@5.0.0: {}
3682
+
3683
+
youch-core@0.3.3:
3684
+
dependencies:
3685
+
'@poppinss/exception': 1.2.2
3686
+
error-stack-parser-es: 1.0.5
3687
+
3688
+
youch@4.1.0-beta.10:
3689
+
dependencies:
3690
+
'@poppinss/colors': 4.1.5
3691
+
'@poppinss/dumper': 0.6.4
3692
+
'@speed-highlight/core': 1.2.7
3693
+
cookie: 1.0.2
3694
+
youch-core: 0.3.3
3695
+
3696
+
zimmerframe@1.1.4: {}
3697
+
3698
+
zod@3.22.3: {}
3699
+
3700
+
zod@4.1.11: {}
+2
public/robots.txt
···
0
0
···
1
+
User-agent: *
2
+
Disallow: /RSC/
+55
src/components/debug-game.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
import {
3
+
useBoardMatrix,
4
+
useGameResult,
5
+
useSessionMatrix,
6
+
useVariants,
7
+
} from "../lib/hooks";
8
+
9
+
export function DebugGame() {
10
+
const variants = useVariants();
11
+
const board = useBoardMatrix();
12
+
const session = useSessionMatrix();
13
+
const result = useGameResult();
14
+
15
+
return (
16
+
<div className=" flex gap-4">
17
+
<div className="flex flex-col">
18
+
<p>Answers</p>
19
+
<div className="flex">
20
+
<div className="grid grid-cols-[repeat(5,1fr)] gap-1">
21
+
{board.map((row, y) =>
22
+
row.map((answer, x) => (
23
+
<div
24
+
key={`${x},${y}`}
25
+
className="text-center size-12 bg-indigo-100"
26
+
>
27
+
[{x}, {y}]<br />
28
+
{variants[answer] ?? null}
29
+
</div>
30
+
)),
31
+
)}
32
+
</div>
33
+
</div>
34
+
</div>
35
+
<div className="flex flex-col">
36
+
<p>Progress {result && "(Win!)"}</p>
37
+
<div className="flex">
38
+
<div className="grid grid-cols-[repeat(5,1fr)] gap-1">
39
+
{session.map((row, y) =>
40
+
row.map((answer, x) => (
41
+
<div
42
+
key={`${x},${y}`}
43
+
className="text-center size-12 bg-indigo-100"
44
+
>
45
+
[{x}, {y}]<br />
46
+
{answer === board[y]![x] ? "✅" : "❌"}
47
+
</div>
48
+
)),
49
+
)}
50
+
</div>
51
+
</div>
52
+
</div>
53
+
</div>
54
+
);
55
+
}
+51
src/components/game.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
import { CSSProperties } from "react";
3
+
import { arrayOfSize } from "../lib/game";
4
+
import { useBoardDimensions, useVariants } from "../lib/hooks";
5
+
import { GameButton } from "./game/game-button";
6
+
import { GameHeader } from "./game/game-header";
7
+
import { Celebration } from "./game/celebration";
8
+
import { ClearButton } from "./game/clear-button";
9
+
import { NewGameButton } from "./game/new-game-button";
10
+
import { PreferencesButton } from "./game/preferences-button";
11
+
12
+
interface GameProperties extends CSSProperties {
13
+
"--game-width": number;
14
+
"--game-height": number;
15
+
}
16
+
17
+
export function Game() {
18
+
const variants = useVariants();
19
+
const [width, height] = useBoardDimensions();
20
+
21
+
return (
22
+
<>
23
+
<div>
24
+
<div
25
+
style={
26
+
{ "--game-width": width, "--game-height": height } as GameProperties
27
+
}
28
+
className="grid grid-cols-[repeat(2,auto)_repeat(var(--game-width),3rem)_repeat(2,auto)] grid-rows-[repeat(2,auto)_repeat(var(--game-height),3rem)_repeat(2,auto)] gap-1 content-stretch"
29
+
>
30
+
<GameHeader position={"left"} variant={0} />
31
+
<GameHeader position={"top"} variant={1} />
32
+
{variants.length > 2 && <GameHeader position={"right"} variant={2} />}
33
+
{variants.length > 3 && (
34
+
<GameHeader position={"bottom"} variant={3} />
35
+
)}
36
+
<div className="grid grid-rows-subgrid grid-cols-subgrid row-start-3 -row-end-3 col-start-3 -col-end-3">
37
+
{arrayOfSize(width * height).map((_, i) => (
38
+
<GameButton key={i} index={i} />
39
+
))}
40
+
</div>
41
+
</div>
42
+
</div>
43
+
<div className="grid grid-cols-2 my-6 pt-6 gap-4 border-t-2">
44
+
<ClearButton>Clear</ClearButton>
45
+
<NewGameButton>New game</NewGameButton>
46
+
<PreferencesButton>Preferences</PreferencesButton>
47
+
</div>
48
+
<Celebration />
49
+
</>
50
+
);
51
+
}
+12
src/components/game/celebration.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { useGameResult } from "@/lib/hooks";
2
+
import ReactConfetti from "react-confetti";
3
+
4
+
export function Celebration() {
5
+
const isWin = useGameResult();
6
+
7
+
if (!isWin) {
8
+
return null;
9
+
}
10
+
11
+
return <ReactConfetti />;
12
+
}
+14
src/components/game/clear-button.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { sessionAtom } from "@/lib/state";
2
+
import { useResetAtom } from "jotai/utils";
3
+
import { PropsWithChildren } from "react";
4
+
import { Button } from "../ui/button";
5
+
6
+
export function ClearButton(props: PropsWithChildren) {
7
+
const clear = useClearGame();
8
+
9
+
return <Button {...props} onClick={() => clear()} size={"lg"} />;
10
+
}
11
+
12
+
function useClearGame() {
13
+
return useResetAtom(sessionAtom);
14
+
}
+32
src/components/game/game-button.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
import { useAtom } from "jotai";
3
+
import { useGameResult, useGuessAt, useVariants } from "../../lib/hooks";
4
+
import { Button } from "../ui/button";
5
+
6
+
interface Props {
7
+
index: number;
8
+
}
9
+
10
+
export function GameButton({ index }: Props) {
11
+
const [label, incrValue] = useGameButton(index);
12
+
const isWin = useGameResult();
13
+
14
+
return (
15
+
<button
16
+
onClick={() => incrValue()}
17
+
// variant={isWin ? "noShadow" : "reverse"}
18
+
className="flex h-auto text-4xl p-0 justify-center items-center text-main"
19
+
>
20
+
<span className={isWin ? "animate-bounce" : ""}>{label}</span>
21
+
</button>
22
+
);
23
+
}
24
+
25
+
function useGameButton(index: number) {
26
+
const variants = useVariants();
27
+
const guessAtom = useGuessAt(index);
28
+
const [currentGuess, incrementGuess] = useAtom(guessAtom);
29
+
const label = currentGuess === -1 ? "•" : variants[currentGuess];
30
+
31
+
return [label, incrementGuess] as const;
32
+
}
+33
src/components/game/game-header.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { PropsWithChildren } from "react";
2
+
import { groupIntoCols, groupIntoRows } from "../../lib/game";
3
+
import { useBoard, useBoardDimensions, useVariantAt } from "../../lib/hooks";
4
+
import { VariantCaption } from "./variant-caption";
5
+
import { VariantHints } from "./variant-hints";
6
+
7
+
type HeaderProps = {
8
+
position: "left" | "top" | "right" | "bottom";
9
+
variant: number;
10
+
};
11
+
12
+
export function GameHeader({
13
+
variant,
14
+
position,
15
+
}: PropsWithChildren<HeaderProps>) {
16
+
const label = useVariantAt(variant);
17
+
const orientation = ["top", "bottom"].includes(position)
18
+
? "horizontal"
19
+
: "vertical";
20
+
const board = useBoard();
21
+
const [width] = useBoardDimensions();
22
+
const items =
23
+
orientation === "horizontal"
24
+
? groupIntoCols(board, width)
25
+
: groupIntoRows(board, width);
26
+
27
+
return (
28
+
<>
29
+
<VariantCaption position={position}>{label}</VariantCaption>
30
+
<VariantHints variant={variant} position={position} blocks={items} />
31
+
</>
32
+
);
33
+
}
+14
src/components/game/new-game-button.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { PropsWithChildren } from "react";
2
+
import { Button } from "../ui/button";
3
+
import { useResetAtom } from "jotai/utils";
4
+
import { boardAtom } from "@/lib/state";
5
+
6
+
export function NewGameButton(props: PropsWithChildren) {
7
+
const newGame = useNewGameButton();
8
+
9
+
return <Button {...props} onClick={() => newGame()} size={"lg"} />;
10
+
}
11
+
12
+
function useNewGameButton() {
13
+
return useResetAtom(boardAtom);
14
+
}
+12
src/components/game/preferences-button.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
import { PropsWithChildren } from "react";
3
+
import { Button } from "../ui/button";
4
+
import { PreferencesModal } from "./preferences-modal";
5
+
6
+
export function PreferencesButton({ children }: PropsWithChildren) {
7
+
return (
8
+
<PreferencesModal>
9
+
<Button size={"lg"}>{children}</Button>
10
+
</PreferencesModal>
11
+
);
12
+
}
+126
src/components/game/preferences-form.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { zodResolver } from "@hookform/resolvers/zod";
2
+
import { SubmitHandler, useForm } from "react-hook-form";
3
+
import z from "zod";
4
+
import {
5
+
Form,
6
+
FormControl,
7
+
FormField,
8
+
FormItem,
9
+
FormLabel,
10
+
FormMessage,
11
+
} from "../ui/form";
12
+
import { Input } from "../ui/input";
13
+
14
+
type FormData = z.infer<typeof formSchema>;
15
+
const formSchema = z.object({
16
+
width: z.coerce.number<number>(),
17
+
height: z.coerce.number<number>(),
18
+
variants: z.array(z.string()).min(2).max(4),
19
+
});
20
+
21
+
interface Props {
22
+
defaultValues: FormData;
23
+
onSubmit: SubmitHandler<FormData>;
24
+
buttons?: () => React.ReactNode;
25
+
}
26
+
27
+
export function PreferencesForm({ defaultValues, onSubmit, buttons }: Props) {
28
+
const form = useForm<z.infer<typeof formSchema>>({
29
+
resolver: zodResolver(formSchema),
30
+
defaultValues,
31
+
});
32
+
33
+
return (
34
+
<Form {...form}>
35
+
<form
36
+
id="preferences-form"
37
+
onSubmit={form.handleSubmit((formData) => {
38
+
formData.variants = formData.variants.filter(Boolean);
39
+
return onSubmit(formData);
40
+
})}
41
+
>
42
+
<div className="grid gap-4 grid-cols-4">
43
+
<FormField
44
+
control={form.control}
45
+
name="width"
46
+
render={({ field }) => (
47
+
<FormItem className="col-span-2">
48
+
<FormLabel>Columns</FormLabel>
49
+
<FormControl>
50
+
<Input type="number" {...field} />
51
+
</FormControl>
52
+
<FormMessage />
53
+
</FormItem>
54
+
)}
55
+
/>
56
+
<FormField
57
+
control={form.control}
58
+
name="height"
59
+
render={({ field }) => (
60
+
<FormItem className="col-span-2">
61
+
<FormLabel>Rows</FormLabel>
62
+
<FormControl>
63
+
<Input type="number" {...field} />
64
+
</FormControl>
65
+
<FormMessage />
66
+
</FormItem>
67
+
)}
68
+
/>
69
+
<FormField
70
+
control={form.control}
71
+
name="variants.0"
72
+
render={({ field }) => (
73
+
<FormItem>
74
+
<FormLabel>Left</FormLabel>
75
+
<FormControl>
76
+
<Input {...field} className="text-center text-2xl" />
77
+
</FormControl>
78
+
<FormMessage />
79
+
</FormItem>
80
+
)}
81
+
/>
82
+
<FormField
83
+
control={form.control}
84
+
name="variants.1"
85
+
render={({ field }) => (
86
+
<FormItem>
87
+
<FormLabel>Top</FormLabel>
88
+
<FormControl>
89
+
<Input {...field} className="text-center text-2xl" />
90
+
</FormControl>
91
+
<FormMessage />
92
+
</FormItem>
93
+
)}
94
+
/>
95
+
<FormField
96
+
control={form.control}
97
+
name="variants.2"
98
+
render={({ field }) => (
99
+
<FormItem>
100
+
<FormLabel>Right</FormLabel>
101
+
<FormControl>
102
+
<Input {...field} className="text-center text-2xl" />
103
+
</FormControl>
104
+
<FormMessage />
105
+
</FormItem>
106
+
)}
107
+
/>
108
+
<FormField
109
+
control={form.control}
110
+
name="variants.3"
111
+
render={({ field }) => (
112
+
<FormItem>
113
+
<FormLabel>Bottom</FormLabel>
114
+
<FormControl>
115
+
<Input {...field} className="text-center text-2xl" />
116
+
</FormControl>
117
+
<FormMessage />
118
+
</FormItem>
119
+
)}
120
+
/>
121
+
<div className="col-span-4">{buttons?.()}</div>
122
+
</div>
123
+
</form>
124
+
</Form>
125
+
);
126
+
}
+54
src/components/game/preferences-modal.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { arrayOfSize } from "@/lib/game";
2
+
import { usePreferences } from "@/lib/hooks";
3
+
import { PropsWithChildren, useState } from "react";
4
+
import { Button } from "../ui/button";
5
+
import {
6
+
Dialog,
7
+
DialogClose,
8
+
DialogContent,
9
+
DialogDescription,
10
+
DialogFooter,
11
+
DialogHeader,
12
+
DialogTitle,
13
+
DialogTrigger,
14
+
} from "../ui/dialog";
15
+
import { PreferencesForm } from "./preferences-form";
16
+
17
+
export function PreferencesModal({ children }: PropsWithChildren) {
18
+
const [open, setOpen] = useState(false);
19
+
const [{ width, height, variants }, setPreferences] = usePreferences();
20
+
const defaultValues = {
21
+
width,
22
+
height,
23
+
variants: arrayOfSize(4).map((_, i) => variants[i] ?? ""),
24
+
};
25
+
26
+
return (
27
+
<Dialog open={open} onOpenChange={setOpen}>
28
+
<DialogTrigger asChild>{children}</DialogTrigger>
29
+
<DialogContent className="sm:max-w-[425px]">
30
+
<DialogHeader>
31
+
<DialogTitle>Preferences</DialogTitle>
32
+
<DialogDescription>
33
+
Configure your game just the way you like it!
34
+
</DialogDescription>
35
+
</DialogHeader>
36
+
<PreferencesForm
37
+
defaultValues={defaultValues}
38
+
onSubmit={(formData) => {
39
+
setPreferences(formData);
40
+
setOpen(false);
41
+
}}
42
+
buttons={() => (
43
+
<DialogFooter className="flex flex-row justify-end">
44
+
<DialogClose asChild>
45
+
<Button variant="neutral">Cancel</Button>
46
+
</DialogClose>
47
+
<Button type="submit">Save changes</Button>
48
+
</DialogFooter>
49
+
)}
50
+
/>
51
+
</DialogContent>
52
+
</Dialog>
53
+
);
54
+
}
+31
src/components/game/variant-caption.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { cva } from "class-variance-authority";
2
+
import { PropsWithChildren } from "react";
3
+
4
+
const caption = cva("flex justify-center text-2xl", {
5
+
variants: {
6
+
orientation: {
7
+
vertical: "grid-rows-subgrid row-start-3 -row-end-3 flex-col",
8
+
horizontal: "grid-cols-subgrid col-start-3 -col-end-3",
9
+
},
10
+
position: {
11
+
left: "col-start-1",
12
+
top: "row-start-1",
13
+
right: "-col-start-1",
14
+
bottom: "-row-start-1",
15
+
},
16
+
},
17
+
});
18
+
19
+
interface Props {
20
+
position: "left" | "top" | "right" | "bottom";
21
+
}
22
+
23
+
export function VariantCaption({
24
+
position,
25
+
children,
26
+
}: PropsWithChildren<Props>) {
27
+
const orientation = ["top", "bottom"].includes(position)
28
+
? "horizontal"
29
+
: "vertical";
30
+
return <div className={caption({ position, orientation })}>{children}</div>;
31
+
}
+39
src/components/game/variant-header.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { useBoardSubset } from "@/lib/hooks";
2
+
import { cva } from "class-variance-authority";
3
+
4
+
const variantHeader = cva("flex gap-2 text-sm text-main font-bold", {
5
+
variants: {
6
+
orientation: {
7
+
horizontal: "",
8
+
vertical: "flex-col items-center",
9
+
},
10
+
},
11
+
});
12
+
13
+
type Props = {
14
+
variant: number;
15
+
};
16
+
17
+
type RowProps = {
18
+
row: number;
19
+
} & Props;
20
+
21
+
type ColProps = {
22
+
col: number;
23
+
} & Props;
24
+
25
+
export function VariantHeader({ variant, ...props }: RowProps | ColProps) {
26
+
const orientation = "row" in props ? "horizontal" : "vertical";
27
+
const block = useBoardSubset(
28
+
"row" in props ? "row" : "col",
29
+
"row" in props ? props.row : props.col,
30
+
variant,
31
+
);
32
+
return (
33
+
<div className={variantHeader({ orientation })}>
34
+
{block.map((count, i) => (
35
+
<p key={i}>{count}</p>
36
+
))}
37
+
</div>
38
+
);
39
+
}
+57
src/components/game/variant-hints.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { cva } from "class-variance-authority";
2
+
import { VariantHeader } from "./variant-header";
3
+
4
+
const header = cva("grid", {
5
+
variants: {
6
+
orientation: {
7
+
vertical: "grid-rows-subgrid row-start-3 -row-end-3",
8
+
horizontal: "grid-cols-subgrid col-start-3 -col-end-3",
9
+
},
10
+
position: {
11
+
left: "col-start-2",
12
+
top: "row-start-2",
13
+
right: "-col-start-2",
14
+
bottom: "-row-start-2",
15
+
},
16
+
},
17
+
});
18
+
19
+
interface Props {
20
+
variant: number;
21
+
position: "left" | "top" | "right" | "bottom";
22
+
blocks: number[][];
23
+
}
24
+
25
+
function headerProps<T extends "row" | "col">(orientation: T) {
26
+
return (index: number) => {
27
+
return {
28
+
[orientation]: index,
29
+
} as Record<T, number>;
30
+
};
31
+
}
32
+
33
+
export function VariantHints({ variant, position, blocks }: Props) {
34
+
const orientation = ["top", "bottom"].includes(position)
35
+
? "horizontal"
36
+
: "vertical";
37
+
const propsFactory = headerProps(
38
+
orientation === "horizontal" ? "col" : "row",
39
+
);
40
+
return (
41
+
<div className={header({ position, orientation })}>
42
+
{blocks.map((_, i) => (
43
+
<div
44
+
key={i}
45
+
className={[
46
+
"flex items-center",
47
+
orientation === "horizontal" ? "flex-col" : "",
48
+
position === "left" ? "justify-end" : "",
49
+
position === "top" ? "justify-end" : "",
50
+
].join(" ")}
51
+
>
52
+
<VariantHeader key={i} variant={variant} {...propsFactory(i)} />
53
+
</div>
54
+
))}
55
+
</div>
56
+
);
57
+
}
+33
src/components/providers/hydration-provider.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
3
+
import { useHydrateAtoms } from "jotai/utils";
4
+
import { PropsWithChildren } from "react";
5
+
import {
6
+
_boardAtom,
7
+
heightAtom,
8
+
variantsAtom,
9
+
widthAtom,
10
+
} from "../../lib/state";
11
+
12
+
interface Props {
13
+
width: number;
14
+
height: number;
15
+
variants: string[];
16
+
board: number[];
17
+
}
18
+
19
+
export function HydrationProvider({
20
+
width,
21
+
height,
22
+
variants,
23
+
board,
24
+
children,
25
+
}: PropsWithChildren<Props>) {
26
+
useHydrateAtoms([
27
+
[widthAtom, width],
28
+
[heightAtom, height],
29
+
[variantsAtom, variants],
30
+
[_boardAtom, board],
31
+
]);
32
+
return children;
33
+
}
+7
src/components/providers/state-provider.tsx
···
0
0
0
0
0
0
0
···
1
+
"use client";
2
+
import { Provider } from "jotai";
3
+
import { PropsWithChildren } from "react";
4
+
5
+
export function StateProvider({ children }: PropsWithChildren) {
6
+
return <Provider>{children}</Provider>;
7
+
}
+56
src/components/ui/button.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { Slot } from "@radix-ui/react-slot"
2
+
import { cva, type VariantProps } from "class-variance-authority"
3
+
4
+
import * as React from "react"
5
+
6
+
import { cn } from "@/lib/utils"
7
+
8
+
const buttonVariants = cva(
9
+
"inline-flex items-center justify-center whitespace-nowrap rounded-base text-sm font-base ring-offset-white transition-all gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
10
+
{
11
+
variants: {
12
+
variant: {
13
+
default:
14
+
"text-main-foreground bg-main border-2 border-border shadow-shadow hover:translate-x-boxShadowX hover:translate-y-boxShadowY hover:shadow-none",
15
+
noShadow: "text-main-foreground bg-main border-2 border-border",
16
+
neutral:
17
+
"bg-secondary-background text-foreground border-2 border-border shadow-shadow hover:translate-x-boxShadowX hover:translate-y-boxShadowY hover:shadow-none",
18
+
reverse:
19
+
"text-main-foreground bg-main border-2 border-border hover:translate-x-reverseBoxShadowX hover:translate-y-reverseBoxShadowY hover:shadow-shadow",
20
+
},
21
+
size: {
22
+
default: "h-10 px-4 py-2",
23
+
sm: "h-9 px-3",
24
+
lg: "h-11 px-8",
25
+
icon: "size-10",
26
+
},
27
+
},
28
+
defaultVariants: {
29
+
variant: "default",
30
+
size: "default",
31
+
},
32
+
},
33
+
)
34
+
35
+
function Button({
36
+
className,
37
+
variant,
38
+
size,
39
+
asChild = false,
40
+
...props
41
+
}: React.ComponentProps<"button"> &
42
+
VariantProps<typeof buttonVariants> & {
43
+
asChild?: boolean
44
+
}) {
45
+
const Comp = asChild ? Slot : "button"
46
+
47
+
return (
48
+
<Comp
49
+
data-slot="button"
50
+
className={cn(buttonVariants({ variant, size, className }))}
51
+
{...props}
52
+
/>
53
+
)
54
+
}
55
+
56
+
export { Button, buttonVariants }
+137
src/components/ui/dialog.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import * as DialogPrimitive from "@radix-ui/react-dialog"
2
+
import { X } from "lucide-react"
3
+
4
+
import * as React from "react"
5
+
6
+
import { cn } from "@/lib/utils"
7
+
8
+
function Dialog({
9
+
...props
10
+
}: React.ComponentProps<typeof DialogPrimitive.Root>) {
11
+
return <DialogPrimitive.Root data-slot="dialog" {...props} />
12
+
}
13
+
14
+
function DialogTrigger({
15
+
...props
16
+
}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
17
+
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
18
+
}
19
+
20
+
function DialogPortal({
21
+
...props
22
+
}: React.ComponentProps<typeof DialogPrimitive.Portal>) {
23
+
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
24
+
}
25
+
26
+
function DialogClose({
27
+
...props
28
+
}: React.ComponentProps<typeof DialogPrimitive.Close>) {
29
+
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
30
+
}
31
+
32
+
function DialogOverlay({
33
+
className,
34
+
...props
35
+
}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
36
+
return (
37
+
<DialogPrimitive.Overlay
38
+
data-slot="dialog-overlay"
39
+
className={cn(
40
+
"fixed inset-0 z-50 bg-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
41
+
className,
42
+
)}
43
+
{...props}
44
+
/>
45
+
)
46
+
}
47
+
48
+
function DialogContent({
49
+
className,
50
+
children,
51
+
...props
52
+
}: React.ComponentProps<typeof DialogPrimitive.Content>) {
53
+
return (
54
+
<DialogPortal>
55
+
<DialogOverlay />
56
+
<DialogPrimitive.Content
57
+
data-slot="dialog-content"
58
+
className={cn(
59
+
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-base border-2 border-border p-6 shadow-shadow duration-200 sm:max-w-lg",
60
+
className,
61
+
)}
62
+
{...props}
63
+
>
64
+
{children}
65
+
<DialogPrimitive.Close className="absolute right-4 top-4 rounded-base opacity-100 ring-offset-white focus:outline-hidden focus:ring-2 focus:ring-black focus:ring-offset-2 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">
66
+
<X />
67
+
<span className="sr-only">Close</span>
68
+
</DialogPrimitive.Close>
69
+
</DialogPrimitive.Content>
70
+
</DialogPortal>
71
+
)
72
+
}
73
+
74
+
function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
75
+
return (
76
+
<div
77
+
data-slot="dialog-header"
78
+
className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
79
+
{...props}
80
+
/>
81
+
)
82
+
}
83
+
84
+
function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
85
+
return (
86
+
<div
87
+
data-slot="dialog-footer"
88
+
className={cn(
89
+
"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end",
90
+
className,
91
+
)}
92
+
{...props}
93
+
/>
94
+
)
95
+
}
96
+
97
+
function DialogTitle({
98
+
className,
99
+
...props
100
+
}: React.ComponentProps<typeof DialogPrimitive.Title>) {
101
+
return (
102
+
<DialogPrimitive.Title
103
+
data-slot="dialog-title"
104
+
className={cn(
105
+
"text-lg font-heading leading-none tracking-tight",
106
+
className,
107
+
)}
108
+
{...props}
109
+
/>
110
+
)
111
+
}
112
+
113
+
function DialogDescription({
114
+
className,
115
+
...props
116
+
}: React.ComponentProps<typeof DialogPrimitive.Description>) {
117
+
return (
118
+
<DialogPrimitive.Description
119
+
data-slot="dialog-description"
120
+
className={cn("text-sm font-base text-foreground", className)}
121
+
{...props}
122
+
/>
123
+
)
124
+
}
125
+
126
+
export {
127
+
Dialog,
128
+
DialogPortal,
129
+
DialogOverlay,
130
+
DialogClose,
131
+
DialogTrigger,
132
+
DialogContent,
133
+
DialogHeader,
134
+
DialogFooter,
135
+
DialogTitle,
136
+
DialogDescription,
137
+
}
+167
src/components/ui/form.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
"use client"
2
+
3
+
import * as LabelPrimitive from "@radix-ui/react-label"
4
+
import { Slot } from "@radix-ui/react-slot"
5
+
import {
6
+
Controller,
7
+
FormProvider,
8
+
useFormContext,
9
+
useFormState,
10
+
type ControllerProps,
11
+
type FieldPath,
12
+
type FieldValues,
13
+
} from "react-hook-form"
14
+
15
+
import * as React from "react"
16
+
17
+
import { Label } from "@/components/ui/label"
18
+
19
+
import { cn } from "@/lib/utils"
20
+
21
+
const Form = FormProvider
22
+
23
+
type FormFieldContextValue<
24
+
TFieldValues extends FieldValues = FieldValues,
25
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
26
+
> = {
27
+
name: TName
28
+
}
29
+
30
+
const FormFieldContext = React.createContext<FormFieldContextValue>(
31
+
{} as FormFieldContextValue,
32
+
)
33
+
34
+
function FormField<
35
+
TFieldValues extends FieldValues = FieldValues,
36
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
37
+
>({ ...props }: ControllerProps<TFieldValues, TName>) {
38
+
return (
39
+
<FormFieldContext.Provider value={{ name: props.name }}>
40
+
<Controller {...props} />
41
+
</FormFieldContext.Provider>
42
+
)
43
+
}
44
+
45
+
const useFormField = () => {
46
+
const fieldContext = React.useContext(FormFieldContext)
47
+
const itemContext = React.useContext(FormItemContext)
48
+
const { getFieldState } = useFormContext()
49
+
const formState = useFormState({ name: fieldContext.name })
50
+
const fieldState = getFieldState(fieldContext.name, formState)
51
+
52
+
if (!fieldContext) {
53
+
throw new Error("useFormField should be used within <FormField>")
54
+
}
55
+
56
+
const { id } = itemContext
57
+
58
+
return {
59
+
id,
60
+
name: fieldContext.name,
61
+
formItemId: `${id}-form-item`,
62
+
formDescriptionId: `${id}-form-item-description`,
63
+
formMessageId: `${id}-form-item-message`,
64
+
...fieldState,
65
+
}
66
+
}
67
+
68
+
type FormItemContextValue = {
69
+
id: string
70
+
}
71
+
72
+
const FormItemContext = React.createContext<FormItemContextValue>(
73
+
{} as FormItemContextValue,
74
+
)
75
+
76
+
function FormItem({ className, ...props }: React.ComponentProps<"div">) {
77
+
const id = React.useId()
78
+
79
+
return (
80
+
<FormItemContext.Provider value={{ id }}>
81
+
<div
82
+
data-slot="form-item"
83
+
className={cn("grid gap-2", className)}
84
+
{...props}
85
+
/>
86
+
</FormItemContext.Provider>
87
+
)
88
+
}
89
+
90
+
function FormLabel({
91
+
className,
92
+
...props
93
+
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
94
+
const { error, formItemId } = useFormField()
95
+
96
+
return (
97
+
<Label
98
+
data-slot="form-label"
99
+
data-error={!!error}
100
+
className={cn("font-heading", className)}
101
+
htmlFor={formItemId}
102
+
{...props}
103
+
/>
104
+
)
105
+
}
106
+
107
+
function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
108
+
const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
109
+
110
+
return (
111
+
<Slot
112
+
data-slot="form-control"
113
+
id={formItemId}
114
+
aria-describedby={
115
+
!error
116
+
? `${formDescriptionId}`
117
+
: `${formDescriptionId} ${formMessageId}`
118
+
}
119
+
aria-invalid={!!error}
120
+
{...props}
121
+
/>
122
+
)
123
+
}
124
+
125
+
function FormDescription({ className, ...props }: React.ComponentProps<"p">) {
126
+
const { formDescriptionId } = useFormField()
127
+
128
+
return (
129
+
<p
130
+
data-slot="form-description"
131
+
id={formDescriptionId}
132
+
className={cn("text-sm font-base text-foreground", className)}
133
+
{...props}
134
+
/>
135
+
)
136
+
}
137
+
138
+
function FormMessage({ className, ...props }: React.ComponentProps<"p">) {
139
+
const { error, formMessageId } = useFormField()
140
+
const body = error ? String(error?.message ?? "") : props.children
141
+
142
+
if (!body) {
143
+
return null
144
+
}
145
+
146
+
return (
147
+
<p
148
+
data-slot="form-message"
149
+
id={formMessageId}
150
+
className={cn("text-sm font-base text-red-500", className)}
151
+
{...props}
152
+
>
153
+
{body}
154
+
</p>
155
+
)
156
+
}
157
+
158
+
export {
159
+
useFormField,
160
+
Form,
161
+
FormItem,
162
+
FormLabel,
163
+
FormControl,
164
+
FormDescription,
165
+
FormMessage,
166
+
FormField,
167
+
}
+19
src/components/ui/input.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import * as React from "react"
2
+
3
+
import { cn } from "@/lib/utils"
4
+
5
+
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
+
return (
7
+
<input
8
+
type={type}
9
+
data-slot="input"
10
+
className={cn(
11
+
"flex h-10 w-full rounded-base border-2 border-border bg-secondary-background selection:bg-main selection:text-main-foreground px-3 py-2 text-sm font-base text-foreground file:border-0 file:bg-transparent file:text-sm file:font-heading placeholder:text-foreground/50 focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-black focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
12
+
className,
13
+
)}
14
+
{...props}
15
+
/>
16
+
)
17
+
}
18
+
19
+
export { Input }
+23
src/components/ui/label.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import * as LabelPrimitive from "@radix-ui/react-label"
2
+
3
+
import * as React from "react"
4
+
5
+
import { cn } from "@/lib/utils"
6
+
7
+
function Label({
8
+
className,
9
+
...props
10
+
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
11
+
return (
12
+
<LabelPrimitive.Root
13
+
data-slot="label"
14
+
className={cn(
15
+
"text-sm font-heading leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
16
+
className,
17
+
)}
18
+
{...props}
19
+
/>
20
+
)
21
+
}
22
+
23
+
export { Label }
+54
src/lib/game.ts
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
export function arrayOfSize(size: number) {
2
+
return new Array<null>(size).fill(null);
3
+
}
4
+
5
+
export function groupIntoRows<T>(items: T[], columns: number) {
6
+
return items.reduce((acc, cur, i) => {
7
+
if (i % columns === 0) {
8
+
return [...acc, [cur]];
9
+
}
10
+
11
+
acc[acc.length - 1] = [...acc[acc.length - 1]!, cur];
12
+
return acc;
13
+
}, [] as T[][]);
14
+
}
15
+
16
+
export function groupIntoCols<T>(items: T[], columns: number) {
17
+
const rows = groupIntoRows(items, columns);
18
+
return arrayOfSize(rows[0]!.length).map((_, x) =>
19
+
rows.map((row) => row[x] as T),
20
+
);
21
+
}
22
+
23
+
// Given a row or column, return an array containing the
24
+
// number of contiguous values grouped by variant.
25
+
// E.g. given the block [0, 1, 1, 0, 2, 1], return [2, 1] for variant 1.
26
+
export function groupByValue<T extends Array<any>>(block: T, value: T[number]) {
27
+
const [first, ...rest] = block;
28
+
29
+
const grouped = rest
30
+
.reduce<T[number][][]>(
31
+
(acc, cur) => {
32
+
if (acc.at(acc.length - 1)![0] === cur) {
33
+
acc[acc.length - 1] = [...acc[acc.length - 1]!, cur];
34
+
return acc;
35
+
}
36
+
37
+
return [...acc, [cur]];
38
+
},
39
+
[[first]],
40
+
)
41
+
.reduce<number[]>((acc, cur) => {
42
+
if (cur[0] === value) {
43
+
return [...acc, cur.length];
44
+
}
45
+
46
+
return acc;
47
+
}, []);
48
+
49
+
if (grouped.length === 0) {
50
+
return [0];
51
+
}
52
+
53
+
return grouped;
54
+
}
+72
src/lib/hooks.ts
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { useAtom, useAtomValue } from "jotai";
2
+
import { useMemo } from "react";
3
+
import {
4
+
_boardAtom,
5
+
boardAtom,
6
+
boardMatrixAtom,
7
+
gameResultAtom,
8
+
getGuessAtomAt,
9
+
getVariantAtomAt,
10
+
heightAtom,
11
+
preferencesAtom,
12
+
sessionMatrixAtom,
13
+
variantsAtom,
14
+
widthAtom,
15
+
} from "./state";
16
+
import { groupByValue, groupIntoCols, groupIntoRows } from "./game";
17
+
18
+
export function useGuessAt(index: number) {
19
+
const atomCell = useMemo(() => getGuessAtomAt(index), [index]);
20
+
const [cell] = useAtom(atomCell);
21
+
return cell;
22
+
}
23
+
24
+
export function useVariants() {
25
+
return useAtomValue(variantsAtom);
26
+
}
27
+
28
+
export function useVariantAt(index: number) {
29
+
const variantAtom = useMemo(() => getVariantAtomAt(index), [index]);
30
+
return useAtomValue(variantAtom);
31
+
}
32
+
33
+
export function useBoard() {
34
+
return useAtomValue(boardAtom);
35
+
}
36
+
37
+
export function useBoardDimensions() {
38
+
const width = useAtomValue(widthAtom);
39
+
const height = useAtomValue(heightAtom);
40
+
return [width, height] as const;
41
+
}
42
+
43
+
export function useBoardMatrix() {
44
+
return useAtomValue(boardMatrixAtom);
45
+
}
46
+
47
+
export function useSessionMatrix() {
48
+
return useAtomValue(sessionMatrixAtom);
49
+
}
50
+
51
+
export function useGameResult() {
52
+
return useAtomValue(gameResultAtom);
53
+
}
54
+
55
+
export function useBoardSubset(
56
+
orientation: "row" | "col",
57
+
index: number,
58
+
variant: number,
59
+
) {
60
+
const [width] = useBoardDimensions();
61
+
const board = useBoard();
62
+
63
+
if (orientation === "row") {
64
+
return groupByValue(groupIntoRows(board, width)[index]!, variant);
65
+
} else {
66
+
return groupByValue(groupIntoCols(board, width)[index]!, variant);
67
+
}
68
+
}
69
+
70
+
export function usePreferences() {
71
+
return useAtom(preferencesAtom);
72
+
}
+127
src/lib/state.ts
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { atom } from "jotai";
2
+
import { atomWithRefresh, atomWithReset, RESET, selectAtom } from "jotai/utils";
3
+
import { arrayOfSize, groupIntoRows } from "./game";
4
+
5
+
export const defaultWidth = 5;
6
+
export const defaultHeight = 5;
7
+
export const defaultVariants = ["🍒", "🍍"];
8
+
9
+
export const widthAtom = atomWithReset(defaultWidth);
10
+
export const heightAtom = atomWithReset(defaultHeight);
11
+
export const variantsAtom = atomWithReset(defaultVariants);
12
+
13
+
export const entropyAtom = atom((get) => get(variantsAtom).length);
14
+
export const sizeAtom = atom((get) => get(widthAtom) * get(heightAtom));
15
+
16
+
export const _boardAtom = atom(
17
+
generateBoard(defaultWidth * defaultHeight, defaultVariants.length),
18
+
);
19
+
20
+
export const boardAtom = atom(
21
+
(get) => get(_boardAtom),
22
+
(get, set, _value?: typeof RESET) => {
23
+
set(sessionAtom, RESET);
24
+
set(_boardAtom, generateBoard(get(sizeAtom), get(entropyAtom)));
25
+
},
26
+
);
27
+
28
+
export const boardMatrixAtom = atom((get) =>
29
+
groupIntoRows(get(_boardAtom), get(widthAtom)),
30
+
);
31
+
32
+
const newCell = () => {
33
+
const cellAtom = atomWithReset(-1);
34
+
return atom(
35
+
(get) => get(cellAtom),
36
+
(get, set, reset?: typeof RESET) => {
37
+
if (reset === RESET) {
38
+
return set(cellAtom, RESET);
39
+
}
40
+
41
+
if (get(gameResultAtom)) {
42
+
return;
43
+
}
44
+
45
+
const options = get(variantsAtom);
46
+
const currentValue = get(cellAtom);
47
+
48
+
let newValue: number = currentValue + 1;
49
+
if (newValue === options.length) {
50
+
newValue = -1;
51
+
}
52
+
53
+
set(cellAtom, newValue);
54
+
},
55
+
);
56
+
};
57
+
58
+
const _sessionAtom = atomWithRefresh((get) =>
59
+
arrayOfSize(get(sizeAtom)).map(() => newCell()),
60
+
);
61
+
62
+
export const sessionAtom = atom(
63
+
(get) => get(_sessionAtom),
64
+
(get, set, _value?: typeof RESET) =>
65
+
get(_sessionAtom).forEach((cell) => {
66
+
if (get(cell) < 0) {
67
+
return;
68
+
}
69
+
set(cell, RESET);
70
+
}),
71
+
);
72
+
73
+
export const sessionMatrixAtom = atom((get) =>
74
+
groupIntoRows(get(_sessionAtom).map(get), get(widthAtom)),
75
+
);
76
+
77
+
export const gameResultAtom = atom(
78
+
(get) =>
79
+
get(boardMatrixAtom).toString() === get(sessionMatrixAtom).toString(),
80
+
);
81
+
82
+
export const preferencesAtom = atom(
83
+
(get) => {
84
+
return {
85
+
width: get(widthAtom),
86
+
height: get(heightAtom),
87
+
variants: get(variantsAtom),
88
+
};
89
+
},
90
+
(
91
+
_get,
92
+
set,
93
+
{
94
+
width,
95
+
height,
96
+
variants,
97
+
}: { width: number; height: number; variants: string[] },
98
+
) => {
99
+
set(widthAtom, width);
100
+
set(heightAtom, height);
101
+
set(variantsAtom, variants);
102
+
set(boardAtom);
103
+
},
104
+
);
105
+
106
+
export const getGuessAtomAt = (index: number) =>
107
+
selectAtom(sessionAtom, (cells) => {
108
+
const cellAtom = cells[index];
109
+
if (typeof cellAtom === "undefined") {
110
+
throw new Error(`Cell "${index}" not found.`);
111
+
}
112
+
return cellAtom;
113
+
});
114
+
115
+
export function getVariantAtomAt(index: number) {
116
+
return selectAtom(variantsAtom, (variants) => {
117
+
const variant = variants[index];
118
+
if (typeof variant === "undefined") {
119
+
throw new Error(`Variant at ${index} does not exist.`);
120
+
}
121
+
return variant;
122
+
});
123
+
}
124
+
125
+
function generateBoard(size: number, entropy: number) {
126
+
return arrayOfSize(size).map(() => Math.floor(Math.random() * entropy));
127
+
}
+6
src/lib/utils.ts
···
0
0
0
0
0
0
···
1
+
import { clsx, type ClassValue } from "clsx";
2
+
import { twMerge } from "tailwind-merge";
3
+
4
+
export function cn(...inputs: ClassValue[]) {
5
+
return twMerge(clsx(inputs));
6
+
}
+21
src/pages.gen.ts
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
// deno-fmt-ignore-file
2
+
// biome-ignore format: generated types do not need formatting
3
+
// prettier-ignore
4
+
import type { PathsForPages, GetConfigResponse } from 'waku/router';
5
+
6
+
// prettier-ignore
7
+
import type { getConfig as File_Index_getConfig } from './pages/index';
8
+
9
+
// prettier-ignore
10
+
type Page =
11
+
| ({ path: '/' } & GetConfigResponse<typeof File_Index_getConfig>);
12
+
13
+
// prettier-ignore
14
+
declare module 'waku/router' {
15
+
interface RouteConfig {
16
+
paths: PathsForPages<Page>;
17
+
}
18
+
interface CreatePagesConfig {
19
+
pages: Page;
20
+
}
21
+
}
+19
src/pages/_layout.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { PropsWithChildren } from "react";
2
+
import { StateProvider } from "../components/providers/state-provider";
3
+
import "../styles.css";
4
+
5
+
export default async function RootLayout({ children }: PropsWithChildren) {
6
+
return (
7
+
<StateProvider>
8
+
<div className="h-dvh w-dvw p-4 flex justify-center items-center">
9
+
<main>{children}</main>
10
+
</div>
11
+
</StateProvider>
12
+
);
13
+
}
14
+
15
+
export const getConfig = async () => {
16
+
return {
17
+
render: "static",
18
+
} as const;
19
+
};
+28
src/pages/index.tsx
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { arrayOfSize } from "@/lib/game";
2
+
import { Game } from "../components/game";
3
+
import { HydrationProvider } from "@/components/providers/hydration-provider";
4
+
import { defaultHeight, defaultVariants, defaultWidth } from "@/lib/state";
5
+
6
+
const board = arrayOfSize(defaultWidth * defaultHeight).map(() =>
7
+
Math.floor(Math.random() * defaultVariants.length),
8
+
);
9
+
10
+
export default async function HomePage() {
11
+
const props = {
12
+
width: defaultWidth,
13
+
height: defaultHeight,
14
+
variants: defaultVariants,
15
+
board,
16
+
};
17
+
return (
18
+
<HydrationProvider {...props}>
19
+
<Game />
20
+
</HydrationProvider>
21
+
);
22
+
}
23
+
24
+
export const getConfig = async () => {
25
+
return {
26
+
render: "dynamic",
27
+
} as const;
28
+
};
+81
src/styles.css
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
@import "@fontsource-variable/dm-sans/opsz.css";
2
+
@import "tailwindcss";
3
+
@import "tw-animate-css";
4
+
5
+
@custom-variant dark (&:is(.dark *));
6
+
7
+
:root {
8
+
--background: oklch(95.08% 0.0481 184.07);
9
+
--secondary-background: oklch(100% 0 0);
10
+
--foreground: oklch(0% 0 0);
11
+
--main-foreground: oklch(0% 0 0);
12
+
--main: oklch(78.57% 0.1422 180.36);
13
+
--border: oklch(0% 0 0);
14
+
--ring: oklch(0% 0 0);
15
+
--overlay: oklch(0% 0 0 / 0.8);
16
+
--shadow: 4px 4px 0px 0px var(--border);
17
+
--chart-1: #00d6bd;
18
+
--chart-2: #0099ff;
19
+
--chart-3: #7a83ff;
20
+
--chart-4: #ff4d50;
21
+
--chart-5: #facc00;
22
+
--chart-active-dot: #000;
23
+
}
24
+
25
+
.dark {
26
+
--background: oklch(22.65% 0.0236 198.49);
27
+
--secondary-background: oklch(23.93% 0 0);
28
+
--foreground: oklch(92.49% 0 0);
29
+
--main-foreground: oklch(0% 0 0);
30
+
--main: oklch(71.47% 0.129261 180.4742);
31
+
--border: oklch(0% 0 0);
32
+
--ring: oklch(100% 0 0);
33
+
--shadow: 4px 4px 0px 0px var(--border);
34
+
--chart-1: #00bda7;
35
+
--chart-2: #008ae5;
36
+
--chart-3: #7a83ff;
37
+
--chart-4: #ff6669;
38
+
--chart-5: #e0b700;
39
+
--chart-active-dot: #fff;
40
+
}
41
+
42
+
@theme inline {
43
+
--default-font-family: "DM Sans Variable", sans-serif;
44
+
--color-main: var(--main);
45
+
--color-background: var(--background);
46
+
--color-secondary-background: var(--secondary-background);
47
+
--color-foreground: var(--foreground);
48
+
--color-main-foreground: var(--main-foreground);
49
+
--color-border: var(--border);
50
+
--color-overlay: var(--overlay);
51
+
--color-ring: var(--ring);
52
+
--color-chart-1: var(--chart-1);
53
+
--color-chart-2: var(--chart-2);
54
+
--color-chart-3: var(--chart-3);
55
+
--color-chart-4: var(--chart-4);
56
+
--color-chart-5: var(--chart-5);
57
+
58
+
--spacing-boxShadowX: 4px;
59
+
--spacing-boxShadowY: 4px;
60
+
--spacing-reverseBoxShadowX: -4px;
61
+
--spacing-reverseBoxShadowY: -4px;
62
+
--radius-base: 15px;
63
+
--shadow-shadow: var(--shadow);
64
+
--font-weight-base: 500;
65
+
--font-weight-heading: 700;
66
+
}
67
+
68
+
@layer base {
69
+
body {
70
+
@apply text-foreground font-base bg-background;
71
+
}
72
+
73
+
h1,
74
+
h2,
75
+
h3,
76
+
h4,
77
+
h5,
78
+
h6 {
79
+
@apply font-heading;
80
+
}
81
+
}
+21
tsconfig.json
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
{
2
+
"compilerOptions": {
3
+
"strict": true,
4
+
"target": "esnext",
5
+
"noEmit": true,
6
+
"isolatedModules": true,
7
+
"moduleDetection": "force",
8
+
"downlevelIteration": true,
9
+
"esModuleInterop": true,
10
+
"module": "esnext",
11
+
"moduleResolution": "bundler",
12
+
"skipLibCheck": true,
13
+
"noUncheckedIndexedAccess": true,
14
+
"exactOptionalPropertyTypes": true,
15
+
"jsx": "react-jsx",
16
+
"baseUrl": ".",
17
+
"paths": {
18
+
"@/*": ["./src/*"]
19
+
}
20
+
}
21
+
}
+14
waku.config.ts
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
import { defineConfig } from "waku/config";
2
+
import tailwindcss from "@tailwindcss/vite";
3
+
import path from "node:path";
4
+
5
+
export default defineConfig({
6
+
vite: {
7
+
plugins: [tailwindcss()],
8
+
resolve: {
9
+
alias: {
10
+
"@": path.resolve(import.meta.dirname, "./src"),
11
+
},
12
+
},
13
+
},
14
+
});
+19
wrangler.jsonc
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
···
1
+
{
2
+
"name": "gridly",
3
+
"main": "./dist/worker/serve-cloudflare.js",
4
+
// https://developers.cloudflare.com/workers/platform/compatibility-dates
5
+
"compatibility_date": "2024-11-11",
6
+
// nodejs_als is required for Waku server-side request context
7
+
// It can be removed if only building static pages
8
+
"compatibility_flags": ["nodejs_als"],
9
+
// https://developers.cloudflare.com/workers/static-assets/binding/
10
+
"assets": {
11
+
"binding": "ASSETS",
12
+
"directory": "./dist/assets",
13
+
"html_handling": "drop-trailing-slash",
14
+
"not_found_handling": "404-page",
15
+
},
16
+
"vars": {
17
+
"MAX_ITEMS": 10,
18
+
},
19
+
}