Thomas G. Lopes commited on
Commit
2f8477e
·
unverified ·
2 Parent(s): ac5aecb 11e0dcc

Projects (#63)

Browse files
Files changed (44) hide show
  1. package.json +9 -3
  2. pnpm-lock.yaml +1117 -4
  3. src/app.css +35 -2
  4. src/app.d.ts +2 -0
  5. src/app.html +10 -2
  6. src/lib/actions/click-outside.ts +24 -0
  7. src/lib/components/Avatar.svelte +0 -3
  8. src/lib/components/DebugMenu.svelte +19 -0
  9. src/lib/components/Icons/IconCaret.svelte +0 -16
  10. src/lib/components/Icons/IconCode.svelte +0 -21
  11. src/lib/components/Icons/IconCog.svelte +0 -13
  12. src/lib/components/Icons/IconCompare.svelte +0 -10
  13. src/lib/components/Icons/IconCopyCode.svelte +0 -24
  14. src/lib/components/Icons/IconCross.svelte +0 -21
  15. src/lib/components/Icons/IconDelete.svelte +0 -21
  16. src/lib/components/Icons/IconExternal.svelte +0 -7
  17. src/lib/components/Icons/IconInfo.svelte +0 -20
  18. src/lib/components/Icons/IconPlus.svelte +0 -10
  19. src/lib/components/Icons/IconProvider.svelte +291 -33
  20. src/lib/components/Icons/IconSearch.svelte +0 -18
  21. src/lib/components/Icons/IconStar.svelte +0 -22
  22. src/lib/components/Icons/IconThrashcan.svelte +0 -21
  23. src/lib/components/InferencePlayground/InferencePlayground.svelte +42 -64
  24. src/lib/components/InferencePlayground/InferencePlaygroundCodeSnippets.svelte +5 -5
  25. src/lib/components/InferencePlayground/InferencePlaygroundConversation.svelte +26 -11
  26. src/lib/components/InferencePlayground/InferencePlaygroundConversationHeader.svelte +1 -1
  27. src/lib/components/InferencePlayground/InferencePlaygroundHFTokenModal.svelte +6 -15
  28. src/lib/components/InferencePlayground/InferencePlaygroundModelSelector.svelte +6 -2
  29. src/lib/components/InferencePlayground/InferencePlaygroundModelSelectorModal.svelte +8 -4
  30. src/lib/components/InferencePlayground/InferencePlaygroundProjectSelect.svelte +93 -0
  31. src/lib/components/InferencePlayground/InferencePlaygroundProviderSelect.svelte +9 -12
  32. src/lib/components/Prompts.svelte +96 -0
  33. src/lib/stores/models.ts +1 -1
  34. src/lib/stores/session.ts +183 -77
  35. src/lib/stores/token.ts +3 -6
  36. src/lib/types.ts +13 -1
  37. src/lib/utils/json.ts +7 -0
  38. src/lib/utils/store.ts +1 -5
  39. src/routes/+layout.svelte +2 -0
  40. src/routes/+layout.ts +1 -0
  41. src/routes/+page.ts +8 -0
  42. src/routes/{+page.server.ts → api/models/+server.ts} +41 -9
  43. tsconfig.json +8 -1
  44. vite.config.ts +13 -1
package.json CHANGED
@@ -6,13 +6,16 @@
6
  "dev": "vite dev",
7
  "build": "vite build",
8
  "preview": "vite preview",
9
- "prepare": "svelte-kit sync || echo ''",
10
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
12
  "lint": "prettier . --check . && eslint --ext .js,.ts,.svelte src/",
13
  "format": "prettier . --write ."
14
  },
15
  "devDependencies": {
 
 
 
16
  "@sveltejs/adapter-auto": "^3.2.2",
17
  "@sveltejs/adapter-node": "^5.2.0",
18
  "@sveltejs/kit": "^2.0.0",
@@ -33,8 +36,10 @@
33
  "svelte-check": "^3.6.0",
34
  "tailwind-merge": "^3.0.2",
35
  "tailwindcss": "^4.0.9",
 
36
  "tslib": "^2.4.1",
37
- "typescript": "^5.6.2",
 
38
  "vite": "^5.0.3"
39
  },
40
  "type": "module",
@@ -43,6 +48,7 @@
43
  "@huggingface/inference": "^3.5.1",
44
  "@huggingface/tasks": "^0.17.1",
45
  "@melt-ui/svelte": "^0.86.3",
46
- "@tailwindcss/container-queries": "^0.1.1"
 
47
  }
48
  }
 
6
  "dev": "vite dev",
7
  "build": "vite build",
8
  "preview": "vite preview",
9
+ "prepare": "ts-patch install && svelte-kit sync || echo ''",
10
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
11
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
12
  "lint": "prettier . --check . && eslint --ext .js,.ts,.svelte src/",
13
  "format": "prettier . --write ."
14
  },
15
  "devDependencies": {
16
+ "@iconify-json/carbon": "^1.2.8",
17
+ "@ryoppippi/unplugin-typia": "^1.0.0",
18
+ "@samchon/openapi": "^3.0.0",
19
  "@sveltejs/adapter-auto": "^3.2.2",
20
  "@sveltejs/adapter-node": "^5.2.0",
21
  "@sveltejs/kit": "^2.0.0",
 
36
  "svelte-check": "^3.6.0",
37
  "tailwind-merge": "^3.0.2",
38
  "tailwindcss": "^4.0.9",
39
+ "ts-patch": "^3.3.0",
40
  "tslib": "^2.4.1",
41
+ "typescript": "^5.8.2",
42
+ "unplugin-icons": "^22.1.0",
43
  "vite": "^5.0.3"
44
  },
45
  "type": "module",
 
48
  "@huggingface/inference": "^3.5.1",
49
  "@huggingface/tasks": "^0.17.1",
50
  "@melt-ui/svelte": "^0.86.3",
51
+ "@tailwindcss/container-queries": "^0.1.1",
52
+ "typia": "^8.0.0"
53
  }
54
  }
pnpm-lock.yaml CHANGED
@@ -23,7 +23,19 @@ importers:
23
  '@tailwindcss/container-queries':
24
  specifier: ^0.1.1
25
  version: 0.1.1(tailwindcss@4.0.9)
 
 
 
26
  devDependencies:
 
 
 
 
 
 
 
 
 
27
  '@sveltejs/adapter-auto':
28
  specifier: ^3.2.2
29
  version: 3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))
@@ -84,12 +96,18 @@ importers:
84
  tailwindcss:
85
  specifier: ^4.0.9
86
  version: 4.0.9
 
 
 
87
  tslib:
88
  specifier: ^2.4.1
89
  version: 2.8.1
90
  typescript:
91
- specifier: ^5.6.2
92
  version: 5.8.2
 
 
 
93
  vite:
94
  specifier: ^5.0.3
95
  version: 5.4.14(lightningcss@1.29.1)
@@ -104,144 +122,300 @@ packages:
104
  resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
105
  engines: {node: '>=6.0.0'}
106
 
 
 
 
 
 
 
107
  '@esbuild/aix-ppc64@0.21.5':
108
  resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
109
  engines: {node: '>=12'}
110
  cpu: [ppc64]
111
  os: [aix]
112
 
 
 
 
 
 
 
113
  '@esbuild/android-arm64@0.21.5':
114
  resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
115
  engines: {node: '>=12'}
116
  cpu: [arm64]
117
  os: [android]
118
 
 
 
 
 
 
 
119
  '@esbuild/android-arm@0.21.5':
120
  resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
121
  engines: {node: '>=12'}
122
  cpu: [arm]
123
  os: [android]
124
 
 
 
 
 
 
 
125
  '@esbuild/android-x64@0.21.5':
126
  resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
127
  engines: {node: '>=12'}
128
  cpu: [x64]
129
  os: [android]
130
 
 
 
 
 
 
 
131
  '@esbuild/darwin-arm64@0.21.5':
132
  resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
133
  engines: {node: '>=12'}
134
  cpu: [arm64]
135
  os: [darwin]
136
 
 
 
 
 
 
 
137
  '@esbuild/darwin-x64@0.21.5':
138
  resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
139
  engines: {node: '>=12'}
140
  cpu: [x64]
141
  os: [darwin]
142
 
 
 
 
 
 
 
143
  '@esbuild/freebsd-arm64@0.21.5':
144
  resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
145
  engines: {node: '>=12'}
146
  cpu: [arm64]
147
  os: [freebsd]
148
 
 
 
 
 
 
 
149
  '@esbuild/freebsd-x64@0.21.5':
150
  resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
151
  engines: {node: '>=12'}
152
  cpu: [x64]
153
  os: [freebsd]
154
 
 
 
 
 
 
 
155
  '@esbuild/linux-arm64@0.21.5':
156
  resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
157
  engines: {node: '>=12'}
158
  cpu: [arm64]
159
  os: [linux]
160
 
 
 
 
 
 
 
161
  '@esbuild/linux-arm@0.21.5':
162
  resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
163
  engines: {node: '>=12'}
164
  cpu: [arm]
165
  os: [linux]
166
 
 
 
 
 
 
 
167
  '@esbuild/linux-ia32@0.21.5':
168
  resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
169
  engines: {node: '>=12'}
170
  cpu: [ia32]
171
  os: [linux]
172
 
 
 
 
 
 
 
173
  '@esbuild/linux-loong64@0.21.5':
174
  resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
175
  engines: {node: '>=12'}
176
  cpu: [loong64]
177
  os: [linux]
178
 
 
 
 
 
 
 
179
  '@esbuild/linux-mips64el@0.21.5':
180
  resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
181
  engines: {node: '>=12'}
182
  cpu: [mips64el]
183
  os: [linux]
184
 
 
 
 
 
 
 
185
  '@esbuild/linux-ppc64@0.21.5':
186
  resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
187
  engines: {node: '>=12'}
188
  cpu: [ppc64]
189
  os: [linux]
190
 
 
 
 
 
 
 
191
  '@esbuild/linux-riscv64@0.21.5':
192
  resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
193
  engines: {node: '>=12'}
194
  cpu: [riscv64]
195
  os: [linux]
196
 
 
 
 
 
 
 
197
  '@esbuild/linux-s390x@0.21.5':
198
  resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
199
  engines: {node: '>=12'}
200
  cpu: [s390x]
201
  os: [linux]
202
 
 
 
 
 
 
 
203
  '@esbuild/linux-x64@0.21.5':
204
  resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
205
  engines: {node: '>=12'}
206
  cpu: [x64]
207
  os: [linux]
208
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  '@esbuild/netbsd-x64@0.21.5':
210
  resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
211
  engines: {node: '>=12'}
212
  cpu: [x64]
213
  os: [netbsd]
214
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  '@esbuild/openbsd-x64@0.21.5':
216
  resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
217
  engines: {node: '>=12'}
218
  cpu: [x64]
219
  os: [openbsd]
220
 
 
 
 
 
 
 
221
  '@esbuild/sunos-x64@0.21.5':
222
  resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
223
  engines: {node: '>=12'}
224
  cpu: [x64]
225
  os: [sunos]
226
 
 
 
 
 
 
 
227
  '@esbuild/win32-arm64@0.21.5':
228
  resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
229
  engines: {node: '>=12'}
230
  cpu: [arm64]
231
  os: [win32]
232
 
 
 
 
 
 
 
233
  '@esbuild/win32-ia32@0.21.5':
234
  resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
235
  engines: {node: '>=12'}
236
  cpu: [ia32]
237
  os: [win32]
238
 
 
 
 
 
 
 
239
  '@esbuild/win32-x64@0.21.5':
240
  resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
241
  engines: {node: '>=12'}
242
  cpu: [x64]
243
  os: [win32]
244
 
 
 
 
 
 
 
245
  '@eslint-community/eslint-utils@4.4.1':
246
  resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
247
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -296,6 +470,15 @@ packages:
296
  resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
297
  deprecated: Use @eslint/object-schema instead
298
 
 
 
 
 
 
 
 
 
 
299
  '@internationalized/date@3.7.0':
300
  resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==}
301
 
@@ -468,6 +651,12 @@ packages:
468
  cpu: [x64]
469
  os: [win32]
470
 
 
 
 
 
 
 
471
  '@sveltejs/adapter-auto@3.3.1':
472
  resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
473
  peerDependencies:
@@ -678,6 +867,10 @@ packages:
678
  ajv@6.12.6:
679
  resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
680
 
 
 
 
 
681
  ansi-regex@5.0.1:
682
  resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
683
  engines: {node: '>=8'}
@@ -697,6 +890,9 @@ packages:
697
  resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
698
  engines: {node: '>= 0.4'}
699
 
 
 
 
700
  array-union@2.1.0:
701
  resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
702
  engines: {node: '>=8'}
@@ -708,10 +904,16 @@ packages:
708
  balanced-match@1.0.2:
709
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
710
 
 
 
 
711
  binary-extensions@2.3.0:
712
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
713
  engines: {node: '>=8'}
714
 
 
 
 
715
  brace-expansion@1.1.11:
716
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
717
 
@@ -726,6 +928,9 @@ packages:
726
  resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
727
  engines: {node: '>=8.0.0'}
728
 
 
 
 
729
  callsites@3.1.0:
730
  resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
731
  engines: {node: '>=6'}
@@ -734,10 +939,29 @@ packages:
734
  resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
735
  engines: {node: '>=10'}
736
 
 
 
 
737
  chokidar@3.6.0:
738
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
739
  engines: {node: '>= 8.10.0'}
740
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
741
  clsx@2.1.1:
742
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
743
  engines: {node: '>=6'}
@@ -752,16 +976,40 @@ packages:
752
  color-name@1.1.4:
753
  resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
754
 
 
 
 
 
 
 
 
 
 
 
 
755
  commondir@1.0.1:
756
  resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
757
 
758
  concat-map@0.0.1:
759
  resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
760
 
 
 
 
 
 
 
 
 
 
 
761
  cookie@0.6.0:
762
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
763
  engines: {node: '>= 0.6'}
764
 
 
 
 
765
  cross-spawn@7.0.6:
766
  resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
767
  engines: {node: '>= 8'}
@@ -791,6 +1039,12 @@ packages:
791
  resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
792
  engines: {node: '>=0.10.0'}
793
 
 
 
 
 
 
 
794
  dequal@2.0.3:
795
  resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
796
  engines: {node: '>=6'}
@@ -807,6 +1061,9 @@ packages:
807
  devalue@5.1.1:
808
  resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
809
 
 
 
 
810
  dir-glob@3.0.1:
811
  resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
812
  engines: {node: '>=8'}
@@ -815,6 +1072,13 @@ packages:
815
  resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
816
  engines: {node: '>=6.0.0'}
817
 
 
 
 
 
 
 
 
818
  enhanced-resolve@5.18.1:
819
  resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
820
  engines: {node: '>=10.13.0'}
@@ -827,6 +1091,15 @@ packages:
827
  engines: {node: '>=12'}
828
  hasBin: true
829
 
 
 
 
 
 
 
 
 
 
830
  escape-string-regexp@4.0.0:
831
  resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
832
  engines: {node: '>=10'}
@@ -874,6 +1147,11 @@ packages:
874
  resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
875
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
876
 
 
 
 
 
 
877
  esquery@1.6.0:
878
  resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
879
  engines: {node: '>=0.10'}
@@ -896,6 +1174,13 @@ packages:
896
  resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
897
  engines: {node: '>=0.10.0'}
898
 
 
 
 
 
 
 
 
899
  fast-deep-equal@3.1.3:
900
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
901
 
@@ -920,6 +1205,10 @@ packages:
920
  picomatch:
921
  optional: true
922
 
 
 
 
 
923
  file-entry-cache@6.0.1:
924
  resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
925
  engines: {node: ^10.12.0 || >=12.0.0}
@@ -928,10 +1217,18 @@ packages:
928
  resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
929
  engines: {node: '>=8'}
930
 
 
 
 
 
931
  find-up@5.0.0:
932
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
933
  engines: {node: '>=10'}
934
 
 
 
 
 
935
  flat-cache@3.2.0:
936
  resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
937
  engines: {node: ^10.12.0 || >=12.0.0}
@@ -965,10 +1262,18 @@ packages:
965
  resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
966
  deprecated: Glob versions prior to v9 are no longer supported
967
 
 
 
 
 
968
  globals@13.24.0:
969
  resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
970
  engines: {node: '>=8'}
971
 
 
 
 
 
972
  globby@11.1.0:
973
  resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
974
  engines: {node: '>=10'}
@@ -983,6 +1288,10 @@ packages:
983
  resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
984
  engines: {node: '>=8'}
985
 
 
 
 
 
986
  hasown@2.0.2:
987
  resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
988
  engines: {node: '>= 0.4'}
@@ -991,6 +1300,13 @@ packages:
991
  resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
992
  engines: {node: '>=12.0.0'}
993
 
 
 
 
 
 
 
 
994
  ignore@5.3.2:
995
  resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
996
  engines: {node: '>= 4'}
@@ -1013,6 +1329,14 @@ packages:
1013
  inherits@2.0.4:
1014
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1015
 
 
 
 
 
 
 
 
 
1016
  is-binary-path@2.1.0:
1017
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1018
  engines: {node: '>=8'}
@@ -1025,10 +1349,18 @@ packages:
1025
  resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1026
  engines: {node: '>=0.10.0'}
1027
 
 
 
 
 
1028
  is-glob@4.0.3:
1029
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1030
  engines: {node: '>=0.10.0'}
1031
 
 
 
 
 
1032
  is-module@1.0.0:
1033
  resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1034
 
@@ -1046,9 +1378,17 @@ packages:
1046
  is-reference@3.0.3:
1047
  resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
1048
 
 
 
 
 
1049
  isexe@2.0.0:
1050
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1051
 
 
 
 
 
1052
  jiti@2.4.2:
1053
  resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1054
  hasBin: true
@@ -1069,6 +1409,10 @@ packages:
1069
  keyv@4.5.4:
1070
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1071
 
 
 
 
 
1072
  kleur@4.1.5:
1073
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1074
  engines: {node: '>=6'}
@@ -1076,6 +1420,9 @@ packages:
1076
  known-css-properties@0.35.0:
1077
  resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
1078
 
 
 
 
1079
  levn@0.4.1:
1080
  resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1081
  engines: {node: '>= 0.8.0'}
@@ -1152,6 +1499,10 @@ packages:
1152
  resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1153
  engines: {node: '>=14'}
1154
 
 
 
 
 
1155
  locate-character@3.0.0:
1156
  resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
1157
 
@@ -1159,9 +1510,20 @@ packages:
1159
  resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1160
  engines: {node: '>=10'}
1161
 
 
 
 
 
1162
  lodash.merge@4.6.2:
1163
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1164
 
 
 
 
 
 
 
 
1165
  magic-string@0.30.17:
1166
  resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1167
 
@@ -1176,6 +1538,10 @@ packages:
1176
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1177
  engines: {node: '>=8.6'}
1178
 
 
 
 
 
1179
  min-indent@1.0.1:
1180
  resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1181
  engines: {node: '>=4'}
@@ -1194,6 +1560,9 @@ packages:
1194
  resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1195
  hasBin: true
1196
 
 
 
 
1197
  mri@1.2.0:
1198
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1199
  engines: {node: '>=4'}
@@ -1205,6 +1574,9 @@ packages:
1205
  ms@2.1.3:
1206
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1207
 
 
 
 
1208
  nanoid@3.3.8:
1209
  resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1210
  engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -1225,18 +1597,41 @@ packages:
1225
  once@1.4.0:
1226
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1227
 
 
 
 
 
1228
  optionator@0.9.4:
1229
  resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1230
  engines: {node: '>= 0.8.0'}
1231
 
 
 
 
 
 
 
 
 
1232
  p-limit@3.1.0:
1233
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1234
  engines: {node: '>=10'}
1235
 
 
 
 
 
1236
  p-locate@5.0.0:
1237
  resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1238
  engines: {node: '>=10'}
1239
 
 
 
 
 
 
 
 
1240
  parent-module@1.0.1:
1241
  resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1242
  engines: {node: '>=6'}
@@ -1245,6 +1640,10 @@ packages:
1245
  resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1246
  engines: {node: '>=8'}
1247
 
 
 
 
 
1248
  path-is-absolute@1.0.1:
1249
  resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1250
  engines: {node: '>=0.10.0'}
@@ -1260,6 +1659,12 @@ packages:
1260
  resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1261
  engines: {node: '>=8'}
1262
 
 
 
 
 
 
 
1263
  periscopic@3.1.0:
1264
  resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1265
 
@@ -1274,6 +1679,16 @@ packages:
1274
  resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1275
  engines: {node: '>=12'}
1276
 
 
 
 
 
 
 
 
 
 
 
1277
  postcss-load-config@3.1.4:
1278
  resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1279
  engines: {node: '>= 10'}
@@ -1392,13 +1807,28 @@ packages:
1392
  resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1393
  engines: {node: '>=6'}
1394
 
 
 
 
1395
  queue-microtask@1.2.3:
1396
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1397
 
 
 
 
 
 
 
 
 
1398
  readdirp@3.6.0:
1399
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1400
  engines: {node: '>=8.10.0'}
1401
 
 
 
 
 
1402
  resolve-from@4.0.0:
1403
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1404
  engines: {node: '>=4'}
@@ -1408,6 +1838,14 @@ packages:
1408
  engines: {node: '>= 0.4'}
1409
  hasBin: true
1410
 
 
 
 
 
 
 
 
 
1411
  reusify@1.1.0:
1412
  resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1413
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -1427,13 +1865,26 @@ packages:
1427
  engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1428
  hasBin: true
1429
 
 
 
 
 
1430
  run-parallel@1.2.0:
1431
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1432
 
 
 
 
1433
  sade@1.8.1:
1434
  resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1435
  engines: {node: '>=6'}
1436
 
 
 
 
 
 
 
1437
  sander@0.5.1:
1438
  resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1439
 
@@ -1453,6 +1904,9 @@ packages:
1453
  resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1454
  engines: {node: '>=8'}
1455
 
 
 
 
1456
  sirv@3.0.1:
1457
  resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
1458
  engines: {node: '>=18'}
@@ -1469,6 +1923,13 @@ packages:
1469
  resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1470
  engines: {node: '>=0.10.0'}
1471
 
 
 
 
 
 
 
 
1472
  strip-ansi@6.0.1:
1473
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1474
  engines: {node: '>=8'}
@@ -1567,6 +2028,16 @@ packages:
1567
  text-table@0.2.0:
1568
  resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1569
 
 
 
 
 
 
 
 
 
 
 
1570
  to-regex-range@5.0.1:
1571
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1572
  engines: {node: '>=8.0'}
@@ -1581,6 +2052,10 @@ packages:
1581
  peerDependencies:
1582
  typescript: '>=4.2.0'
1583
 
 
 
 
 
1584
  tslib@2.8.1:
1585
  resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1586
 
@@ -1592,11 +2067,72 @@ packages:
1592
  resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
1593
  engines: {node: '>=10'}
1594
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1595
  typescript@5.8.2:
1596
  resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
1597
  engines: {node: '>=14.17'}
1598
  hasBin: true
1599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1600
  uri-js@4.4.1:
1601
  resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1602
 
@@ -1634,23 +2170,78 @@ packages:
1634
  terser:
1635
  optional: true
1636
 
1637
- vitefu@0.2.5:
1638
- resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
 
 
1639
  peerDependencies:
1640
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1641
  peerDependenciesMeta:
1642
  vite:
1643
  optional: true
1644
 
 
 
 
 
 
 
1645
  which@2.0.2:
1646
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1647
  engines: {node: '>= 8'}
1648
  hasBin: true
1649
 
 
 
 
 
 
1650
  word-wrap@1.2.5:
1651
  resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1652
  engines: {node: '>=0.10.0'}
1653
 
 
 
 
 
1654
  wrappy@1.0.2:
1655
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1656
 
@@ -1667,6 +2258,10 @@ packages:
1667
  resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1668
  engines: {node: '>=10'}
1669
 
 
 
 
 
1670
  snapshots:
1671
 
1672
  '@alloc/quick-lru@5.2.0': {}
@@ -1676,75 +2271,157 @@ snapshots:
1676
  '@jridgewell/gen-mapping': 0.3.8
1677
  '@jridgewell/trace-mapping': 0.3.25
1678
 
 
 
 
 
 
 
 
1679
  '@esbuild/aix-ppc64@0.21.5':
1680
  optional: true
1681
 
 
 
 
1682
  '@esbuild/android-arm64@0.21.5':
1683
  optional: true
1684
 
 
 
 
1685
  '@esbuild/android-arm@0.21.5':
1686
  optional: true
1687
 
 
 
 
1688
  '@esbuild/android-x64@0.21.5':
1689
  optional: true
1690
 
 
 
 
1691
  '@esbuild/darwin-arm64@0.21.5':
1692
  optional: true
1693
 
 
 
 
1694
  '@esbuild/darwin-x64@0.21.5':
1695
  optional: true
1696
 
 
 
 
1697
  '@esbuild/freebsd-arm64@0.21.5':
1698
  optional: true
1699
 
 
 
 
1700
  '@esbuild/freebsd-x64@0.21.5':
1701
  optional: true
1702
 
 
 
 
1703
  '@esbuild/linux-arm64@0.21.5':
1704
  optional: true
1705
 
 
 
 
1706
  '@esbuild/linux-arm@0.21.5':
1707
  optional: true
1708
 
 
 
 
1709
  '@esbuild/linux-ia32@0.21.5':
1710
  optional: true
1711
 
 
 
 
1712
  '@esbuild/linux-loong64@0.21.5':
1713
  optional: true
1714
 
 
 
 
1715
  '@esbuild/linux-mips64el@0.21.5':
1716
  optional: true
1717
 
 
 
 
1718
  '@esbuild/linux-ppc64@0.21.5':
1719
  optional: true
1720
 
 
 
 
1721
  '@esbuild/linux-riscv64@0.21.5':
1722
  optional: true
1723
 
 
 
 
1724
  '@esbuild/linux-s390x@0.21.5':
1725
  optional: true
1726
 
 
 
 
1727
  '@esbuild/linux-x64@0.21.5':
1728
  optional: true
1729
 
 
 
 
 
 
 
1730
  '@esbuild/netbsd-x64@0.21.5':
1731
  optional: true
1732
 
 
 
 
 
 
 
1733
  '@esbuild/openbsd-x64@0.21.5':
1734
  optional: true
1735
 
 
 
 
1736
  '@esbuild/sunos-x64@0.21.5':
1737
  optional: true
1738
 
 
 
 
1739
  '@esbuild/win32-arm64@0.21.5':
1740
  optional: true
1741
 
 
 
 
1742
  '@esbuild/win32-ia32@0.21.5':
1743
  optional: true
1744
 
 
 
 
1745
  '@esbuild/win32-x64@0.21.5':
1746
  optional: true
1747
 
 
 
 
1748
  '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)':
1749
  dependencies:
1750
  eslint: 8.57.1
@@ -1803,6 +2480,25 @@ snapshots:
1803
 
1804
  '@humanwhocodes/object-schema@2.0.3': {}
1805
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1806
  '@internationalized/date@3.7.0':
1807
  dependencies:
1808
  '@swc/helpers': 0.5.15
@@ -1941,6 +2637,38 @@ snapshots:
1941
  '@rollup/rollup-win32-x64-msvc@4.34.9':
1942
  optional: true
1943
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1944
  '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))':
1945
  dependencies:
1946
  '@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1))
@@ -2177,6 +2905,10 @@ snapshots:
2177
  json-schema-traverse: 0.4.1
2178
  uri-js: 4.4.1
2179
 
 
 
 
 
2180
  ansi-regex@5.0.1: {}
2181
 
2182
  ansi-styles@4.3.0:
@@ -2192,14 +2924,24 @@ snapshots:
2192
 
2193
  aria-query@5.3.2: {}
2194
 
 
 
2195
  array-union@2.1.0: {}
2196
 
2197
  axobject-query@4.1.0: {}
2198
 
2199
  balanced-match@1.0.2: {}
2200
 
 
 
2201
  binary-extensions@2.3.0: {}
2202
 
 
 
 
 
 
 
2203
  brace-expansion@1.1.11:
2204
  dependencies:
2205
  balanced-match: 1.0.2
@@ -2215,6 +2957,11 @@ snapshots:
2215
 
2216
  buffer-crc32@1.0.0: {}
2217
 
 
 
 
 
 
2218
  callsites@3.1.0: {}
2219
 
2220
  chalk@4.1.2:
@@ -2222,6 +2969,8 @@ snapshots:
2222
  ansi-styles: 4.3.0
2223
  supports-color: 7.2.0
2224
 
 
 
2225
  chokidar@3.6.0:
2226
  dependencies:
2227
  anymatch: 3.1.3
@@ -2234,6 +2983,16 @@ snapshots:
2234
  optionalDependencies:
2235
  fsevents: 2.3.3
2236
 
 
 
 
 
 
 
 
 
 
 
2237
  clsx@2.1.1: {}
2238
 
2239
  code-red@1.0.4:
@@ -2250,12 +3009,32 @@ snapshots:
2250
 
2251
  color-name@1.1.4: {}
2252
 
 
 
 
 
 
 
 
 
 
 
 
 
2253
  commondir@1.0.1: {}
2254
 
2255
  concat-map@0.0.1: {}
2256
 
 
 
 
 
 
 
2257
  cookie@0.6.0: {}
2258
 
 
 
2259
  cross-spawn@7.0.6:
2260
  dependencies:
2261
  path-key: 3.1.1
@@ -2277,6 +3056,12 @@ snapshots:
2277
 
2278
  deepmerge@4.3.1: {}
2279
 
 
 
 
 
 
 
2280
  dequal@2.0.3: {}
2281
 
2282
  detect-indent@6.1.0: {}
@@ -2285,6 +3070,8 @@ snapshots:
2285
 
2286
  devalue@5.1.1: {}
2287
 
 
 
2288
  dir-glob@3.0.1:
2289
  dependencies:
2290
  path-type: 4.0.0
@@ -2293,6 +3080,10 @@ snapshots:
2293
  dependencies:
2294
  esutils: 2.0.3
2295
 
 
 
 
 
2296
  enhanced-resolve@5.18.1:
2297
  dependencies:
2298
  graceful-fs: 4.2.11
@@ -2326,6 +3117,36 @@ snapshots:
2326
  '@esbuild/win32-ia32': 0.21.5
2327
  '@esbuild/win32-x64': 0.21.5
2328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2329
  escape-string-regexp@4.0.0: {}
2330
 
2331
  eslint-compat-utils@0.5.1(eslint@8.57.1):
@@ -2414,6 +3235,8 @@ snapshots:
2414
  acorn-jsx: 5.3.2(acorn@8.14.0)
2415
  eslint-visitor-keys: 3.4.3
2416
 
 
 
2417
  esquery@1.6.0:
2418
  dependencies:
2419
  estraverse: 5.3.0
@@ -2432,6 +3255,14 @@ snapshots:
2432
 
2433
  esutils@2.0.3: {}
2434
 
 
 
 
 
 
 
 
 
2435
  fast-deep-equal@3.1.3: {}
2436
 
2437
  fast-glob@3.3.3:
@@ -2454,6 +3285,10 @@ snapshots:
2454
  optionalDependencies:
2455
  picomatch: 4.0.2
2456
 
 
 
 
 
2457
  file-entry-cache@6.0.1:
2458
  dependencies:
2459
  flat-cache: 3.2.0
@@ -2462,11 +3297,21 @@ snapshots:
2462
  dependencies:
2463
  to-regex-range: 5.0.1
2464
 
 
 
 
 
 
2465
  find-up@5.0.0:
2466
  dependencies:
2467
  locate-path: 6.0.0
2468
  path-exists: 4.0.0
2469
 
 
 
 
 
 
2470
  flat-cache@3.2.0:
2471
  dependencies:
2472
  flatted: 3.3.3
@@ -2503,10 +3348,18 @@ snapshots:
2503
  once: 1.4.0
2504
  path-is-absolute: 1.0.1
2505
 
 
 
 
 
 
 
2506
  globals@13.24.0:
2507
  dependencies:
2508
  type-fest: 0.20.2
2509
 
 
 
2510
  globby@11.1.0:
2511
  dependencies:
2512
  array-union: 2.1.0
@@ -2522,12 +3375,20 @@ snapshots:
2522
 
2523
  has-flag@4.0.0: {}
2524
 
 
 
2525
  hasown@2.0.2:
2526
  dependencies:
2527
  function-bind: 1.1.2
2528
 
2529
  highlight.js@11.11.1: {}
2530
 
 
 
 
 
 
 
2531
  ignore@5.3.2: {}
2532
 
2533
  import-fresh@3.3.1:
@@ -2546,6 +3407,26 @@ snapshots:
2546
 
2547
  inherits@2.0.4: {}
2548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2549
  is-binary-path@2.1.0:
2550
  dependencies:
2551
  binary-extensions: 2.3.0
@@ -2556,10 +3437,14 @@ snapshots:
2556
 
2557
  is-extglob@2.1.1: {}
2558
 
 
 
2559
  is-glob@4.0.3:
2560
  dependencies:
2561
  is-extglob: 2.1.1
2562
 
 
 
2563
  is-module@1.0.0: {}
2564
 
2565
  is-number@7.0.0: {}
@@ -2574,8 +3459,12 @@ snapshots:
2574
  dependencies:
2575
  '@types/estree': 1.0.6
2576
 
 
 
2577
  isexe@2.0.0: {}
2578
 
 
 
2579
  jiti@2.4.2: {}
2580
 
2581
  js-yaml@4.1.0:
@@ -2592,10 +3481,14 @@ snapshots:
2592
  dependencies:
2593
  json-buffer: 3.0.1
2594
 
 
 
2595
  kleur@4.1.5: {}
2596
 
2597
  known-css-properties@0.35.0: {}
2598
 
 
 
2599
  levn@0.4.1:
2600
  dependencies:
2601
  prelude-ls: 1.2.1
@@ -2651,14 +3544,31 @@ snapshots:
2651
  lilconfig@3.1.3:
2652
  optional: true
2653
 
 
 
 
 
 
 
2654
  locate-character@3.0.0: {}
2655
 
2656
  locate-path@6.0.0:
2657
  dependencies:
2658
  p-locate: 5.0.0
2659
 
 
 
 
 
2660
  lodash.merge@4.6.2: {}
2661
 
 
 
 
 
 
 
 
2662
  magic-string@0.30.17:
2663
  dependencies:
2664
  '@jridgewell/sourcemap-codec': 1.5.0
@@ -2672,6 +3582,8 @@ snapshots:
2672
  braces: 3.0.3
2673
  picomatch: 2.3.1
2674
 
 
 
2675
  min-indent@1.0.1: {}
2676
 
2677
  minimatch@3.1.2:
@@ -2688,12 +3600,21 @@ snapshots:
2688
  dependencies:
2689
  minimist: 1.2.8
2690
 
 
 
 
 
 
 
 
2691
  mri@1.2.0: {}
2692
 
2693
  mrmime@2.0.1: {}
2694
 
2695
  ms@2.1.3: {}
2696
 
 
 
2697
  nanoid@3.3.8: {}
2698
 
2699
  nanoid@5.1.2: {}
@@ -2706,6 +3627,10 @@ snapshots:
2706
  dependencies:
2707
  wrappy: 1.0.2
2708
 
 
 
 
 
2709
  optionator@0.9.4:
2710
  dependencies:
2711
  deep-is: 0.1.4
@@ -2715,20 +3640,48 @@ snapshots:
2715
  type-check: 0.4.0
2716
  word-wrap: 1.2.5
2717
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2718
  p-limit@3.1.0:
2719
  dependencies:
2720
  yocto-queue: 0.1.0
2721
 
 
 
 
 
2722
  p-locate@5.0.0:
2723
  dependencies:
2724
  p-limit: 3.1.0
2725
 
 
 
 
 
 
 
 
 
2726
  parent-module@1.0.1:
2727
  dependencies:
2728
  callsites: 3.1.0
2729
 
2730
  path-exists@4.0.0: {}
2731
 
 
 
2732
  path-is-absolute@1.0.1: {}
2733
 
2734
  path-key@3.1.1: {}
@@ -2737,6 +3690,10 @@ snapshots:
2737
 
2738
  path-type@4.0.0: {}
2739
 
 
 
 
 
2740
  periscopic@3.1.0:
2741
  dependencies:
2742
  '@types/estree': 1.0.6
@@ -2749,6 +3706,22 @@ snapshots:
2749
 
2750
  picomatch@4.0.2: {}
2751
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2752
  postcss-load-config@3.1.4(postcss@8.5.3):
2753
  dependencies:
2754
  lilconfig: 2.1.0
@@ -2800,12 +3773,27 @@ snapshots:
2800
 
2801
  punycode@2.3.1: {}
2802
 
 
 
2803
  queue-microtask@1.2.3: {}
2804
 
 
 
 
 
 
 
 
 
 
 
 
2805
  readdirp@3.6.0:
2806
  dependencies:
2807
  picomatch: 2.3.1
2808
 
 
 
2809
  resolve-from@4.0.0: {}
2810
 
2811
  resolve@1.22.10:
@@ -2814,6 +3802,13 @@ snapshots:
2814
  path-parse: 1.0.7
2815
  supports-preserve-symlinks-flag: 1.0.0
2816
 
 
 
 
 
 
 
 
2817
  reusify@1.1.0: {}
2818
 
2819
  rimraf@2.7.1:
@@ -2849,14 +3844,24 @@ snapshots:
2849
  '@rollup/rollup-win32-x64-msvc': 4.34.9
2850
  fsevents: 2.3.3
2851
 
 
 
2852
  run-parallel@1.2.0:
2853
  dependencies:
2854
  queue-microtask: 1.2.3
2855
 
 
 
 
 
2856
  sade@1.8.1:
2857
  dependencies:
2858
  mri: 1.2.0
2859
 
 
 
 
 
2860
  sander@0.5.1:
2861
  dependencies:
2862
  es6-promise: 3.3.1
@@ -2874,6 +3879,8 @@ snapshots:
2874
 
2875
  shebang-regex@3.0.0: {}
2876
 
 
 
2877
  sirv@3.0.1:
2878
  dependencies:
2879
  '@polka/url': 1.0.0-next.28
@@ -2891,6 +3898,16 @@ snapshots:
2891
 
2892
  source-map-js@1.2.1: {}
2893
 
 
 
 
 
 
 
 
 
 
 
2894
  strip-ansi@6.0.1:
2895
  dependencies:
2896
  ansi-regex: 5.0.1
@@ -2981,6 +3998,14 @@ snapshots:
2981
 
2982
  text-table@0.2.0: {}
2983
 
 
 
 
 
 
 
 
 
2984
  to-regex-range@5.0.1:
2985
  dependencies:
2986
  is-number: 7.0.0
@@ -2991,6 +4016,15 @@ snapshots:
2991
  dependencies:
2992
  typescript: 5.8.2
2993
 
 
 
 
 
 
 
 
 
 
2994
  tslib@2.8.1: {}
2995
 
2996
  type-check@0.4.0:
@@ -2999,8 +4033,58 @@ snapshots:
2999
 
3000
  type-fest@0.20.2: {}
3001
 
 
 
 
 
 
 
3002
  typescript@5.8.2: {}
3003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3004
  uri-js@4.4.1:
3005
  dependencies:
3006
  punycode: 2.3.1
@@ -3016,16 +4100,43 @@ snapshots:
3016
  fsevents: 2.3.3
3017
  lightningcss: 1.29.1
3018
 
 
 
 
 
 
 
 
 
 
 
 
3019
  vitefu@0.2.5(vite@5.4.14(lightningcss@1.29.1)):
3020
  optionalDependencies:
3021
  vite: 5.4.14(lightningcss@1.29.1)
3022
 
 
 
 
 
 
 
3023
  which@2.0.2:
3024
  dependencies:
3025
  isexe: 2.0.0
3026
 
 
 
 
 
3027
  word-wrap@1.2.5: {}
3028
 
 
 
 
 
 
 
3029
  wrappy@1.0.2: {}
3030
 
3031
  yaml@1.10.2: {}
@@ -3034,3 +4145,5 @@ snapshots:
3034
  optional: true
3035
 
3036
  yocto-queue@0.1.0: {}
 
 
 
23
  '@tailwindcss/container-queries':
24
  specifier: ^0.1.1
25
  version: 0.1.1(tailwindcss@4.0.9)
26
+ typia:
27
+ specifier: ^8.0.0
28
+ version: 8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2)
29
  devDependencies:
30
+ '@iconify-json/carbon':
31
+ specifier: ^1.2.8
32
+ version: 1.2.8
33
+ '@ryoppippi/unplugin-typia':
34
+ specifier: ^1.0.0
35
+ version: 1.2.0(@samchon/openapi@3.0.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.9)(yaml@2.7.0)
36
+ '@samchon/openapi':
37
+ specifier: ^3.0.0
38
+ version: 3.0.0
39
  '@sveltejs/adapter-auto':
40
  specifier: ^3.2.2
41
  version: 3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))
 
96
  tailwindcss:
97
  specifier: ^4.0.9
98
  version: 4.0.9
99
+ ts-patch:
100
+ specifier: ^3.3.0
101
+ version: 3.3.0
102
  tslib:
103
  specifier: ^2.4.1
104
  version: 2.8.1
105
  typescript:
106
+ specifier: ^5.8.2
107
  version: 5.8.2
108
+ unplugin-icons:
109
+ specifier: ^22.1.0
110
+ version: 22.1.0(svelte@4.2.19)
111
  vite:
112
  specifier: ^5.0.3
113
  version: 5.4.14(lightningcss@1.29.1)
 
122
  resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
123
  engines: {node: '>=6.0.0'}
124
 
125
+ '@antfu/install-pkg@1.0.0':
126
+ resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
127
+
128
+ '@antfu/utils@8.1.1':
129
+ resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
130
+
131
  '@esbuild/aix-ppc64@0.21.5':
132
  resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
133
  engines: {node: '>=12'}
134
  cpu: [ppc64]
135
  os: [aix]
136
 
137
+ '@esbuild/aix-ppc64@0.25.1':
138
+ resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
139
+ engines: {node: '>=18'}
140
+ cpu: [ppc64]
141
+ os: [aix]
142
+
143
  '@esbuild/android-arm64@0.21.5':
144
  resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
145
  engines: {node: '>=12'}
146
  cpu: [arm64]
147
  os: [android]
148
 
149
+ '@esbuild/android-arm64@0.25.1':
150
+ resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
151
+ engines: {node: '>=18'}
152
+ cpu: [arm64]
153
+ os: [android]
154
+
155
  '@esbuild/android-arm@0.21.5':
156
  resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
157
  engines: {node: '>=12'}
158
  cpu: [arm]
159
  os: [android]
160
 
161
+ '@esbuild/android-arm@0.25.1':
162
+ resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==}
163
+ engines: {node: '>=18'}
164
+ cpu: [arm]
165
+ os: [android]
166
+
167
  '@esbuild/android-x64@0.21.5':
168
  resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
169
  engines: {node: '>=12'}
170
  cpu: [x64]
171
  os: [android]
172
 
173
+ '@esbuild/android-x64@0.25.1':
174
+ resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
175
+ engines: {node: '>=18'}
176
+ cpu: [x64]
177
+ os: [android]
178
+
179
  '@esbuild/darwin-arm64@0.21.5':
180
  resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
181
  engines: {node: '>=12'}
182
  cpu: [arm64]
183
  os: [darwin]
184
 
185
+ '@esbuild/darwin-arm64@0.25.1':
186
+ resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==}
187
+ engines: {node: '>=18'}
188
+ cpu: [arm64]
189
+ os: [darwin]
190
+
191
  '@esbuild/darwin-x64@0.21.5':
192
  resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
193
  engines: {node: '>=12'}
194
  cpu: [x64]
195
  os: [darwin]
196
 
197
+ '@esbuild/darwin-x64@0.25.1':
198
+ resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
199
+ engines: {node: '>=18'}
200
+ cpu: [x64]
201
+ os: [darwin]
202
+
203
  '@esbuild/freebsd-arm64@0.21.5':
204
  resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
205
  engines: {node: '>=12'}
206
  cpu: [arm64]
207
  os: [freebsd]
208
 
209
+ '@esbuild/freebsd-arm64@0.25.1':
210
+ resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
211
+ engines: {node: '>=18'}
212
+ cpu: [arm64]
213
+ os: [freebsd]
214
+
215
  '@esbuild/freebsd-x64@0.21.5':
216
  resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
217
  engines: {node: '>=12'}
218
  cpu: [x64]
219
  os: [freebsd]
220
 
221
+ '@esbuild/freebsd-x64@0.25.1':
222
+ resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
223
+ engines: {node: '>=18'}
224
+ cpu: [x64]
225
+ os: [freebsd]
226
+
227
  '@esbuild/linux-arm64@0.21.5':
228
  resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
229
  engines: {node: '>=12'}
230
  cpu: [arm64]
231
  os: [linux]
232
 
233
+ '@esbuild/linux-arm64@0.25.1':
234
+ resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
235
+ engines: {node: '>=18'}
236
+ cpu: [arm64]
237
+ os: [linux]
238
+
239
  '@esbuild/linux-arm@0.21.5':
240
  resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
241
  engines: {node: '>=12'}
242
  cpu: [arm]
243
  os: [linux]
244
 
245
+ '@esbuild/linux-arm@0.25.1':
246
+ resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
247
+ engines: {node: '>=18'}
248
+ cpu: [arm]
249
+ os: [linux]
250
+
251
  '@esbuild/linux-ia32@0.21.5':
252
  resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
253
  engines: {node: '>=12'}
254
  cpu: [ia32]
255
  os: [linux]
256
 
257
+ '@esbuild/linux-ia32@0.25.1':
258
+ resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
259
+ engines: {node: '>=18'}
260
+ cpu: [ia32]
261
+ os: [linux]
262
+
263
  '@esbuild/linux-loong64@0.21.5':
264
  resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
265
  engines: {node: '>=12'}
266
  cpu: [loong64]
267
  os: [linux]
268
 
269
+ '@esbuild/linux-loong64@0.25.1':
270
+ resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
271
+ engines: {node: '>=18'}
272
+ cpu: [loong64]
273
+ os: [linux]
274
+
275
  '@esbuild/linux-mips64el@0.21.5':
276
  resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
277
  engines: {node: '>=12'}
278
  cpu: [mips64el]
279
  os: [linux]
280
 
281
+ '@esbuild/linux-mips64el@0.25.1':
282
+ resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
283
+ engines: {node: '>=18'}
284
+ cpu: [mips64el]
285
+ os: [linux]
286
+
287
  '@esbuild/linux-ppc64@0.21.5':
288
  resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
289
  engines: {node: '>=12'}
290
  cpu: [ppc64]
291
  os: [linux]
292
 
293
+ '@esbuild/linux-ppc64@0.25.1':
294
+ resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
295
+ engines: {node: '>=18'}
296
+ cpu: [ppc64]
297
+ os: [linux]
298
+
299
  '@esbuild/linux-riscv64@0.21.5':
300
  resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
301
  engines: {node: '>=12'}
302
  cpu: [riscv64]
303
  os: [linux]
304
 
305
+ '@esbuild/linux-riscv64@0.25.1':
306
+ resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
307
+ engines: {node: '>=18'}
308
+ cpu: [riscv64]
309
+ os: [linux]
310
+
311
  '@esbuild/linux-s390x@0.21.5':
312
  resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
313
  engines: {node: '>=12'}
314
  cpu: [s390x]
315
  os: [linux]
316
 
317
+ '@esbuild/linux-s390x@0.25.1':
318
+ resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
319
+ engines: {node: '>=18'}
320
+ cpu: [s390x]
321
+ os: [linux]
322
+
323
  '@esbuild/linux-x64@0.21.5':
324
  resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
325
  engines: {node: '>=12'}
326
  cpu: [x64]
327
  os: [linux]
328
 
329
+ '@esbuild/linux-x64@0.25.1':
330
+ resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
331
+ engines: {node: '>=18'}
332
+ cpu: [x64]
333
+ os: [linux]
334
+
335
+ '@esbuild/netbsd-arm64@0.25.1':
336
+ resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==}
337
+ engines: {node: '>=18'}
338
+ cpu: [arm64]
339
+ os: [netbsd]
340
+
341
  '@esbuild/netbsd-x64@0.21.5':
342
  resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
343
  engines: {node: '>=12'}
344
  cpu: [x64]
345
  os: [netbsd]
346
 
347
+ '@esbuild/netbsd-x64@0.25.1':
348
+ resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
349
+ engines: {node: '>=18'}
350
+ cpu: [x64]
351
+ os: [netbsd]
352
+
353
+ '@esbuild/openbsd-arm64@0.25.1':
354
+ resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
355
+ engines: {node: '>=18'}
356
+ cpu: [arm64]
357
+ os: [openbsd]
358
+
359
  '@esbuild/openbsd-x64@0.21.5':
360
  resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
361
  engines: {node: '>=12'}
362
  cpu: [x64]
363
  os: [openbsd]
364
 
365
+ '@esbuild/openbsd-x64@0.25.1':
366
+ resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
367
+ engines: {node: '>=18'}
368
+ cpu: [x64]
369
+ os: [openbsd]
370
+
371
  '@esbuild/sunos-x64@0.21.5':
372
  resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
373
  engines: {node: '>=12'}
374
  cpu: [x64]
375
  os: [sunos]
376
 
377
+ '@esbuild/sunos-x64@0.25.1':
378
+ resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
379
+ engines: {node: '>=18'}
380
+ cpu: [x64]
381
+ os: [sunos]
382
+
383
  '@esbuild/win32-arm64@0.21.5':
384
  resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
385
  engines: {node: '>=12'}
386
  cpu: [arm64]
387
  os: [win32]
388
 
389
+ '@esbuild/win32-arm64@0.25.1':
390
+ resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==}
391
+ engines: {node: '>=18'}
392
+ cpu: [arm64]
393
+ os: [win32]
394
+
395
  '@esbuild/win32-ia32@0.21.5':
396
  resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
397
  engines: {node: '>=12'}
398
  cpu: [ia32]
399
  os: [win32]
400
 
401
+ '@esbuild/win32-ia32@0.25.1':
402
+ resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
403
+ engines: {node: '>=18'}
404
+ cpu: [ia32]
405
+ os: [win32]
406
+
407
  '@esbuild/win32-x64@0.21.5':
408
  resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
409
  engines: {node: '>=12'}
410
  cpu: [x64]
411
  os: [win32]
412
 
413
+ '@esbuild/win32-x64@0.25.1':
414
+ resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
415
+ engines: {node: '>=18'}
416
+ cpu: [x64]
417
+ os: [win32]
418
+
419
  '@eslint-community/eslint-utils@4.4.1':
420
  resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
421
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
470
  resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
471
  deprecated: Use @eslint/object-schema instead
472
 
473
+ '@iconify-json/carbon@1.2.8':
474
+ resolution: {integrity: sha512-6xh4YiFBz6qoSnB3XMe23WvjTJroDFXB17J1MbiT7nATFe+70+em1acRXr8hgP/gYpwFMHFc4IvjA/IPTPnTzg==}
475
+
476
+ '@iconify/types@2.0.0':
477
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
478
+
479
+ '@iconify/utils@2.3.0':
480
+ resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
481
+
482
  '@internationalized/date@3.7.0':
483
  resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==}
484
 
 
651
  cpu: [x64]
652
  os: [win32]
653
 
654
+ '@ryoppippi/unplugin-typia@1.2.0':
655
+ resolution: {integrity: sha512-TlrqL2WQie2HvSqJpmKPXrFsNPbMwU5Jw2Asx+E3E3Fuyya5mN1lqaeILwSZLmkCOMTQLazIrTWNOGs0V6XL6A==}
656
+
657
+ '@samchon/openapi@3.0.0':
658
+ resolution: {integrity: sha512-eVQlyKRYv1/C2Mikc1xZr7c0jMjg1vjPkeY/gheKB4c5WOOWyTNZ1uvnXR+ETpPHwaQ54I9NrQZhoNk6BEGuuw==}
659
+
660
  '@sveltejs/adapter-auto@3.3.1':
661
  resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
662
  peerDependencies:
 
867
  ajv@6.12.6:
868
  resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
869
 
870
+ ansi-escapes@4.3.2:
871
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
872
+ engines: {node: '>=8'}
873
+
874
  ansi-regex@5.0.1:
875
  resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
876
  engines: {node: '>=8'}
 
890
  resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
891
  engines: {node: '>= 0.4'}
892
 
893
+ array-timsort@1.0.3:
894
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
895
+
896
  array-union@2.1.0:
897
  resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
898
  engines: {node: '>=8'}
 
904
  balanced-match@1.0.2:
905
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
906
 
907
+ base64-js@1.5.1:
908
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
909
+
910
  binary-extensions@2.3.0:
911
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
912
  engines: {node: '>=8'}
913
 
914
+ bl@4.1.0:
915
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
916
+
917
  brace-expansion@1.1.11:
918
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
919
 
 
928
  resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
929
  engines: {node: '>=8.0.0'}
930
 
931
+ buffer@5.7.1:
932
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
933
+
934
  callsites@3.1.0:
935
  resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
936
  engines: {node: '>=6'}
 
939
  resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
940
  engines: {node: '>=10'}
941
 
942
+ chardet@0.7.0:
943
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
944
+
945
  chokidar@3.6.0:
946
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
947
  engines: {node: '>= 8.10.0'}
948
 
949
+ cli-cursor@3.1.0:
950
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
951
+ engines: {node: '>=8'}
952
+
953
+ cli-spinners@2.9.2:
954
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
955
+ engines: {node: '>=6'}
956
+
957
+ cli-width@3.0.0:
958
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
959
+ engines: {node: '>= 10'}
960
+
961
+ clone@1.0.4:
962
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
963
+ engines: {node: '>=0.8'}
964
+
965
  clsx@2.1.1:
966
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
967
  engines: {node: '>=6'}
 
976
  color-name@1.1.4:
977
  resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
978
 
979
+ commander@10.0.1:
980
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
981
+ engines: {node: '>=14'}
982
+
983
+ comment-json@4.2.5:
984
+ resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==}
985
+ engines: {node: '>= 6'}
986
+
987
+ common-path-prefix@3.0.0:
988
+ resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
989
+
990
  commondir@1.0.1:
991
  resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
992
 
993
  concat-map@0.0.1:
994
  resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
995
 
996
+ confbox@0.1.8:
997
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
998
+
999
+ confbox@0.2.1:
1000
+ resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
1001
+
1002
+ consola@3.4.0:
1003
+ resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
1004
+ engines: {node: ^14.18.0 || >=16.10.0}
1005
+
1006
  cookie@0.6.0:
1007
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
1008
  engines: {node: '>= 0.6'}
1009
 
1010
+ core-util-is@1.0.3:
1011
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1012
+
1013
  cross-spawn@7.0.6:
1014
  resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
1015
  engines: {node: '>= 8'}
 
1039
  resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
1040
  engines: {node: '>=0.10.0'}
1041
 
1042
+ defaults@1.0.4:
1043
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
1044
+
1045
+ defu@6.1.4:
1046
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
1047
+
1048
  dequal@2.0.3:
1049
  resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
1050
  engines: {node: '>=6'}
 
1061
  devalue@5.1.1:
1062
  resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
1063
 
1064
+ diff-match-patch@1.0.5:
1065
+ resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
1066
+
1067
  dir-glob@3.0.1:
1068
  resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1069
  engines: {node: '>=8'}
 
1072
  resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1073
  engines: {node: '>=6.0.0'}
1074
 
1075
+ drange@1.1.1:
1076
+ resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==}
1077
+ engines: {node: '>=4'}
1078
+
1079
+ emoji-regex@8.0.0:
1080
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1081
+
1082
  enhanced-resolve@5.18.1:
1083
  resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
1084
  engines: {node: '>=10.13.0'}
 
1091
  engines: {node: '>=12'}
1092
  hasBin: true
1093
 
1094
+ esbuild@0.25.1:
1095
+ resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
1096
+ engines: {node: '>=18'}
1097
+ hasBin: true
1098
+
1099
+ escape-string-regexp@1.0.5:
1100
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1101
+ engines: {node: '>=0.8.0'}
1102
+
1103
  escape-string-regexp@4.0.0:
1104
  resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1105
  engines: {node: '>=10'}
 
1147
  resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1148
  engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1149
 
1150
+ esprima@4.0.1:
1151
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1152
+ engines: {node: '>=4'}
1153
+ hasBin: true
1154
+
1155
  esquery@1.6.0:
1156
  resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
1157
  engines: {node: '>=0.10'}
 
1174
  resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1175
  engines: {node: '>=0.10.0'}
1176
 
1177
+ exsolve@1.0.4:
1178
+ resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
1179
+
1180
+ external-editor@3.1.0:
1181
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
1182
+ engines: {node: '>=4'}
1183
+
1184
  fast-deep-equal@3.1.3:
1185
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1186
 
 
1205
  picomatch:
1206
  optional: true
1207
 
1208
+ figures@3.2.0:
1209
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
1210
+ engines: {node: '>=8'}
1211
+
1212
  file-entry-cache@6.0.1:
1213
  resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1214
  engines: {node: ^10.12.0 || >=12.0.0}
 
1217
  resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1218
  engines: {node: '>=8'}
1219
 
1220
+ find-cache-dir@5.0.0:
1221
+ resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==}
1222
+ engines: {node: '>=16'}
1223
+
1224
  find-up@5.0.0:
1225
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1226
  engines: {node: '>=10'}
1227
 
1228
+ find-up@6.3.0:
1229
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
1230
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1231
+
1232
  flat-cache@3.2.0:
1233
  resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
1234
  engines: {node: ^10.12.0 || >=12.0.0}
 
1262
  resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1263
  deprecated: Glob versions prior to v9 are no longer supported
1264
 
1265
+ global-prefix@4.0.0:
1266
+ resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
1267
+ engines: {node: '>=16'}
1268
+
1269
  globals@13.24.0:
1270
  resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
1271
  engines: {node: '>=8'}
1272
 
1273
+ globals@15.15.0:
1274
+ resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
1275
+ engines: {node: '>=18'}
1276
+
1277
  globby@11.1.0:
1278
  resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1279
  engines: {node: '>=10'}
 
1288
  resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1289
  engines: {node: '>=8'}
1290
 
1291
+ has-own-prop@2.0.0:
1292
+ resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
1293
+ engines: {node: '>=8'}
1294
+
1295
  hasown@2.0.2:
1296
  resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1297
  engines: {node: '>= 0.4'}
 
1300
  resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
1301
  engines: {node: '>=12.0.0'}
1302
 
1303
+ iconv-lite@0.4.24:
1304
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1305
+ engines: {node: '>=0.10.0'}
1306
+
1307
+ ieee754@1.2.1:
1308
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1309
+
1310
  ignore@5.3.2:
1311
  resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1312
  engines: {node: '>= 4'}
 
1329
  inherits@2.0.4:
1330
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1331
 
1332
+ ini@4.1.3:
1333
+ resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
1334
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1335
+
1336
+ inquirer@8.2.6:
1337
+ resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
1338
+ engines: {node: '>=12.0.0'}
1339
+
1340
  is-binary-path@2.1.0:
1341
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1342
  engines: {node: '>=8'}
 
1349
  resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1350
  engines: {node: '>=0.10.0'}
1351
 
1352
+ is-fullwidth-code-point@3.0.0:
1353
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1354
+ engines: {node: '>=8'}
1355
+
1356
  is-glob@4.0.3:
1357
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1358
  engines: {node: '>=0.10.0'}
1359
 
1360
+ is-interactive@1.0.0:
1361
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1362
+ engines: {node: '>=8'}
1363
+
1364
  is-module@1.0.0:
1365
  resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1366
 
 
1378
  is-reference@3.0.3:
1379
  resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
1380
 
1381
+ is-unicode-supported@0.1.0:
1382
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1383
+ engines: {node: '>=10'}
1384
+
1385
  isexe@2.0.0:
1386
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1387
 
1388
+ isexe@3.1.1:
1389
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
1390
+ engines: {node: '>=16'}
1391
+
1392
  jiti@2.4.2:
1393
  resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1394
  hasBin: true
 
1409
  keyv@4.5.4:
1410
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1411
 
1412
+ kind-of@6.0.3:
1413
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1414
+ engines: {node: '>=0.10.0'}
1415
+
1416
  kleur@4.1.5:
1417
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1418
  engines: {node: '>=6'}
 
1420
  known-css-properties@0.35.0:
1421
  resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
1422
 
1423
+ kolorist@1.8.0:
1424
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1425
+
1426
  levn@0.4.1:
1427
  resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1428
  engines: {node: '>= 0.8.0'}
 
1499
  resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1500
  engines: {node: '>=14'}
1501
 
1502
+ local-pkg@1.1.1:
1503
+ resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
1504
+ engines: {node: '>=14'}
1505
+
1506
  locate-character@3.0.0:
1507
  resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
1508
 
 
1510
  resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1511
  engines: {node: '>=10'}
1512
 
1513
+ locate-path@7.2.0:
1514
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
1515
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1516
+
1517
  lodash.merge@4.6.2:
1518
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1519
 
1520
+ lodash@4.17.21:
1521
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1522
+
1523
+ log-symbols@4.1.0:
1524
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1525
+ engines: {node: '>=10'}
1526
+
1527
  magic-string@0.30.17:
1528
  resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1529
 
 
1538
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1539
  engines: {node: '>=8.6'}
1540
 
1541
+ mimic-fn@2.1.0:
1542
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1543
+ engines: {node: '>=6'}
1544
+
1545
  min-indent@1.0.1:
1546
  resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
1547
  engines: {node: '>=4'}
 
1560
  resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
1561
  hasBin: true
1562
 
1563
+ mlly@1.7.4:
1564
+ resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
1565
+
1566
  mri@1.2.0:
1567
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1568
  engines: {node: '>=4'}
 
1574
  ms@2.1.3:
1575
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1576
 
1577
+ mute-stream@0.0.8:
1578
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
1579
+
1580
  nanoid@3.3.8:
1581
  resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1582
  engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 
1597
  once@1.4.0:
1598
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1599
 
1600
+ onetime@5.1.2:
1601
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1602
+ engines: {node: '>=6'}
1603
+
1604
  optionator@0.9.4:
1605
  resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1606
  engines: {node: '>= 0.8.0'}
1607
 
1608
+ ora@5.4.1:
1609
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
1610
+ engines: {node: '>=10'}
1611
+
1612
+ os-tmpdir@1.0.2:
1613
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1614
+ engines: {node: '>=0.10.0'}
1615
+
1616
  p-limit@3.1.0:
1617
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1618
  engines: {node: '>=10'}
1619
 
1620
+ p-limit@4.0.0:
1621
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
1622
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1623
+
1624
  p-locate@5.0.0:
1625
  resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1626
  engines: {node: '>=10'}
1627
 
1628
+ p-locate@6.0.0:
1629
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
1630
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1631
+
1632
+ package-manager-detector@0.2.11:
1633
+ resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
1634
+
1635
  parent-module@1.0.1:
1636
  resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1637
  engines: {node: '>=6'}
 
1640
  resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1641
  engines: {node: '>=8'}
1642
 
1643
+ path-exists@5.0.0:
1644
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
1645
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1646
+
1647
  path-is-absolute@1.0.1:
1648
  resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1649
  engines: {node: '>=0.10.0'}
 
1659
  resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1660
  engines: {node: '>=8'}
1661
 
1662
+ pathe@1.1.2:
1663
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
1664
+
1665
+ pathe@2.0.3:
1666
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1667
+
1668
  periscopic@3.1.0:
1669
  resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1670
 
 
1679
  resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1680
  engines: {node: '>=12'}
1681
 
1682
+ pkg-dir@7.0.0:
1683
+ resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
1684
+ engines: {node: '>=14.16'}
1685
+
1686
+ pkg-types@1.3.1:
1687
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
1688
+
1689
+ pkg-types@2.1.0:
1690
+ resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
1691
+
1692
  postcss-load-config@3.1.4:
1693
  resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
1694
  engines: {node: '>= 10'}
 
1807
  resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1808
  engines: {node: '>=6'}
1809
 
1810
+ quansync@0.2.8:
1811
+ resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
1812
+
1813
  queue-microtask@1.2.3:
1814
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1815
 
1816
+ randexp@0.5.3:
1817
+ resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
1818
+ engines: {node: '>=4'}
1819
+
1820
+ readable-stream@3.6.2:
1821
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
1822
+ engines: {node: '>= 6'}
1823
+
1824
  readdirp@3.6.0:
1825
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1826
  engines: {node: '>=8.10.0'}
1827
 
1828
+ repeat-string@1.6.1:
1829
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
1830
+ engines: {node: '>=0.10'}
1831
+
1832
  resolve-from@4.0.0:
1833
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1834
  engines: {node: '>=4'}
 
1838
  engines: {node: '>= 0.4'}
1839
  hasBin: true
1840
 
1841
+ restore-cursor@3.1.0:
1842
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
1843
+ engines: {node: '>=8'}
1844
+
1845
+ ret@0.2.2:
1846
+ resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==}
1847
+ engines: {node: '>=4'}
1848
+
1849
  reusify@1.1.0:
1850
  resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1851
  engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
 
1865
  engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1866
  hasBin: true
1867
 
1868
+ run-async@2.4.1:
1869
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
1870
+ engines: {node: '>=0.12.0'}
1871
+
1872
  run-parallel@1.2.0:
1873
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1874
 
1875
+ rxjs@7.8.2:
1876
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
1877
+
1878
  sade@1.8.1:
1879
  resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1880
  engines: {node: '>=6'}
1881
 
1882
+ safe-buffer@5.2.1:
1883
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1884
+
1885
+ safer-buffer@2.1.2:
1886
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1887
+
1888
  sander@0.5.1:
1889
  resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1890
 
 
1904
  resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1905
  engines: {node: '>=8'}
1906
 
1907
+ signal-exit@3.0.7:
1908
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1909
+
1910
  sirv@3.0.1:
1911
  resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
1912
  engines: {node: '>=18'}
 
1923
  resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1924
  engines: {node: '>=0.10.0'}
1925
 
1926
+ string-width@4.2.3:
1927
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1928
+ engines: {node: '>=8'}
1929
+
1930
+ string_decoder@1.3.0:
1931
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1932
+
1933
  strip-ansi@6.0.1:
1934
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1935
  engines: {node: '>=8'}
 
2028
  text-table@0.2.0:
2029
  resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2030
 
2031
+ through@2.3.8:
2032
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
2033
+
2034
+ tinyexec@0.3.2:
2035
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
2036
+
2037
+ tmp@0.0.33:
2038
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
2039
+ engines: {node: '>=0.6.0'}
2040
+
2041
  to-regex-range@5.0.1:
2042
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2043
  engines: {node: '>=8.0'}
 
2052
  peerDependencies:
2053
  typescript: '>=4.2.0'
2054
 
2055
+ ts-patch@3.3.0:
2056
+ resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
2057
+ hasBin: true
2058
+
2059
  tslib@2.8.1:
2060
  resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
2061
 
 
2067
  resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
2068
  engines: {node: '>=10'}
2069
 
2070
+ type-fest@0.21.3:
2071
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
2072
+ engines: {node: '>=10'}
2073
+
2074
+ type-fest@4.37.0:
2075
+ resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
2076
+ engines: {node: '>=16'}
2077
+
2078
+ typescript@5.6.3:
2079
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
2080
+ engines: {node: '>=14.17'}
2081
+ hasBin: true
2082
+
2083
  typescript@5.8.2:
2084
  resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
2085
  engines: {node: '>=14.17'}
2086
  hasBin: true
2087
 
2088
+ typia@7.6.4:
2089
+ resolution: {integrity: sha512-Z3AcvGBjS7Dc7+iAG2VhsT0NIv3HMoXVTJ3F7Pgth8z7rhQu1JnyS8GGqqWdKk5ROvOgALEVEWmWv3Lym2eBIg==}
2090
+ hasBin: true
2091
+ peerDependencies:
2092
+ '@samchon/openapi': '>=2.4.2 <3.0.0'
2093
+ typescript: '>=4.8.0 <5.8.0'
2094
+
2095
+ typia@8.0.0:
2096
+ resolution: {integrity: sha512-ulYqugl0rXStArmFBxTxwC796gW4KkRas7wy7hOYwtRulxfBOJlurZMZ9MA8lN9LrgOpX/bnW0bW3w75ws6wIA==}
2097
+ hasBin: true
2098
+ peerDependencies:
2099
+ '@samchon/openapi': '>=3.0.0 <4.0.0'
2100
+ typescript: '>=4.8.0 <5.9.0'
2101
+
2102
+ ufo@1.5.4:
2103
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
2104
+
2105
+ unplugin-icons@22.1.0:
2106
+ resolution: {integrity: sha512-ect2ZNtk1Zgwb0NVHd0C1IDW/MV+Jk/xaq4t8o6rYdVS3+L660ZdD5kTSQZvsgdwCvquRw+/wYn75hsweRjoIA==}
2107
+ peerDependencies:
2108
+ '@svgr/core': '>=7.0.0'
2109
+ '@svgx/core': ^1.0.1
2110
+ '@vue/compiler-sfc': ^3.0.2 || ^2.7.0
2111
+ svelte: ^3.0.0 || ^4.0.0 || ^5.0.0
2112
+ vue-template-compiler: ^2.6.12
2113
+ vue-template-es2015-compiler: ^1.9.0
2114
+ peerDependenciesMeta:
2115
+ '@svgr/core':
2116
+ optional: true
2117
+ '@svgx/core':
2118
+ optional: true
2119
+ '@vue/compiler-sfc':
2120
+ optional: true
2121
+ svelte:
2122
+ optional: true
2123
+ vue-template-compiler:
2124
+ optional: true
2125
+ vue-template-es2015-compiler:
2126
+ optional: true
2127
+
2128
+ unplugin@1.16.1:
2129
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
2130
+ engines: {node: '>=14.0.0'}
2131
+
2132
+ unplugin@2.2.0:
2133
+ resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==}
2134
+ engines: {node: '>=18.12.0'}
2135
+
2136
  uri-js@4.4.1:
2137
  resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
2138
 
 
2170
  terser:
2171
  optional: true
2172
 
2173
+ vite@6.2.1:
2174
+ resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==}
2175
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
2176
+ hasBin: true
2177
  peerDependencies:
2178
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
2179
+ jiti: '>=1.21.0'
2180
+ less: '*'
2181
+ lightningcss: ^1.21.0
2182
+ sass: '*'
2183
+ sass-embedded: '*'
2184
+ stylus: '*'
2185
+ sugarss: '*'
2186
+ terser: ^5.16.0
2187
+ tsx: ^4.8.1
2188
+ yaml: ^2.4.2
2189
+ peerDependenciesMeta:
2190
+ '@types/node':
2191
+ optional: true
2192
+ jiti:
2193
+ optional: true
2194
+ less:
2195
+ optional: true
2196
+ lightningcss:
2197
+ optional: true
2198
+ sass:
2199
+ optional: true
2200
+ sass-embedded:
2201
+ optional: true
2202
+ stylus:
2203
+ optional: true
2204
+ sugarss:
2205
+ optional: true
2206
+ terser:
2207
+ optional: true
2208
+ tsx:
2209
+ optional: true
2210
+ yaml:
2211
+ optional: true
2212
+
2213
+ vitefu@0.2.5:
2214
+ resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
2215
+ peerDependencies:
2216
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0
2217
  peerDependenciesMeta:
2218
  vite:
2219
  optional: true
2220
 
2221
+ wcwidth@1.0.1:
2222
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
2223
+
2224
+ webpack-virtual-modules@0.6.2:
2225
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
2226
+
2227
  which@2.0.2:
2228
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2229
  engines: {node: '>= 8'}
2230
  hasBin: true
2231
 
2232
+ which@4.0.0:
2233
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
2234
+ engines: {node: ^16.13.0 || >=18.0.0}
2235
+ hasBin: true
2236
+
2237
  word-wrap@1.2.5:
2238
  resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
2239
  engines: {node: '>=0.10.0'}
2240
 
2241
+ wrap-ansi@6.2.0:
2242
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2243
+ engines: {node: '>=8'}
2244
+
2245
  wrappy@1.0.2:
2246
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2247
 
 
2258
  resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2259
  engines: {node: '>=10'}
2260
 
2261
+ yocto-queue@1.2.0:
2262
+ resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
2263
+ engines: {node: '>=12.20'}
2264
+
2265
  snapshots:
2266
 
2267
  '@alloc/quick-lru@5.2.0': {}
 
2271
  '@jridgewell/gen-mapping': 0.3.8
2272
  '@jridgewell/trace-mapping': 0.3.25
2273
 
2274
+ '@antfu/install-pkg@1.0.0':
2275
+ dependencies:
2276
+ package-manager-detector: 0.2.11
2277
+ tinyexec: 0.3.2
2278
+
2279
+ '@antfu/utils@8.1.1': {}
2280
+
2281
  '@esbuild/aix-ppc64@0.21.5':
2282
  optional: true
2283
 
2284
+ '@esbuild/aix-ppc64@0.25.1':
2285
+ optional: true
2286
+
2287
  '@esbuild/android-arm64@0.21.5':
2288
  optional: true
2289
 
2290
+ '@esbuild/android-arm64@0.25.1':
2291
+ optional: true
2292
+
2293
  '@esbuild/android-arm@0.21.5':
2294
  optional: true
2295
 
2296
+ '@esbuild/android-arm@0.25.1':
2297
+ optional: true
2298
+
2299
  '@esbuild/android-x64@0.21.5':
2300
  optional: true
2301
 
2302
+ '@esbuild/android-x64@0.25.1':
2303
+ optional: true
2304
+
2305
  '@esbuild/darwin-arm64@0.21.5':
2306
  optional: true
2307
 
2308
+ '@esbuild/darwin-arm64@0.25.1':
2309
+ optional: true
2310
+
2311
  '@esbuild/darwin-x64@0.21.5':
2312
  optional: true
2313
 
2314
+ '@esbuild/darwin-x64@0.25.1':
2315
+ optional: true
2316
+
2317
  '@esbuild/freebsd-arm64@0.21.5':
2318
  optional: true
2319
 
2320
+ '@esbuild/freebsd-arm64@0.25.1':
2321
+ optional: true
2322
+
2323
  '@esbuild/freebsd-x64@0.21.5':
2324
  optional: true
2325
 
2326
+ '@esbuild/freebsd-x64@0.25.1':
2327
+ optional: true
2328
+
2329
  '@esbuild/linux-arm64@0.21.5':
2330
  optional: true
2331
 
2332
+ '@esbuild/linux-arm64@0.25.1':
2333
+ optional: true
2334
+
2335
  '@esbuild/linux-arm@0.21.5':
2336
  optional: true
2337
 
2338
+ '@esbuild/linux-arm@0.25.1':
2339
+ optional: true
2340
+
2341
  '@esbuild/linux-ia32@0.21.5':
2342
  optional: true
2343
 
2344
+ '@esbuild/linux-ia32@0.25.1':
2345
+ optional: true
2346
+
2347
  '@esbuild/linux-loong64@0.21.5':
2348
  optional: true
2349
 
2350
+ '@esbuild/linux-loong64@0.25.1':
2351
+ optional: true
2352
+
2353
  '@esbuild/linux-mips64el@0.21.5':
2354
  optional: true
2355
 
2356
+ '@esbuild/linux-mips64el@0.25.1':
2357
+ optional: true
2358
+
2359
  '@esbuild/linux-ppc64@0.21.5':
2360
  optional: true
2361
 
2362
+ '@esbuild/linux-ppc64@0.25.1':
2363
+ optional: true
2364
+
2365
  '@esbuild/linux-riscv64@0.21.5':
2366
  optional: true
2367
 
2368
+ '@esbuild/linux-riscv64@0.25.1':
2369
+ optional: true
2370
+
2371
  '@esbuild/linux-s390x@0.21.5':
2372
  optional: true
2373
 
2374
+ '@esbuild/linux-s390x@0.25.1':
2375
+ optional: true
2376
+
2377
  '@esbuild/linux-x64@0.21.5':
2378
  optional: true
2379
 
2380
+ '@esbuild/linux-x64@0.25.1':
2381
+ optional: true
2382
+
2383
+ '@esbuild/netbsd-arm64@0.25.1':
2384
+ optional: true
2385
+
2386
  '@esbuild/netbsd-x64@0.21.5':
2387
  optional: true
2388
 
2389
+ '@esbuild/netbsd-x64@0.25.1':
2390
+ optional: true
2391
+
2392
+ '@esbuild/openbsd-arm64@0.25.1':
2393
+ optional: true
2394
+
2395
  '@esbuild/openbsd-x64@0.21.5':
2396
  optional: true
2397
 
2398
+ '@esbuild/openbsd-x64@0.25.1':
2399
+ optional: true
2400
+
2401
  '@esbuild/sunos-x64@0.21.5':
2402
  optional: true
2403
 
2404
+ '@esbuild/sunos-x64@0.25.1':
2405
+ optional: true
2406
+
2407
  '@esbuild/win32-arm64@0.21.5':
2408
  optional: true
2409
 
2410
+ '@esbuild/win32-arm64@0.25.1':
2411
+ optional: true
2412
+
2413
  '@esbuild/win32-ia32@0.21.5':
2414
  optional: true
2415
 
2416
+ '@esbuild/win32-ia32@0.25.1':
2417
+ optional: true
2418
+
2419
  '@esbuild/win32-x64@0.21.5':
2420
  optional: true
2421
 
2422
+ '@esbuild/win32-x64@0.25.1':
2423
+ optional: true
2424
+
2425
  '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)':
2426
  dependencies:
2427
  eslint: 8.57.1
 
2480
 
2481
  '@humanwhocodes/object-schema@2.0.3': {}
2482
 
2483
+ '@iconify-json/carbon@1.2.8':
2484
+ dependencies:
2485
+ '@iconify/types': 2.0.0
2486
+
2487
+ '@iconify/types@2.0.0': {}
2488
+
2489
+ '@iconify/utils@2.3.0':
2490
+ dependencies:
2491
+ '@antfu/install-pkg': 1.0.0
2492
+ '@antfu/utils': 8.1.1
2493
+ '@iconify/types': 2.0.0
2494
+ debug: 4.4.0
2495
+ globals: 15.15.0
2496
+ kolorist: 1.8.0
2497
+ local-pkg: 1.1.1
2498
+ mlly: 1.7.4
2499
+ transitivePeerDependencies:
2500
+ - supports-color
2501
+
2502
  '@internationalized/date@3.7.0':
2503
  dependencies:
2504
  '@swc/helpers': 0.5.15
 
2637
  '@rollup/rollup-win32-x64-msvc@4.34.9':
2638
  optional: true
2639
 
2640
+ '@ryoppippi/unplugin-typia@1.2.0(@samchon/openapi@3.0.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.9)(yaml@2.7.0)':
2641
+ dependencies:
2642
+ '@rollup/pluginutils': 5.1.4(rollup@4.34.9)
2643
+ consola: 3.4.0
2644
+ defu: 6.1.4
2645
+ diff-match-patch: 1.0.5
2646
+ find-cache-dir: 5.0.0
2647
+ magic-string: 0.30.17
2648
+ pathe: 1.1.2
2649
+ pkg-types: 1.3.1
2650
+ type-fest: 4.37.0
2651
+ typescript: 5.6.3
2652
+ typia: 7.6.4(@samchon/openapi@3.0.0)(typescript@5.6.3)
2653
+ unplugin: 1.16.1
2654
+ vite: 6.2.1(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0)
2655
+ transitivePeerDependencies:
2656
+ - '@samchon/openapi'
2657
+ - '@types/node'
2658
+ - jiti
2659
+ - less
2660
+ - lightningcss
2661
+ - rollup
2662
+ - sass
2663
+ - sass-embedded
2664
+ - stylus
2665
+ - sugarss
2666
+ - terser
2667
+ - tsx
2668
+ - yaml
2669
+
2670
+ '@samchon/openapi@3.0.0': {}
2671
+
2672
  '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))':
2673
  dependencies:
2674
  '@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1)))(svelte@4.2.19)(vite@5.4.14(lightningcss@1.29.1))
 
2905
  json-schema-traverse: 0.4.1
2906
  uri-js: 4.4.1
2907
 
2908
+ ansi-escapes@4.3.2:
2909
+ dependencies:
2910
+ type-fest: 0.21.3
2911
+
2912
  ansi-regex@5.0.1: {}
2913
 
2914
  ansi-styles@4.3.0:
 
2924
 
2925
  aria-query@5.3.2: {}
2926
 
2927
+ array-timsort@1.0.3: {}
2928
+
2929
  array-union@2.1.0: {}
2930
 
2931
  axobject-query@4.1.0: {}
2932
 
2933
  balanced-match@1.0.2: {}
2934
 
2935
+ base64-js@1.5.1: {}
2936
+
2937
  binary-extensions@2.3.0: {}
2938
 
2939
+ bl@4.1.0:
2940
+ dependencies:
2941
+ buffer: 5.7.1
2942
+ inherits: 2.0.4
2943
+ readable-stream: 3.6.2
2944
+
2945
  brace-expansion@1.1.11:
2946
  dependencies:
2947
  balanced-match: 1.0.2
 
2957
 
2958
  buffer-crc32@1.0.0: {}
2959
 
2960
+ buffer@5.7.1:
2961
+ dependencies:
2962
+ base64-js: 1.5.1
2963
+ ieee754: 1.2.1
2964
+
2965
  callsites@3.1.0: {}
2966
 
2967
  chalk@4.1.2:
 
2969
  ansi-styles: 4.3.0
2970
  supports-color: 7.2.0
2971
 
2972
+ chardet@0.7.0: {}
2973
+
2974
  chokidar@3.6.0:
2975
  dependencies:
2976
  anymatch: 3.1.3
 
2983
  optionalDependencies:
2984
  fsevents: 2.3.3
2985
 
2986
+ cli-cursor@3.1.0:
2987
+ dependencies:
2988
+ restore-cursor: 3.1.0
2989
+
2990
+ cli-spinners@2.9.2: {}
2991
+
2992
+ cli-width@3.0.0: {}
2993
+
2994
+ clone@1.0.4: {}
2995
+
2996
  clsx@2.1.1: {}
2997
 
2998
  code-red@1.0.4:
 
3009
 
3010
  color-name@1.1.4: {}
3011
 
3012
+ commander@10.0.1: {}
3013
+
3014
+ comment-json@4.2.5:
3015
+ dependencies:
3016
+ array-timsort: 1.0.3
3017
+ core-util-is: 1.0.3
3018
+ esprima: 4.0.1
3019
+ has-own-prop: 2.0.0
3020
+ repeat-string: 1.6.1
3021
+
3022
+ common-path-prefix@3.0.0: {}
3023
+
3024
  commondir@1.0.1: {}
3025
 
3026
  concat-map@0.0.1: {}
3027
 
3028
+ confbox@0.1.8: {}
3029
+
3030
+ confbox@0.2.1: {}
3031
+
3032
+ consola@3.4.0: {}
3033
+
3034
  cookie@0.6.0: {}
3035
 
3036
+ core-util-is@1.0.3: {}
3037
+
3038
  cross-spawn@7.0.6:
3039
  dependencies:
3040
  path-key: 3.1.1
 
3056
 
3057
  deepmerge@4.3.1: {}
3058
 
3059
+ defaults@1.0.4:
3060
+ dependencies:
3061
+ clone: 1.0.4
3062
+
3063
+ defu@6.1.4: {}
3064
+
3065
  dequal@2.0.3: {}
3066
 
3067
  detect-indent@6.1.0: {}
 
3070
 
3071
  devalue@5.1.1: {}
3072
 
3073
+ diff-match-patch@1.0.5: {}
3074
+
3075
  dir-glob@3.0.1:
3076
  dependencies:
3077
  path-type: 4.0.0
 
3080
  dependencies:
3081
  esutils: 2.0.3
3082
 
3083
+ drange@1.1.1: {}
3084
+
3085
+ emoji-regex@8.0.0: {}
3086
+
3087
  enhanced-resolve@5.18.1:
3088
  dependencies:
3089
  graceful-fs: 4.2.11
 
3117
  '@esbuild/win32-ia32': 0.21.5
3118
  '@esbuild/win32-x64': 0.21.5
3119
 
3120
+ esbuild@0.25.1:
3121
+ optionalDependencies:
3122
+ '@esbuild/aix-ppc64': 0.25.1
3123
+ '@esbuild/android-arm': 0.25.1
3124
+ '@esbuild/android-arm64': 0.25.1
3125
+ '@esbuild/android-x64': 0.25.1
3126
+ '@esbuild/darwin-arm64': 0.25.1
3127
+ '@esbuild/darwin-x64': 0.25.1
3128
+ '@esbuild/freebsd-arm64': 0.25.1
3129
+ '@esbuild/freebsd-x64': 0.25.1
3130
+ '@esbuild/linux-arm': 0.25.1
3131
+ '@esbuild/linux-arm64': 0.25.1
3132
+ '@esbuild/linux-ia32': 0.25.1
3133
+ '@esbuild/linux-loong64': 0.25.1
3134
+ '@esbuild/linux-mips64el': 0.25.1
3135
+ '@esbuild/linux-ppc64': 0.25.1
3136
+ '@esbuild/linux-riscv64': 0.25.1
3137
+ '@esbuild/linux-s390x': 0.25.1
3138
+ '@esbuild/linux-x64': 0.25.1
3139
+ '@esbuild/netbsd-arm64': 0.25.1
3140
+ '@esbuild/netbsd-x64': 0.25.1
3141
+ '@esbuild/openbsd-arm64': 0.25.1
3142
+ '@esbuild/openbsd-x64': 0.25.1
3143
+ '@esbuild/sunos-x64': 0.25.1
3144
+ '@esbuild/win32-arm64': 0.25.1
3145
+ '@esbuild/win32-ia32': 0.25.1
3146
+ '@esbuild/win32-x64': 0.25.1
3147
+
3148
+ escape-string-regexp@1.0.5: {}
3149
+
3150
  escape-string-regexp@4.0.0: {}
3151
 
3152
  eslint-compat-utils@0.5.1(eslint@8.57.1):
 
3235
  acorn-jsx: 5.3.2(acorn@8.14.0)
3236
  eslint-visitor-keys: 3.4.3
3237
 
3238
+ esprima@4.0.1: {}
3239
+
3240
  esquery@1.6.0:
3241
  dependencies:
3242
  estraverse: 5.3.0
 
3255
 
3256
  esutils@2.0.3: {}
3257
 
3258
+ exsolve@1.0.4: {}
3259
+
3260
+ external-editor@3.1.0:
3261
+ dependencies:
3262
+ chardet: 0.7.0
3263
+ iconv-lite: 0.4.24
3264
+ tmp: 0.0.33
3265
+
3266
  fast-deep-equal@3.1.3: {}
3267
 
3268
  fast-glob@3.3.3:
 
3285
  optionalDependencies:
3286
  picomatch: 4.0.2
3287
 
3288
+ figures@3.2.0:
3289
+ dependencies:
3290
+ escape-string-regexp: 1.0.5
3291
+
3292
  file-entry-cache@6.0.1:
3293
  dependencies:
3294
  flat-cache: 3.2.0
 
3297
  dependencies:
3298
  to-regex-range: 5.0.1
3299
 
3300
+ find-cache-dir@5.0.0:
3301
+ dependencies:
3302
+ common-path-prefix: 3.0.0
3303
+ pkg-dir: 7.0.0
3304
+
3305
  find-up@5.0.0:
3306
  dependencies:
3307
  locate-path: 6.0.0
3308
  path-exists: 4.0.0
3309
 
3310
+ find-up@6.3.0:
3311
+ dependencies:
3312
+ locate-path: 7.2.0
3313
+ path-exists: 5.0.0
3314
+
3315
  flat-cache@3.2.0:
3316
  dependencies:
3317
  flatted: 3.3.3
 
3348
  once: 1.4.0
3349
  path-is-absolute: 1.0.1
3350
 
3351
+ global-prefix@4.0.0:
3352
+ dependencies:
3353
+ ini: 4.1.3
3354
+ kind-of: 6.0.3
3355
+ which: 4.0.0
3356
+
3357
  globals@13.24.0:
3358
  dependencies:
3359
  type-fest: 0.20.2
3360
 
3361
+ globals@15.15.0: {}
3362
+
3363
  globby@11.1.0:
3364
  dependencies:
3365
  array-union: 2.1.0
 
3375
 
3376
  has-flag@4.0.0: {}
3377
 
3378
+ has-own-prop@2.0.0: {}
3379
+
3380
  hasown@2.0.2:
3381
  dependencies:
3382
  function-bind: 1.1.2
3383
 
3384
  highlight.js@11.11.1: {}
3385
 
3386
+ iconv-lite@0.4.24:
3387
+ dependencies:
3388
+ safer-buffer: 2.1.2
3389
+
3390
+ ieee754@1.2.1: {}
3391
+
3392
  ignore@5.3.2: {}
3393
 
3394
  import-fresh@3.3.1:
 
3407
 
3408
  inherits@2.0.4: {}
3409
 
3410
+ ini@4.1.3: {}
3411
+
3412
+ inquirer@8.2.6:
3413
+ dependencies:
3414
+ ansi-escapes: 4.3.2
3415
+ chalk: 4.1.2
3416
+ cli-cursor: 3.1.0
3417
+ cli-width: 3.0.0
3418
+ external-editor: 3.1.0
3419
+ figures: 3.2.0
3420
+ lodash: 4.17.21
3421
+ mute-stream: 0.0.8
3422
+ ora: 5.4.1
3423
+ run-async: 2.4.1
3424
+ rxjs: 7.8.2
3425
+ string-width: 4.2.3
3426
+ strip-ansi: 6.0.1
3427
+ through: 2.3.8
3428
+ wrap-ansi: 6.2.0
3429
+
3430
  is-binary-path@2.1.0:
3431
  dependencies:
3432
  binary-extensions: 2.3.0
 
3437
 
3438
  is-extglob@2.1.1: {}
3439
 
3440
+ is-fullwidth-code-point@3.0.0: {}
3441
+
3442
  is-glob@4.0.3:
3443
  dependencies:
3444
  is-extglob: 2.1.1
3445
 
3446
+ is-interactive@1.0.0: {}
3447
+
3448
  is-module@1.0.0: {}
3449
 
3450
  is-number@7.0.0: {}
 
3459
  dependencies:
3460
  '@types/estree': 1.0.6
3461
 
3462
+ is-unicode-supported@0.1.0: {}
3463
+
3464
  isexe@2.0.0: {}
3465
 
3466
+ isexe@3.1.1: {}
3467
+
3468
  jiti@2.4.2: {}
3469
 
3470
  js-yaml@4.1.0:
 
3481
  dependencies:
3482
  json-buffer: 3.0.1
3483
 
3484
+ kind-of@6.0.3: {}
3485
+
3486
  kleur@4.1.5: {}
3487
 
3488
  known-css-properties@0.35.0: {}
3489
 
3490
+ kolorist@1.8.0: {}
3491
+
3492
  levn@0.4.1:
3493
  dependencies:
3494
  prelude-ls: 1.2.1
 
3544
  lilconfig@3.1.3:
3545
  optional: true
3546
 
3547
+ local-pkg@1.1.1:
3548
+ dependencies:
3549
+ mlly: 1.7.4
3550
+ pkg-types: 2.1.0
3551
+ quansync: 0.2.8
3552
+
3553
  locate-character@3.0.0: {}
3554
 
3555
  locate-path@6.0.0:
3556
  dependencies:
3557
  p-locate: 5.0.0
3558
 
3559
+ locate-path@7.2.0:
3560
+ dependencies:
3561
+ p-locate: 6.0.0
3562
+
3563
  lodash.merge@4.6.2: {}
3564
 
3565
+ lodash@4.17.21: {}
3566
+
3567
+ log-symbols@4.1.0:
3568
+ dependencies:
3569
+ chalk: 4.1.2
3570
+ is-unicode-supported: 0.1.0
3571
+
3572
  magic-string@0.30.17:
3573
  dependencies:
3574
  '@jridgewell/sourcemap-codec': 1.5.0
 
3582
  braces: 3.0.3
3583
  picomatch: 2.3.1
3584
 
3585
+ mimic-fn@2.1.0: {}
3586
+
3587
  min-indent@1.0.1: {}
3588
 
3589
  minimatch@3.1.2:
 
3600
  dependencies:
3601
  minimist: 1.2.8
3602
 
3603
+ mlly@1.7.4:
3604
+ dependencies:
3605
+ acorn: 8.14.0
3606
+ pathe: 2.0.3
3607
+ pkg-types: 1.3.1
3608
+ ufo: 1.5.4
3609
+
3610
  mri@1.2.0: {}
3611
 
3612
  mrmime@2.0.1: {}
3613
 
3614
  ms@2.1.3: {}
3615
 
3616
+ mute-stream@0.0.8: {}
3617
+
3618
  nanoid@3.3.8: {}
3619
 
3620
  nanoid@5.1.2: {}
 
3627
  dependencies:
3628
  wrappy: 1.0.2
3629
 
3630
+ onetime@5.1.2:
3631
+ dependencies:
3632
+ mimic-fn: 2.1.0
3633
+
3634
  optionator@0.9.4:
3635
  dependencies:
3636
  deep-is: 0.1.4
 
3640
  type-check: 0.4.0
3641
  word-wrap: 1.2.5
3642
 
3643
+ ora@5.4.1:
3644
+ dependencies:
3645
+ bl: 4.1.0
3646
+ chalk: 4.1.2
3647
+ cli-cursor: 3.1.0
3648
+ cli-spinners: 2.9.2
3649
+ is-interactive: 1.0.0
3650
+ is-unicode-supported: 0.1.0
3651
+ log-symbols: 4.1.0
3652
+ strip-ansi: 6.0.1
3653
+ wcwidth: 1.0.1
3654
+
3655
+ os-tmpdir@1.0.2: {}
3656
+
3657
  p-limit@3.1.0:
3658
  dependencies:
3659
  yocto-queue: 0.1.0
3660
 
3661
+ p-limit@4.0.0:
3662
+ dependencies:
3663
+ yocto-queue: 1.2.0
3664
+
3665
  p-locate@5.0.0:
3666
  dependencies:
3667
  p-limit: 3.1.0
3668
 
3669
+ p-locate@6.0.0:
3670
+ dependencies:
3671
+ p-limit: 4.0.0
3672
+
3673
+ package-manager-detector@0.2.11:
3674
+ dependencies:
3675
+ quansync: 0.2.8
3676
+
3677
  parent-module@1.0.1:
3678
  dependencies:
3679
  callsites: 3.1.0
3680
 
3681
  path-exists@4.0.0: {}
3682
 
3683
+ path-exists@5.0.0: {}
3684
+
3685
  path-is-absolute@1.0.1: {}
3686
 
3687
  path-key@3.1.1: {}
 
3690
 
3691
  path-type@4.0.0: {}
3692
 
3693
+ pathe@1.1.2: {}
3694
+
3695
+ pathe@2.0.3: {}
3696
+
3697
  periscopic@3.1.0:
3698
  dependencies:
3699
  '@types/estree': 1.0.6
 
3706
 
3707
  picomatch@4.0.2: {}
3708
 
3709
+ pkg-dir@7.0.0:
3710
+ dependencies:
3711
+ find-up: 6.3.0
3712
+
3713
+ pkg-types@1.3.1:
3714
+ dependencies:
3715
+ confbox: 0.1.8
3716
+ mlly: 1.7.4
3717
+ pathe: 2.0.3
3718
+
3719
+ pkg-types@2.1.0:
3720
+ dependencies:
3721
+ confbox: 0.2.1
3722
+ exsolve: 1.0.4
3723
+ pathe: 2.0.3
3724
+
3725
  postcss-load-config@3.1.4(postcss@8.5.3):
3726
  dependencies:
3727
  lilconfig: 2.1.0
 
3773
 
3774
  punycode@2.3.1: {}
3775
 
3776
+ quansync@0.2.8: {}
3777
+
3778
  queue-microtask@1.2.3: {}
3779
 
3780
+ randexp@0.5.3:
3781
+ dependencies:
3782
+ drange: 1.1.1
3783
+ ret: 0.2.2
3784
+
3785
+ readable-stream@3.6.2:
3786
+ dependencies:
3787
+ inherits: 2.0.4
3788
+ string_decoder: 1.3.0
3789
+ util-deprecate: 1.0.2
3790
+
3791
  readdirp@3.6.0:
3792
  dependencies:
3793
  picomatch: 2.3.1
3794
 
3795
+ repeat-string@1.6.1: {}
3796
+
3797
  resolve-from@4.0.0: {}
3798
 
3799
  resolve@1.22.10:
 
3802
  path-parse: 1.0.7
3803
  supports-preserve-symlinks-flag: 1.0.0
3804
 
3805
+ restore-cursor@3.1.0:
3806
+ dependencies:
3807
+ onetime: 5.1.2
3808
+ signal-exit: 3.0.7
3809
+
3810
+ ret@0.2.2: {}
3811
+
3812
  reusify@1.1.0: {}
3813
 
3814
  rimraf@2.7.1:
 
3844
  '@rollup/rollup-win32-x64-msvc': 4.34.9
3845
  fsevents: 2.3.3
3846
 
3847
+ run-async@2.4.1: {}
3848
+
3849
  run-parallel@1.2.0:
3850
  dependencies:
3851
  queue-microtask: 1.2.3
3852
 
3853
+ rxjs@7.8.2:
3854
+ dependencies:
3855
+ tslib: 2.8.1
3856
+
3857
  sade@1.8.1:
3858
  dependencies:
3859
  mri: 1.2.0
3860
 
3861
+ safe-buffer@5.2.1: {}
3862
+
3863
+ safer-buffer@2.1.2: {}
3864
+
3865
  sander@0.5.1:
3866
  dependencies:
3867
  es6-promise: 3.3.1
 
3879
 
3880
  shebang-regex@3.0.0: {}
3881
 
3882
+ signal-exit@3.0.7: {}
3883
+
3884
  sirv@3.0.1:
3885
  dependencies:
3886
  '@polka/url': 1.0.0-next.28
 
3898
 
3899
  source-map-js@1.2.1: {}
3900
 
3901
+ string-width@4.2.3:
3902
+ dependencies:
3903
+ emoji-regex: 8.0.0
3904
+ is-fullwidth-code-point: 3.0.0
3905
+ strip-ansi: 6.0.1
3906
+
3907
+ string_decoder@1.3.0:
3908
+ dependencies:
3909
+ safe-buffer: 5.2.1
3910
+
3911
  strip-ansi@6.0.1:
3912
  dependencies:
3913
  ansi-regex: 5.0.1
 
3998
 
3999
  text-table@0.2.0: {}
4000
 
4001
+ through@2.3.8: {}
4002
+
4003
+ tinyexec@0.3.2: {}
4004
+
4005
+ tmp@0.0.33:
4006
+ dependencies:
4007
+ os-tmpdir: 1.0.2
4008
+
4009
  to-regex-range@5.0.1:
4010
  dependencies:
4011
  is-number: 7.0.0
 
4016
  dependencies:
4017
  typescript: 5.8.2
4018
 
4019
+ ts-patch@3.3.0:
4020
+ dependencies:
4021
+ chalk: 4.1.2
4022
+ global-prefix: 4.0.0
4023
+ minimist: 1.2.8
4024
+ resolve: 1.22.10
4025
+ semver: 7.7.1
4026
+ strip-ansi: 6.0.1
4027
+
4028
  tslib@2.8.1: {}
4029
 
4030
  type-check@0.4.0:
 
4033
 
4034
  type-fest@0.20.2: {}
4035
 
4036
+ type-fest@0.21.3: {}
4037
+
4038
+ type-fest@4.37.0: {}
4039
+
4040
+ typescript@5.6.3: {}
4041
+
4042
  typescript@5.8.2: {}
4043
 
4044
+ typia@7.6.4(@samchon/openapi@3.0.0)(typescript@5.6.3):
4045
+ dependencies:
4046
+ '@samchon/openapi': 3.0.0
4047
+ commander: 10.0.1
4048
+ comment-json: 4.2.5
4049
+ inquirer: 8.2.6
4050
+ package-manager-detector: 0.2.11
4051
+ randexp: 0.5.3
4052
+ typescript: 5.6.3
4053
+
4054
+ typia@8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2):
4055
+ dependencies:
4056
+ '@samchon/openapi': 3.0.0
4057
+ commander: 10.0.1
4058
+ comment-json: 4.2.5
4059
+ inquirer: 8.2.6
4060
+ package-manager-detector: 0.2.11
4061
+ randexp: 0.5.3
4062
+ typescript: 5.8.2
4063
+
4064
+ ufo@1.5.4: {}
4065
+
4066
+ unplugin-icons@22.1.0(svelte@4.2.19):
4067
+ dependencies:
4068
+ '@antfu/install-pkg': 1.0.0
4069
+ '@iconify/utils': 2.3.0
4070
+ debug: 4.4.0
4071
+ local-pkg: 1.1.1
4072
+ unplugin: 2.2.0
4073
+ optionalDependencies:
4074
+ svelte: 4.2.19
4075
+ transitivePeerDependencies:
4076
+ - supports-color
4077
+
4078
+ unplugin@1.16.1:
4079
+ dependencies:
4080
+ acorn: 8.14.0
4081
+ webpack-virtual-modules: 0.6.2
4082
+
4083
+ unplugin@2.2.0:
4084
+ dependencies:
4085
+ acorn: 8.14.0
4086
+ webpack-virtual-modules: 0.6.2
4087
+
4088
  uri-js@4.4.1:
4089
  dependencies:
4090
  punycode: 2.3.1
 
4100
  fsevents: 2.3.3
4101
  lightningcss: 1.29.1
4102
 
4103
+ vite@6.2.1(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.7.0):
4104
+ dependencies:
4105
+ esbuild: 0.25.1
4106
+ postcss: 8.5.3
4107
+ rollup: 4.34.9
4108
+ optionalDependencies:
4109
+ fsevents: 2.3.3
4110
+ jiti: 2.4.2
4111
+ lightningcss: 1.29.1
4112
+ yaml: 2.7.0
4113
+
4114
  vitefu@0.2.5(vite@5.4.14(lightningcss@1.29.1)):
4115
  optionalDependencies:
4116
  vite: 5.4.14(lightningcss@1.29.1)
4117
 
4118
+ wcwidth@1.0.1:
4119
+ dependencies:
4120
+ defaults: 1.0.4
4121
+
4122
+ webpack-virtual-modules@0.6.2: {}
4123
+
4124
  which@2.0.2:
4125
  dependencies:
4126
  isexe: 2.0.0
4127
 
4128
+ which@4.0.0:
4129
+ dependencies:
4130
+ isexe: 3.1.1
4131
+
4132
  word-wrap@1.2.5: {}
4133
 
4134
+ wrap-ansi@6.2.0:
4135
+ dependencies:
4136
+ ansi-styles: 4.3.0
4137
+ string-width: 4.2.3
4138
+ strip-ansi: 6.0.1
4139
+
4140
  wrappy@1.0.2: {}
4141
 
4142
  yaml@1.10.2: {}
 
4145
  optional: true
4146
 
4147
  yocto-queue@0.1.0: {}
4148
+
4149
+ yocto-queue@1.2.0: {}
src/app.css CHANGED
@@ -23,11 +23,44 @@
23
  }
24
  }
25
 
26
- html {
27
- font-size: 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
29
 
 
30
  @utility abs-x-center {
31
  left: 50%;
32
  @apply -translate-x-1/2;
33
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  }
24
  }
25
 
26
+ /* Theme config */
27
+ @theme {
28
+ --text-2xs: 0.625rem;
29
+ --text-3xs: 0.5rem;
30
+
31
+ --animate-fade-in: fade-in 0.15s ease;
32
+ @keyframes fade-in {
33
+ 0% {
34
+ opacity: 0;
35
+ /* scale: 0.99; */
36
+ }
37
+ 100% {
38
+ opacity: 1;
39
+ scale: 1;
40
+ }
41
+ }
42
  }
43
 
44
+ /* Utilities */
45
  @utility abs-x-center {
46
  left: 50%;
47
  @apply -translate-x-1/2;
48
  }
49
+
50
+ @utility abs-y-center {
51
+ top: 50%;
52
+ @apply -translate-y-1/2;
53
+ }
54
+
55
+ @utility abs-center {
56
+ @apply abs-x-center abs-y-center;
57
+ }
58
+
59
+ @utility btn {
60
+ @apply flex h-[39px] items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:ring-4 focus:ring-gray-100 focus:outline-hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700;
61
+ }
62
+
63
+ /* Elements & Classes */
64
+ html {
65
+ font-size: 15px;
66
+ }
src/app.d.ts CHANGED
@@ -1,3 +1,5 @@
 
 
1
  // See https://kit.svelte.dev/docs/types#app
2
  // for information about these interfaces
3
  declare global {
 
1
+ import "unplugin-icons/types/svelte";
2
+
3
  // See https://kit.svelte.dev/docs/types#app
4
  // for information about these interfaces
5
  declare global {
src/app.html CHANGED
@@ -7,11 +7,19 @@
7
  %sveltekit.head%
8
  </head>
9
 
10
- <body data-sveltekit-preload-data="hover" class="dark:bg-gray-900">
 
 
 
 
 
 
 
 
11
  <script>
12
  (function () {
13
  const urlParams = new URLSearchParams(window.location.search);
14
- const theme = urlParams.get("__theme");
15
 
16
  let systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
17
 
 
7
  %sveltekit.head%
8
  </head>
9
 
10
+ <body data-sveltekit-preload-data="hover">
11
+ <style>
12
+ body {
13
+ background: white;
14
+ }
15
+ body.dark {
16
+ background: #101828;
17
+ }
18
+ </style>
19
  <script>
20
  (function () {
21
  const urlParams = new URLSearchParams(window.location.search);
22
+ const theme = urlParams.get("_theme");
23
 
24
  let systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
25
 
src/lib/actions/click-outside.ts ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Action } from "svelte/action";
2
+
3
+ export const clickOutside: Action<HTMLElement, () => void> = (node, callback) => {
4
+ let _callback = callback;
5
+
6
+ function update(callback: () => void) {
7
+ _callback = callback;
8
+ }
9
+
10
+ function handleClick(event: MouseEvent) {
11
+ if (node && !node.contains(event.target as Node) && !event.defaultPrevented) {
12
+ _callback();
13
+ }
14
+ }
15
+
16
+ document.addEventListener("click", handleClick, true);
17
+
18
+ return {
19
+ update,
20
+ destroy() {
21
+ document.removeEventListener("click", handleClick, true);
22
+ },
23
+ };
24
+ };
src/lib/components/Avatar.svelte CHANGED
@@ -1,6 +1,4 @@
1
  <script lang="ts">
2
- import { browser } from "$app/environment";
3
-
4
  export let orgName: string | undefined;
5
  export let size: "sm" | "md" = "md";
6
 
@@ -9,7 +7,6 @@
9
  async function getAvatarUrl(orgName?: string) {
10
  if (!orgName) return;
11
  const url = `https://huggingface.co/api/organizations/${orgName}/avatar`;
12
- if (!browser) return;
13
  const res = await fetch(url);
14
  if (!res.ok) {
15
  console.error(`Error getting avatar url for org: ${orgName}`, res.status, res.statusText);
 
1
  <script lang="ts">
 
 
2
  export let orgName: string | undefined;
3
  export let size: "sm" | "md" = "md";
4
 
 
7
  async function getAvatarUrl(orgName?: string) {
8
  if (!orgName) return;
9
  const url = `https://huggingface.co/api/organizations/${orgName}/avatar`;
 
10
  const res = await fetch(url);
11
  if (!res.ok) {
12
  console.error(`Error getting avatar url for org: ${orgName}`, res.status, res.statusText);
src/lib/components/DebugMenu.svelte CHANGED
@@ -2,6 +2,8 @@
2
  import { dev } from "$app/environment";
3
  import { session } from "$lib/stores/session";
4
  import { createPopover } from "@melt-ui/svelte";
 
 
5
 
6
  let innerWidth: number;
7
  let innerHeight: number;
@@ -51,6 +53,23 @@
51
  >
52
  Log session to console
53
  </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  </div>
55
  </div>
56
  </div>
 
2
  import { dev } from "$app/environment";
3
  import { session } from "$lib/stores/session";
4
  import { createPopover } from "@melt-ui/svelte";
5
+ import { prompt } from "./Prompts.svelte";
6
+ import { token } from "$lib/stores/token";
7
 
8
  let innerWidth: number;
9
  let innerHeight: number;
 
53
  >
54
  Log session to console
55
  </button>
56
+ <button
57
+ class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
58
+ on:click={async () => {
59
+ console.log(await prompt("Test prompt"));
60
+ }}
61
+ >
62
+ Test prompt
63
+ </button>
64
+
65
+ <button
66
+ class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
67
+ on:click={async () => {
68
+ $token.showModal = true;
69
+ }}
70
+ >
71
+ Show token modal
72
+ </button>
73
  </div>
74
  </div>
75
  </div>
src/lib/components/Icons/IconCaret.svelte DELETED
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- role="img"
11
- width="1em"
12
- height="1em"
13
- preserveAspectRatio="xMidYMid meet"
14
- viewBox="0 0 24 24"
15
- ><path d="M16.293 9.293L12 13.586L7.707 9.293l-1.414 1.414L12 16.414l5.707-5.707z" fill="currentColor" />
16
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconCode.svelte DELETED
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- focusable="false"
11
- role="img"
12
- width="1em"
13
- height="1em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- style="transform: rotate(360deg);"
17
- >
18
- <path d="M31 16l-7 7l-1.41-1.41L28.17 16l-5.58-5.59L24 9l7 7z" fill="currentColor" />
19
- <path d="M1 16l7-7l1.41 1.41L3.83 16l5.58 5.59L8 23l-7-7z" fill="currentColor" />
20
- <path d="M12.419 25.484L17.639 6l1.932.518L14.35 26z" fill="currentColor" />
21
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconCog.svelte DELETED
@@ -1,13 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg class={classNames} xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32"
6
- ><path
7
- fill="currentColor"
8
- d="M27 16.76v-1.53l1.92-1.68A2 2 0 0 0 29.3 11l-2.36-4a2 2 0 0 0-1.73-1a2 2 0 0 0-.64.1l-2.43.82a11.35 11.35 0 0 0-1.31-.75l-.51-2.52a2 2 0 0 0-2-1.61h-4.68a2 2 0 0 0-2 1.61l-.51 2.52a11.48 11.48 0 0 0-1.32.75l-2.38-.86A2 2 0 0 0 6.79 6a2 2 0 0 0-1.73 1L2.7 11a2 2 0 0 0 .41 2.51L5 15.24v1.53l-1.89 1.68A2 2 0 0 0 2.7 21l2.36 4a2 2 0 0 0 1.73 1a2 2 0 0 0 .64-.1l2.43-.82a11.35 11.35 0 0 0 1.31.75l.51 2.52a2 2 0 0 0 2 1.61h4.72a2 2 0 0 0 2-1.61l.51-2.52a11.48 11.48 0 0 0 1.32-.75l2.42.82a2 2 0 0 0 .64.1a2 2 0 0 0 1.73-1l2.28-4a2 2 0 0 0-.41-2.51ZM25.21 24l-3.43-1.16a8.86 8.86 0 0 1-2.71 1.57L18.36 28h-4.72l-.71-3.55a9.36 9.36 0 0 1-2.7-1.57L6.79 24l-2.36-4l2.72-2.4a8.9 8.9 0 0 1 0-3.13L4.43 12l2.36-4l3.43 1.16a8.86 8.86 0 0 1 2.71-1.57L13.64 4h4.72l.71 3.55a9.36 9.36 0 0 1 2.7 1.57L25.21 8l2.36 4l-2.72 2.4a8.9 8.9 0 0 1 0 3.13L27.57 20Z"
9
- /><path
10
- fill="currentColor"
11
- d="M16 22a6 6 0 1 1 6-6a5.94 5.94 0 0 1-6 6Zm0-10a3.91 3.91 0 0 0-4 4a3.91 3.91 0 0 0 4 4a3.91 3.91 0 0 0 4-4a3.91 3.91 0 0 0-4-4Z"
12
- /></svg
13
- >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconCompare.svelte DELETED
@@ -1,10 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32" class={classNames}
6
- ><path
7
- fill="currentColor"
8
- d="M28 6H18V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h10v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2ZM4 15h6.17l-2.58 2.59L9 19l5-5l-5-5l-1.41 1.41L10.17 13H4V4h12v20H4Zm12 13v-2a2 2 0 0 0 2-2V8h10v9h-6.17l2.58-2.59L23 13l-5 5l5 5l1.41-1.41L21.83 19H28v9Z"
9
- /></svg
10
- >
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconCopyCode.svelte DELETED
@@ -1,24 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- aria-hidden="true"
9
- fill="currentColor"
10
- focusable="false"
11
- role="img"
12
- width="0.9em"
13
- height="0.9em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- ><path
17
- d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"
18
- transform="translate(0)"
19
- ></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect
20
- fill="none"
21
- width="32"
22
- height="32"
23
- ></rect></svg
24
- >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconCross.svelte DELETED
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- focusable="false"
11
- role="img"
12
- width="1.1em"
13
- height="1.1em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- >
17
- <path
18
- d="M24 9.4L22.6 8L16 14.6L9.4 8L8 9.4l6.6 6.6L8 22.6L9.4 24l6.6-6.6l6.6 6.6l1.4-1.4l-6.6-6.6L24 9.4z"
19
- fill="currentColor"
20
- />
21
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconDelete.svelte DELETED
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- focusable="false"
11
- role="img"
12
- width="1em"
13
- height="1em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- >
17
- <path d="M12 12h2v12h-2z" fill="currentColor" /><path d="M18 12h2v12h-2z" fill="currentColor" /><path
18
- d="M4 6v2h2v20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8h2V6zm4 22V8h16v20z"
19
- fill="currentColor"
20
- /><path d="M12 2h8v2h-8z" fill="currentColor" />
21
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconExternal.svelte DELETED
@@ -1,7 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg class={classNames} xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32"
6
- ><path fill="currentColor" d="M10 6v2h12.59L6 24.59L7.41 26L24 9.41V22h2V6H10z" /></svg
7
- >
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconInfo.svelte DELETED
@@ -1,20 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- focusable="false"
11
- role="img"
12
- width="1em"
13
- height="1em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- >
17
- <path d="M17 22v-8h-4v2h2v6h-3v2h8v-2h-3z" fill="currentColor" />
18
- <path d="M16 8a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 0 0 16 8z" fill="currentColor" />
19
- <path d="M16 30a14 14 0 1 1 14-14a14 14 0 0 1-14 14zm0-26a12 12 0 1 0 12 12A12 12 0 0 0 16 4z" fill="currentColor" />
20
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconPlus.svelte DELETED
@@ -1,10 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg class={classNames} xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 32 32"
6
- ><path
7
- fill="currentColor"
8
- d="M16 2A14.172 14.172 0 0 0 2 16a14.172 14.172 0 0 0 14 14a14.172 14.172 0 0 0 14-14A14.172 14.172 0 0 0 16 2Zm8 15h-7v7h-2v-7H8v-2h7V8h2v7h7Z"
9
- /><path fill="none" d="M24 17h-7v7h-2v-7H8v-2h7V8h2v7h7v2z" /></svg
10
- >
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconProvider.svelte CHANGED
@@ -1,41 +1,299 @@
1
  <script lang="ts">
2
  export let provider: string | undefined;
3
- const icons = {
4
- "sambanova":
5
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path d="M23.9395 23H22.8288V9.38464C22.8288 6.5566 20.4901 4.11242 17.6039 4.11242H10.3219C7.43574 4.11242 5.10488 6.44692 5.10488 9.2828C5.10488 12.1108 7.43574 14.4454 10.3219 14.4454H11.0493C12.2695 14.4454 13.2707 15.4481 13.2707 16.6702C13.2707 17.8923 12.2695 18.8872 11.0493 18.8872H3.93945V17.7826H10.9946C11.6047 17.7826 12.1053 17.2812 12.1053 16.725C12.1053 16.114 11.6047 15.6674 10.9946 15.6674H10.2672C6.82565 15.6126 3.93945 12.7767 3.93945 9.2828C3.93945 5.78104 6.82565 3 10.3219 3H17.6587C21.1002 3 23.9395 5.94555 23.9395 9.38464V23Z" fill="#EE7624"></path><path d="M11.1041 13.6069C12.6606 13.6617 14.1624 15.0562 14.1624 16.717C14.1624 18.3856 12.7701 19.827 11.0493 19.827H3.93945V20.9394H10.9946C13.3255 20.9394 15.2652 19.0515 15.2652 16.717C15.2652 16.1137 15.1557 15.5575 14.882 15.0013C14.6551 14.5 14.2719 13.9986 13.8808 13.6069C13.435 13.223 12.9344 12.941 12.379 12.7217C11.7142 12.5023 11.0493 12.5571 10.3219 12.5023C9.93085 12.5023 9.047 12.2751 8.54641 11.9461C8.04583 11.6092 7.65474 11.1627 7.43574 10.6692C7.26366 10.2226 7.15416 9.7761 7.15416 9.27473C7.15416 7.55127 8.54641 6.16466 10.2672 6.16466H17.5961C19.3168 6.16466 20.7091 7.66878 20.7091 9.32957V22.9919H21.8198V9.3844C21.8198 7.05773 19.9348 5.05225 17.5961 5.05225H10.3219C7.99108 5.05225 6.0513 6.94022 6.0513 9.27473C6.0513 9.88577 6.16081 10.442 6.43456 10.9982C6.66139 11.4996 6.9899 12.0009 7.43574 12.3848C7.82682 12.7765 8.38216 13.0507 8.88275 13.2779C9.1565 13.3875 9.43808 13.4424 9.76659 13.4972C10.5488 13.552 11.0493 13.6069 11.1041 13.6069Z" fill="#EE7624"></path><path d="M10.9946 23H3.93945V21.8876H10.9946C13.8808 21.8876 16.2116 19.5531 16.2116 16.7172C16.2116 13.8892 13.8808 11.5546 10.9946 11.5546H10.2672C9.047 11.5546 8.04583 10.5519 8.04583 9.32981C8.04583 8.10772 9.047 7.10498 10.2672 7.10498H17.6039C18.8241 7.10498 19.8253 8.16256 19.8253 9.38465V22.9922H18.7146V9.38465C18.7146 8.78144 18.214 8.22523 17.6587 8.22523H10.3219C9.71184 8.22523 9.27383 8.7266 9.27383 9.27498C9.27383 9.83118 9.77442 10.3326 10.3845 10.3326H11.1041C14.6004 10.3326 17.4396 13.1606 17.4396 16.6075C17.3849 20.1641 14.4909 22.9922 10.9946 22.9922V23Z" fill="#EE7624"></path></svg>',
6
- "fal":
7
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path fill-rule="evenodd" clip-rule="evenodd" d="M16.5899 2.37891C16.9579 2.37891 17.2529 2.67812 17.2881 3.04443C17.6019 6.31174 20.2023 8.91191 23.4698 9.22569C23.8361 9.26089 24.1353 9.55582 24.1353 9.92378V16.0761C24.1353 16.4441 23.8361 16.739 23.4698 16.7742C20.2023 17.088 17.6019 19.6881 17.2881 22.9555C17.2529 23.3218 16.9579 23.621 16.5899 23.621H10.4373C10.0692 23.621 9.77432 23.3218 9.73912 22.9555C9.42534 19.6881 6.82494 17.088 3.5574 16.7742C3.19109 16.739 2.89185 16.4441 2.89185 16.0761V9.92378C2.89185 9.55582 3.19109 9.26089 3.55741 9.22569C6.82494 8.91191 9.42534 6.31174 9.73912 3.04443C9.77432 2.67812 10.0692 2.37891 10.4373 2.37891H16.5899ZM7.15714 12.982C7.15714 16.5163 10.0192 19.3814 13.5498 19.3814C17.0804 19.3814 19.9426 16.5163 19.9426 12.982C19.9426 9.44762 17.0804 6.58248 13.5498 6.58248C10.0192 6.58248 7.15714 9.44762 7.15714 12.982Z" fill="currentColor"></path></svg>',
8
- "cerebras":
9
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26" fill="none"><path d="M15 22C10.0294 22 6 17.9706 6 13C6 8.02939 10.0294 4 15 4M10.3635 18.5622C7.2966 15.989 6.89677 11.417 9.46998 8.35026C12.0432 5.28338 16.6151 4.88355 19.6819 7.45675M12.4088 17.8643C9.72407 16.447 8.69627 13.1212 10.1136 10.4368C11.5308 7.75157 14.8559 6.72427 17.5411 8.14156M15 16.746C12.9314 16.746 11.2543 15.0689 11.2543 13.0003C11.2543 10.9316 12.9314 9.25454 15 9.25454" stroke="#F15A29" stroke-width="1.5" stroke-miterlimit="10"></path></svg>',
10
- "replicate":
11
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><rect x="3.14136" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="url(#paint0_linear_171_78)"></rect><path fill-rule="evenodd" clip-rule="evenodd" d="M19.9161 7.72173V6.18848H7.49072V19.8116H9.21034V7.72173H19.9161ZM19.919 9.09575V10.629H12.4584V19.8109H10.7388V9.09575H19.919ZM19.9161 11.9922V13.5342H15.7008V19.8082H13.9811V11.9922H19.9161Z" fill="white"></path><defs><linearGradient id="paint0_linear_171_78" x1="22.9091" y1="3.17345" x2="4.19652" y2="22.4427" gradientUnits="userSpaceOnUse"><stop stop-color="#EBFF18"></stop><stop offset="0.5" stop-color="#EB40F0"></stop><stop offset="1" stop-color="#BE0000"></stop></linearGradient></defs></svg>',
12
- "black-forest-labs":
13
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.1146 5L22.5938 18.9541L20.7344 18.9687L13.1146 7.54511L6.55208 17.528H14.6458L16.1042 18.9687C16.1042 19.0468 4 18.9541 4 18.9541L13.1146 5ZM21.3906 9.46122C21.3979 9.47585 21.6969 9.95853 22.0615 10.5436C22.4188 11.1287 22.7615 11.6918 22.9583 12.0063H19.8229L20.2458 11.3262C20.2458 11.3262 20.8365 10.3827 21.026 10.0463C21.2229 9.70988 21.3833 9.44659 21.3906 9.46122Z" fill="currentColor"></path><path d="M19.6305 18.9541H17.917L13.4326 12.0794H15.2555L19.6305 18.9541Z" fill="currentColor"></path><path d="M13.224 15.9556H10.1979L11.6563 13.5787L13.224 15.9556Z" fill="currentColor"></path></svg>',
14
- "fireworks-ai":
15
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path d="M19.7941 2.5H6.20588C4.15918 2.5 2.5 4.15918 2.5 6.20588V19.7941C2.5 21.8408 4.15918 23.5 6.20588 23.5H19.7941C21.8408 23.5 23.5 21.8408 23.5 19.7941V6.20588C23.5 4.15918 21.8408 2.5 19.7941 2.5Z" fill="#5019C5"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M12.9917 14.8005C12.4958 14.8005 12.0508 14.5061 11.861 14.0503L9.57335 8.58789H10.9123L12.9995 13.5848L15.0847 8.58789H16.4237L14.1223 14.0523C13.9316 14.5061 13.4875 14.8005 12.9917 14.8005ZM15.9767 17.4106C15.4828 17.4106 15.0398 17.1181 14.8481 16.6663C14.6554 16.2105 14.7551 15.6902 15.1034 15.3371L19.2699 11.1168L19.7902 12.3442L15.9758 16.2007L21.4128 16.1704L21.9331 17.3979L15.9777 17.4125L15.9758 17.4106H15.9767ZM4.58722 16.1684L4.06689 17.3959L4.06885 17.394L10.0242 17.4076C10.5162 17.4076 10.9612 17.1162 11.1529 16.6633C11.3466 16.2085 11.2458 15.6863 10.8977 15.3342L6.73113 11.1138L6.2108 12.3413L10.0242 16.1988L4.58722 16.1684Z" fill="white"></path></svg>',
16
- "together":
17
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><g clip-path="url(#clip0_55_1726)"><path d="M19.925 2.5H6.33674C4.29004 2.5 2.63086 4.15918 2.63086 6.20588V19.7941C2.63086 21.8408 4.29004 23.5 6.33674 23.5H19.925C21.9717 23.5 23.6309 21.8408 23.6309 19.7941V6.20588C23.6309 4.15918 21.9717 2.5 19.925 2.5Z" fill="#F1EFED"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M17.6087 12.5368C19.6554 12.5368 21.3146 10.8776 21.3146 8.83088C21.3146 6.78418 19.6554 5.125 17.6087 5.125C15.562 5.125 13.9028 6.78418 13.9028 8.83088C13.9028 10.8776 15.562 12.5368 17.6087 12.5368ZM17.6087 21.1842C19.6554 21.1842 21.3146 19.525 21.3146 17.4783C21.3146 15.4316 19.6554 13.7725 17.6087 13.7725C15.562 13.7725 13.9028 15.4316 13.9028 17.4783C13.9028 19.525 15.562 21.1842 17.6087 21.1842ZM12.6676 17.4783C12.6676 19.525 11.0084 21.1842 8.96174 21.1842C6.91504 21.1842 5.25586 19.525 5.25586 17.4783C5.25586 15.4316 6.91504 13.7725 8.96174 13.7725C11.0084 13.7725 12.6676 15.4316 12.6676 17.4783Z" fill="#D3D1D1"></path><path d="M8.96174 12.5368C11.0084 12.5368 12.6676 10.8776 12.6676 8.83088C12.6676 6.78418 11.0084 5.125 8.96174 5.125C6.91504 5.125 5.25586 6.78418 5.25586 8.83088C5.25586 10.8776 6.91504 12.5368 8.96174 12.5368Z" fill="#0F6FFF"></path></g><defs><clipPath id="clip0_55_1726"><rect width="21" height="21" fill="white" transform="translate(2.63086 2.5)"></rect></clipPath></defs></svg>',
18
- "nebius":
19
- '<svg width="1em" height="1em" viewBox="0 0 26 26" class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet"><rect x="3.14136" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="#D9FE00"></rect><path fill-rule="evenodd" clip-rule="evenodd" d="M22 5.2226H19V18.4781C19 18.4781 22 18.2885 22 14.6817V5.2226ZM4 11.3183V20.7701H7V7.5146C7 7.5146 8.80257 7.25164 9.75584 9.56444L13.5339 18.6933C14.1519 20.1708 15.1636 21 16.5923 21C18.021 21 19 19.7855 19 18.4842C19 18.4842 17.1974 18.7471 16.2383 16.4356L12.4661 7.30668C11.8481 5.82923 10.8364 5 9.40771 5C7.97897 5 7 6.21327 7 7.5146C6.99416 7.5146 4 7.71029 4 11.3183Z" fill="#002C44"></path></svg>',
20
- "hyperbolic":
21
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path d="M3.4211 4.72C3.66077 4.42 4.22 3.9 4.65939 3.58C5.09879 3.26 5.71793 3 6.03749 3C6.397 3 6.69659 3.16 6.87634 3.46C7.03612 3.7 7.67524 5.14 8.27442 6.64C8.89356 8.16 9.39287 9.58 9.39287 9.8C9.39287 10.18 9.35293 10.2 8.15458 9.9C7.45554 9.72 6.35705 9.34 5.69796 9.02C5.03887 8.7 4.16008 8.06 3.76063 7.62C3.16145 6.98 3.00167 6.64 3.00167 6.06C2.9817 5.58 3.14148 5.1 3.4211 4.72Z" fill="#594CE9"></path><path d="M17.7813 6.4C18.3406 5.02 18.9397 3.7 19.0995 3.46C19.2793 3.16 19.5988 3 19.9384 3C20.2379 3 20.8371 3.24 21.2765 3.56C21.7159 3.88 22.2552 4.34 22.4749 4.6C22.7545 4.92 22.8743 5.32 22.8743 6C22.8743 6.84 22.7745 7.08 22.1753 7.7C21.7958 8.1 20.937 8.68 20.2779 9C19.6188 9.32 18.5003 9.72 16.4831 10.2L16.6029 9.54C16.6828 9.2 17.2021 7.78 17.7813 6.4Z" fill="#594CE9"></path><path d="M4.71931 10.8C4.5795 10.3 4.39975 9.72 4.31986 9.52C4.23997 9.24 4.27991 9.16 4.45967 9.24C4.5795 9.32 5.23859 9.6 5.89769 9.86C6.55678 10.14 7.81505 10.52 8.69384 10.7C9.75238 10.92 11.2104 11.04 12.9879 11.04C14.7455 11.04 16.2434 10.92 17.282 10.7C18.1608 10.52 19.5189 10.1 20.2779 9.78C21.0568 9.48 21.6959 9.24 21.7359 9.26C21.7559 9.28 21.616 9.66 21.4363 10.1C21.1966 10.66 21.0968 11.48 21.0768 12.9C21.0768 14.36 21.1767 15.14 21.4363 15.8C21.636 16.3 21.7559 16.72 21.7359 16.74C21.6959 16.76 21.0568 16.52 20.2779 16.22C19.5189 15.9 18.1608 15.48 17.282 15.3C16.2235 15.06 14.7655 14.96 12.9879 14.96C11.2104 14.96 9.75238 15.06 8.69384 15.3C7.81505 15.48 6.47689 15.9 5.69796 16.22C4.93901 16.52 4.27991 16.76 4.25994 16.74C4.23997 16.72 4.39975 16.2 4.59947 15.6C4.83914 14.94 4.99892 13.94 4.99892 13.1C4.99892 12.34 4.87909 11.3 4.71931 10.8Z" fill="#594CE9"></path><path d="M5.69796 17C6.35705 16.68 7.43557 16.3 8.07469 16.14C9.13323 15.88 9.27304 15.9 9.33296 16.18C9.39287 16.36 9.05334 17.44 8.59397 18.6C8.13461 19.76 7.53543 21.2 7.23584 21.8C6.79645 22.7 6.59672 22.9 6.15733 22.96C5.83777 22.98 5.29851 22.82 4.95898 22.62C4.59947 22.42 4.0003 21.92 3.66077 21.52C3.14148 20.96 3.00167 20.62 3.00167 20C3.00167 19.36 3.14148 19.04 3.76063 18.38C4.16008 17.94 5.03887 17.3 5.69796 17Z" fill="#594CE9"></path><path d="M17.7813 19.6C17.2021 18.22 16.7028 16.84 16.6629 16.52L16.583 15.94L17.4817 16.06C17.981 16.14 18.9797 16.44 19.7386 16.74C20.6174 17.1 21.4163 17.62 22.0754 18.24C23.074 19.2 23.074 19.22 22.9342 20.16C22.8543 20.68 22.6346 21.28 22.4349 21.48C22.2352 21.68 21.7159 22.12 21.2765 22.44C20.8371 22.76 20.2379 23 19.9384 23C19.5788 23 19.2793 22.84 19.0995 22.56C18.9397 22.3 18.3406 20.98 17.7813 19.6Z" fill="#594CE9"></path></svg>',
22
- "novita":
23
- '<svg width="1em" height="1em" viewBox="0 0 26 26" class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" preserveAspectRatio="xMidYMid meet" version="1.2"><rect x="2.43628" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="black"></rect><path d="M10.7187 5.79061C10.6923 5.80858 10.6791 6.78313 10.6835 8.13942L10.6923 10.4568C4.90331 16.3759 3.23298 18.105 3.24617 18.1274C3.25496 18.1454 4.93408 18.1589 6.97804 18.1589H10.6923C10.6923 14.5391 10.7055 13.4792 10.7275 13.4703C10.7451 13.4568 11.7956 14.5077 13.066 15.8056L15.3736 18.1589C21.1143 18.1589 22.789 18.1454 22.7978 18.123C22.811 18.105 20.1077 15.3161 16.789 11.9253C13.4703 8.53463 10.7407 5.77265 10.7187 5.79061Z" fill="#26D57A"></path></svg>',
24
- "cohere":
25
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><path fill-rule="evenodd" clip-rule="evenodd" d="M9.48 14.92C10.0133 14.92 11.08 14.8933 12.5733 14.28C14.3067 13.56 17.72 12.28 20.2 10.9467C21.9333 10.0133 22.68 8.78667 22.68 7.13333C22.68 4.86667 20.84 3 18.5467 3H8.94667C5.66667 3 3 5.66667 3 8.94667C3 12.2267 5.50667 14.92 9.48 14.92Z" fill="#39594D"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M11.1066 19C11.1066 17.4 12.0666 15.9333 13.5599 15.32L16.5732 14.0666C19.6399 12.8133 22.9999 15.0533 22.9999 18.36C22.9999 20.92 20.9199 23 18.3599 23H15.0799C12.8932 23 11.1066 21.2133 11.1066 19Z" fill="#D18EE2"></path><path d="M6.44 15.6934C4.54667 15.6934 3 17.24 3 19.1334V19.5867C3 21.4534 4.54667 23 6.44 23C8.33333 23 9.88 21.4534 9.88 19.56V19.1067C9.85333 17.24 8.33333 15.6934 6.44 15.6934Z" fill="#FF7759"></path></svg>',
26
- "hf-inference":
27
- '<svg class="text-lg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 26 26"><rect x="3.34856" y="3.02654" width="19.9474" height="19.9474" rx="2.95009" fill="#FFD21E" stroke="#FFB41E" stroke-width="1.18004"></rect><path fill-rule="evenodd" clip-rule="evenodd" d="M7.69336 9.74609V16.9754H9.32329V13.9595H11.8181V16.9754H13.4591V9.74609H11.8181V12.5292H9.32329V9.74609H7.69336ZM15.1646 9.74609V16.9754H16.7945V14.1702H19.3004V12.7953H16.7945V11.121H19.7217V9.74609H15.1646Z" fill="#814D00"></path></svg>',
28
- };
29
-
30
- $: console.log("IconProvider", provider);
31
-
32
- $: icon = provider && provider in icons ? icons[provider as keyof typeof icons] : null;
33
  </script>
34
 
35
- {#if icon}
36
- <span class="inline-block">{@html icon}</span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  {:else}
38
- <!-- Allow passing custom fallback -->
39
  <slot>
40
  <div class="size-4 flex-none rounded-sm bg-gray-200"></div>
41
  </slot>
 
1
  <script lang="ts">
2
  export let provider: string | undefined;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  </script>
4
 
5
+ {#if provider === "sambanova"}
6
+ <svg
7
+ class="text-lg"
8
+ xmlns="http://www.w3.org/2000/svg"
9
+ xmlns:xlink="http://www.w3.org/1999/xlink"
10
+ aria-hidden="true"
11
+ focusable="false"
12
+ role="img"
13
+ width="1em"
14
+ height="1em"
15
+ preserveAspectRatio="xMidYMid meet"
16
+ viewBox="0 0 26 26"
17
+ ><path
18
+ d="M23.9395 23H22.8288V9.38464C22.8288 6.5566 20.4901 4.11242 17.6039 4.11242H10.3219C7.43574 4.11242 5.10488 6.44692 5.10488 9.2828C5.10488 12.1108 7.43574 14.4454 10.3219 14.4454H11.0493C12.2695 14.4454 13.2707 15.4481 13.2707 16.6702C13.2707 17.8923 12.2695 18.8872 11.0493 18.8872H3.93945V17.7826H10.9946C11.6047 17.7826 12.1053 17.2812 12.1053 16.725C12.1053 16.114 11.6047 15.6674 10.9946 15.6674H10.2672C6.82565 15.6126 3.93945 12.7767 3.93945 9.2828C3.93945 5.78104 6.82565 3 10.3219 3H17.6587C21.1002 3 23.9395 5.94555 23.9395 9.38464V23Z"
19
+ fill="#EE7624"
20
+ ></path><path
21
+ d="M11.1041 13.6069C12.6606 13.6617 14.1624 15.0562 14.1624 16.717C14.1624 18.3856 12.7701 19.827 11.0493 19.827H3.93945V20.9394H10.9946C13.3255 20.9394 15.2652 19.0515 15.2652 16.717C15.2652 16.1137 15.1557 15.5575 14.882 15.0013C14.6551 14.5 14.2719 13.9986 13.8808 13.6069C13.435 13.223 12.9344 12.941 12.379 12.7217C11.7142 12.5023 11.0493 12.5571 10.3219 12.5023C9.93085 12.5023 9.047 12.2751 8.54641 11.9461C8.04583 11.6092 7.65474 11.1627 7.43574 10.6692C7.26366 10.2226 7.15416 9.7761 7.15416 9.27473C7.15416 7.55127 8.54641 6.16466 10.2672 6.16466H17.5961C19.3168 6.16466 20.7091 7.66878 20.7091 9.32957V22.9919H21.8198V9.3844C21.8198 7.05773 19.9348 5.05225 17.5961 5.05225H10.3219C7.99108 5.05225 6.0513 6.94022 6.0513 9.27473C6.0513 9.88577 6.16081 10.442 6.43456 10.9982C6.66139 11.4996 6.9899 12.0009 7.43574 12.3848C7.82682 12.7765 8.38216 13.0507 8.88275 13.2779C9.1565 13.3875 9.43808 13.4424 9.76659 13.4972C10.5488 13.552 11.0493 13.6069 11.1041 13.6069Z"
22
+ fill="#EE7624"
23
+ ></path><path
24
+ d="M10.9946 23H3.93945V21.8876H10.9946C13.8808 21.8876 16.2116 19.5531 16.2116 16.7172C16.2116 13.8892 13.8808 11.5546 10.9946 11.5546H10.2672C9.047 11.5546 8.04583 10.5519 8.04583 9.32981C8.04583 8.10772 9.047 7.10498 10.2672 7.10498H17.6039C18.8241 7.10498 19.8253 8.16256 19.8253 9.38465V22.9922H18.7146V9.38465C18.7146 8.78144 18.214 8.22523 17.6587 8.22523H10.3219C9.71184 8.22523 9.27383 8.7266 9.27383 9.27498C9.27383 9.83118 9.77442 10.3326 10.3845 10.3326H11.1041C14.6004 10.3326 17.4396 13.1606 17.4396 16.6075C17.3849 20.1641 14.4909 22.9922 10.9946 22.9922V23Z"
25
+ fill="#EE7624"
26
+ ></path></svg
27
+ >
28
+ {:else if provider === "fal"}
29
+ <svg
30
+ class="text-lg"
31
+ xmlns="http://www.w3.org/2000/svg"
32
+ xmlns:xlink="http://www.w3.org/1999/xlink"
33
+ aria-hidden="true"
34
+ focusable="false"
35
+ role="img"
36
+ width="1em"
37
+ height="1em"
38
+ preserveAspectRatio="xMidYMid meet"
39
+ viewBox="0 0 26 26"
40
+ ><path
41
+ fill-rule="evenodd"
42
+ clip-rule="evenodd"
43
+ d="M16.5899 2.37891C16.9579 2.37891 17.2529 2.67812 17.2881 3.04443C17.6019 6.31174 20.2023 8.91191 23.4698 9.22569C23.8361 9.26089 24.1353 9.55582 24.1353 9.92378V16.0761C24.1353 16.4441 23.8361 16.739 23.4698 16.7742C20.2023 17.088 17.6019 19.6881 17.2881 22.9555C17.2529 23.3218 16.9579 23.621 16.5899 23.621H10.4373C10.0692 23.621 9.77432 23.3218 9.73912 22.9555C9.42534 19.6881 6.82494 17.088 3.5574 16.7742C3.19109 16.739 2.89185 16.4441 2.89185 16.0761V9.92378C2.89185 9.55582 3.19109 9.26089 3.55741 9.22569C6.82494 8.91191 9.42534 6.31174 9.73912 3.04443C9.77432 2.67812 10.0692 2.37891 10.4373 2.37891H16.5899ZM7.15714 12.982C7.15714 16.5163 10.0192 19.3814 13.5498 19.3814C17.0804 19.3814 19.9426 16.5163 19.9426 12.982C19.9426 9.44762 17.0804 6.58248 13.5498 6.58248C10.0192 6.58248 7.15714 9.44762 7.15714 12.982Z"
44
+ fill="currentColor"
45
+ ></path></svg
46
+ >
47
+ {:else if provider === "cerebras"}
48
+ <svg
49
+ class="text-lg"
50
+ xmlns="http://www.w3.org/2000/svg"
51
+ xmlns:xlink="http://www.w3.org/1999/xlink"
52
+ aria-hidden="true"
53
+ focusable="false"
54
+ role="img"
55
+ width="1em"
56
+ height="1em"
57
+ preserveAspectRatio="xMidYMid meet"
58
+ viewBox="0 0 26 26"
59
+ fill="none"
60
+ ><path
61
+ d="M15 22C10.0294 22 6 17.9706 6 13C6 8.02939 10.0294 4 15 4M10.3635 18.5622C7.2966 15.989 6.89677 11.417 9.46998 8.35026C12.0432 5.28338 16.6151 4.88355 19.6819 7.45675M12.4088 17.8643C9.72407 16.447 8.69627 13.1212 10.1136 10.4368C11.5308 7.75157 14.8559 6.72427 17.5411 8.14156M15 16.746C12.9314 16.746 11.2543 15.0689 11.2543 13.0003C11.2543 10.9316 12.9314 9.25454 15 9.25454"
62
+ stroke="#F15A29"
63
+ stroke-width="1.5"
64
+ stroke-miterlimit="10"
65
+ ></path></svg
66
+ >
67
+ {:else if provider === "replicate"}
68
+ <svg
69
+ class="text-lg"
70
+ xmlns="http://www.w3.org/2000/svg"
71
+ xmlns:xlink="http://www.w3.org/1999/xlink"
72
+ aria-hidden="true"
73
+ focusable="false"
74
+ role="img"
75
+ width="1em"
76
+ height="1em"
77
+ preserveAspectRatio="xMidYMid meet"
78
+ viewBox="0 0 26 26"
79
+ ><rect x="3.14136" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="url(#paint0_linear_171_78)"
80
+ ></rect><path
81
+ fill-rule="evenodd"
82
+ clip-rule="evenodd"
83
+ d="M19.9161 7.72173V6.18848H7.49072V19.8116H9.21034V7.72173H19.9161ZM19.919 9.09575V10.629H12.4584V19.8109H10.7388V9.09575H19.919ZM19.9161 11.9922V13.5342H15.7008V19.8082H13.9811V11.9922H19.9161Z"
84
+ fill="white"
85
+ ></path><defs
86
+ ><linearGradient
87
+ id="paint0_linear_171_78"
88
+ x1="22.9091"
89
+ y1="3.17345"
90
+ x2="4.19652"
91
+ y2="22.4427"
92
+ gradientUnits="userSpaceOnUse"
93
+ ><stop stop-color="#EBFF18"></stop><stop offset="0.5" stop-color="#EB40F0"></stop><stop
94
+ offset="1"
95
+ stop-color="#BE0000"
96
+ ></stop></linearGradient
97
+ ></defs
98
+ ></svg
99
+ >
100
+ {:else if provider === "black-forest-labs"}
101
+ <svg
102
+ class="text-lg"
103
+ xmlns="http://www.w3.org/2000/svg"
104
+ xmlns:xlink="http://www.w3.org/1999/xlink"
105
+ aria-hidden="true"
106
+ focusable="false"
107
+ role="img"
108
+ width="1em"
109
+ height="1em"
110
+ preserveAspectRatio="xMidYMid meet"
111
+ viewBox="0 0 26 26"
112
+ ><path
113
+ fill-rule="evenodd"
114
+ clip-rule="evenodd"
115
+ d="M13.1146 5L22.5938 18.9541L20.7344 18.9687L13.1146 7.54511L6.55208 17.528H14.6458L16.1042 18.9687C16.1042 19.0468 4 18.9541 4 18.9541L13.1146 5ZM21.3906 9.46122C21.3979 9.47585 21.6969 9.95853 22.0615 10.5436C22.4188 11.1287 22.7615 11.6918 22.9583 12.0063H19.8229L20.2458 11.3262C20.2458 11.3262 20.8365 10.3827 21.026 10.0463C21.2229 9.70988 21.3833 9.44659 21.3906 9.46122Z"
116
+ fill="currentColor"
117
+ ></path><path d="M19.6305 18.9541H17.917L13.4326 12.0794H15.2555L19.6305 18.9541Z" fill="currentColor"></path><path
118
+ d="M13.224 15.9556H10.1979L11.6563 13.5787L13.224 15.9556Z"
119
+ fill="currentColor"
120
+ ></path></svg
121
+ >
122
+ {:else if provider === "fireworks-ai"}
123
+ <svg
124
+ class="text-lg"
125
+ xmlns="http://www.w3.org/2000/svg"
126
+ xmlns:xlink="http://www.w3.org/1999/xlink"
127
+ aria-hidden="true"
128
+ focusable="false"
129
+ role="img"
130
+ width="1em"
131
+ height="1em"
132
+ preserveAspectRatio="xMidYMid meet"
133
+ viewBox="0 0 26 26"
134
+ ><path
135
+ d="M19.7941 2.5H6.20588C4.15918 2.5 2.5 4.15918 2.5 6.20588V19.7941C2.5 21.8408 4.15918 23.5 6.20588 23.5H19.7941C21.8408 23.5 23.5 21.8408 23.5 19.7941V6.20588C23.5 4.15918 21.8408 2.5 19.7941 2.5Z"
136
+ fill="#5019C5"
137
+ ></path><path
138
+ fill-rule="evenodd"
139
+ clip-rule="evenodd"
140
+ d="M12.9917 14.8005C12.4958 14.8005 12.0508 14.5061 11.861 14.0503L9.57335 8.58789H10.9123L12.9995 13.5848L15.0847 8.58789H16.4237L14.1223 14.0523C13.9316 14.5061 13.4875 14.8005 12.9917 14.8005ZM15.9767 17.4106C15.4828 17.4106 15.0398 17.1181 14.8481 16.6663C14.6554 16.2105 14.7551 15.6902 15.1034 15.3371L19.2699 11.1168L19.7902 12.3442L15.9758 16.2007L21.4128 16.1704L21.9331 17.3979L15.9777 17.4125L15.9758 17.4106H15.9767ZM4.58722 16.1684L4.06689 17.3959L4.06885 17.394L10.0242 17.4076C10.5162 17.4076 10.9612 17.1162 11.1529 16.6633C11.3466 16.2085 11.2458 15.6863 10.8977 15.3342L6.73113 11.1138L6.2108 12.3413L10.0242 16.1988L4.58722 16.1684Z"
141
+ fill="white"
142
+ ></path></svg
143
+ >
144
+ {:else if provider === "together"}
145
+ <svg
146
+ class="text-lg"
147
+ xmlns="http://www.w3.org/2000/svg"
148
+ xmlns:xlink="http://www.w3.org/1999/xlink"
149
+ aria-hidden="true"
150
+ focusable="false"
151
+ role="img"
152
+ width="1em"
153
+ height="1em"
154
+ preserveAspectRatio="xMidYMid meet"
155
+ viewBox="0 0 26 26"
156
+ ><g clip-path="url(#clip0_55_1726)"
157
+ ><path
158
+ d="M19.925 2.5H6.33674C4.29004 2.5 2.63086 4.15918 2.63086 6.20588V19.7941C2.63086 21.8408 4.29004 23.5 6.33674 23.5H19.925C21.9717 23.5 23.6309 21.8408 23.6309 19.7941V6.20588C23.6309 4.15918 21.9717 2.5 19.925 2.5Z"
159
+ fill="#F1EFED"
160
+ ></path><path
161
+ fill-rule="evenodd"
162
+ clip-rule="evenodd"
163
+ d="M17.6087 12.5368C19.6554 12.5368 21.3146 10.8776 21.3146 8.83088C21.3146 6.78418 19.6554 5.125 17.6087 5.125C15.562 5.125 13.9028 6.78418 13.9028 8.83088C13.9028 10.8776 15.562 12.5368 17.6087 12.5368ZM17.6087 21.1842C19.6554 21.1842 21.3146 19.525 21.3146 17.4783C21.3146 15.4316 19.6554 13.7725 17.6087 13.7725C15.562 13.7725 13.9028 15.4316 13.9028 17.4783C13.9028 19.525 15.562 21.1842 17.6087 21.1842ZM12.6676 17.4783C12.6676 19.525 11.0084 21.1842 8.96174 21.1842C6.91504 21.1842 5.25586 19.525 5.25586 17.4783C5.25586 15.4316 6.91504 13.7725 8.96174 13.7725C11.0084 13.7725 12.6676 15.4316 12.6676 17.4783Z"
164
+ fill="#D3D1D1"
165
+ ></path><path
166
+ d="M8.96174 12.5368C11.0084 12.5368 12.6676 10.8776 12.6676 8.83088C12.6676 6.78418 11.0084 5.125 8.96174 5.125C6.91504 5.125 5.25586 6.78418 5.25586 8.83088C5.25586 10.8776 6.91504 12.5368 8.96174 12.5368Z"
167
+ fill="#0F6FFF"
168
+ ></path></g
169
+ ><defs
170
+ ><clipPath id="clip0_55_1726"
171
+ ><rect width="21" height="21" fill="white" transform="translate(2.63086 2.5)"></rect></clipPath
172
+ ></defs
173
+ ></svg
174
+ >
175
+ {:else if provider === "nebius"}
176
+ <svg
177
+ width="1em"
178
+ height="1em"
179
+ viewBox="0 0 26 26"
180
+ class="text-lg"
181
+ xmlns="http://www.w3.org/2000/svg"
182
+ xmlns:xlink="http://www.w3.org/1999/xlink"
183
+ aria-hidden="true"
184
+ focusable="false"
185
+ role="img"
186
+ preserveAspectRatio="xMidYMid meet"
187
+ ><rect x="3.14136" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="#D9FE00"></rect><path
188
+ fill-rule="evenodd"
189
+ clip-rule="evenodd"
190
+ d="M22 5.2226H19V18.4781C19 18.4781 22 18.2885 22 14.6817V5.2226ZM4 11.3183V20.7701H7V7.5146C7 7.5146 8.80257 7.25164 9.75584 9.56444L13.5339 18.6933C14.1519 20.1708 15.1636 21 16.5923 21C18.021 21 19 19.7855 19 18.4842C19 18.4842 17.1974 18.7471 16.2383 16.4356L12.4661 7.30668C11.8481 5.82923 10.8364 5 9.40771 5C7.97897 5 7 6.21327 7 7.5146C6.99416 7.5146 4 7.71029 4 11.3183Z"
191
+ fill="#002C44"
192
+ ></path></svg
193
+ >
194
+ {:else if provider === "hyperbolic"}
195
+ <svg
196
+ class="text-lg"
197
+ xmlns="http://www.w3.org/2000/svg"
198
+ xmlns:xlink="http://www.w3.org/1999/xlink"
199
+ aria-hidden="true"
200
+ focusable="false"
201
+ role="img"
202
+ width="1em"
203
+ height="1em"
204
+ preserveAspectRatio="xMidYMid meet"
205
+ viewBox="0 0 26 26"
206
+ ><path
207
+ d="M3.4211 4.72C3.66077 4.42 4.22 3.9 4.65939 3.58C5.09879 3.26 5.71793 3 6.03749 3C6.397 3 6.69659 3.16 6.87634 3.46C7.03612 3.7 7.67524 5.14 8.27442 6.64C8.89356 8.16 9.39287 9.58 9.39287 9.8C9.39287 10.18 9.35293 10.2 8.15458 9.9C7.45554 9.72 6.35705 9.34 5.69796 9.02C5.03887 8.7 4.16008 8.06 3.76063 7.62C3.16145 6.98 3.00167 6.64 3.00167 6.06C2.9817 5.58 3.14148 5.1 3.4211 4.72Z"
208
+ fill="#594CE9"
209
+ ></path><path
210
+ d="M17.7813 6.4C18.3406 5.02 18.9397 3.7 19.0995 3.46C19.2793 3.16 19.5988 3 19.9384 3C20.2379 3 20.8371 3.24 21.2765 3.56C21.7159 3.88 22.2552 4.34 22.4749 4.6C22.7545 4.92 22.8743 5.32 22.8743 6C22.8743 6.84 22.7745 7.08 22.1753 7.7C21.7958 8.1 20.937 8.68 20.2779 9C19.6188 9.32 18.5003 9.72 16.4831 10.2L16.6029 9.54C16.6828 9.2 17.2021 7.78 17.7813 6.4Z"
211
+ fill="#594CE9"
212
+ ></path><path
213
+ d="M4.71931 10.8C4.5795 10.3 4.39975 9.72 4.31986 9.52C4.23997 9.24 4.27991 9.16 4.45967 9.24C4.5795 9.32 5.23859 9.6 5.89769 9.86C6.55678 10.14 7.81505 10.52 8.69384 10.7C9.75238 10.92 11.2104 11.04 12.9879 11.04C14.7455 11.04 16.2434 10.92 17.282 10.7C18.1608 10.52 19.5189 10.1 20.2779 9.78C21.0568 9.48 21.6959 9.24 21.7359 9.26C21.7559 9.28 21.616 9.66 21.4363 10.1C21.1966 10.66 21.0968 11.48 21.0768 12.9C21.0768 14.36 21.1767 15.14 21.4363 15.8C21.636 16.3 21.7559 16.72 21.7359 16.74C21.6959 16.76 21.0568 16.52 20.2779 16.22C19.5189 15.9 18.1608 15.48 17.282 15.3C16.2235 15.06 14.7655 14.96 12.9879 14.96C11.2104 14.96 9.75238 15.06 8.69384 15.3C7.81505 15.48 6.47689 15.9 5.69796 16.22C4.93901 16.52 4.27991 16.76 4.25994 16.74C4.23997 16.72 4.39975 16.2 4.59947 15.6C4.83914 14.94 4.99892 13.94 4.99892 13.1C4.99892 12.34 4.87909 11.3 4.71931 10.8Z"
214
+ fill="#594CE9"
215
+ ></path><path
216
+ d="M5.69796 17C6.35705 16.68 7.43557 16.3 8.07469 16.14C9.13323 15.88 9.27304 15.9 9.33296 16.18C9.39287 16.36 9.05334 17.44 8.59397 18.6C8.13461 19.76 7.53543 21.2 7.23584 21.8C6.79645 22.7 6.59672 22.9 6.15733 22.96C5.83777 22.98 5.29851 22.82 4.95898 22.62C4.59947 22.42 4.0003 21.92 3.66077 21.52C3.14148 20.96 3.00167 20.62 3.00167 20C3.00167 19.36 3.14148 19.04 3.76063 18.38C4.16008 17.94 5.03887 17.3 5.69796 17Z"
217
+ fill="#594CE9"
218
+ ></path><path
219
+ d="M17.7813 19.6C17.2021 18.22 16.7028 16.84 16.6629 16.52L16.583 15.94L17.4817 16.06C17.981 16.14 18.9797 16.44 19.7386 16.74C20.6174 17.1 21.4163 17.62 22.0754 18.24C23.074 19.2 23.074 19.22 22.9342 20.16C22.8543 20.68 22.6346 21.28 22.4349 21.48C22.2352 21.68 21.7159 22.12 21.2765 22.44C20.8371 22.76 20.2379 23 19.9384 23C19.5788 23 19.2793 22.84 19.0995 22.56C18.9397 22.3 18.3406 20.98 17.7813 19.6Z"
220
+ fill="#594CE9"
221
+ ></path></svg
222
+ >
223
+ {:else if provider === "novita"}
224
+ <svg
225
+ width="1em"
226
+ height="1em"
227
+ viewBox="0 0 26 26"
228
+ class="text-lg"
229
+ xmlns="http://www.w3.org/2000/svg"
230
+ xmlns:xlink="http://www.w3.org/1999/xlink"
231
+ aria-hidden="true"
232
+ focusable="false"
233
+ role="img"
234
+ preserveAspectRatio="xMidYMid meet"
235
+ version="1.2"
236
+ ><rect x="2.43628" y="2.43652" width="21.1274" height="21.1274" rx="3.54011" fill="black"></rect><path
237
+ d="M10.7187 5.79061C10.6923 5.80858 10.6791 6.78313 10.6835 8.13942L10.6923 10.4568C4.90331 16.3759 3.23298 18.105 3.24617 18.1274C3.25496 18.1454 4.93408 18.1589 6.97804 18.1589H10.6923C10.6923 14.5391 10.7055 13.4792 10.7275 13.4703C10.7451 13.4568 11.7956 14.5077 13.066 15.8056L15.3736 18.1589C21.1143 18.1589 22.789 18.1454 22.7978 18.123C22.811 18.105 20.1077 15.3161 16.789 11.9253C13.4703 8.53463 10.7407 5.77265 10.7187 5.79061Z"
238
+ fill="#26D57A"
239
+ ></path></svg
240
+ >
241
+ {:else if provider === "cohere"}
242
+ <svg
243
+ class="text-lg"
244
+ xmlns="http://www.w3.org/2000/svg"
245
+ xmlns:xlink="http://www.w3.org/1999/xlink"
246
+ aria-hidden="true"
247
+ focusable="false"
248
+ role="img"
249
+ width="1em"
250
+ height="1em"
251
+ preserveAspectRatio="xMidYMid meet"
252
+ viewBox="0 0 26 26"
253
+ ><path
254
+ fill-rule="evenodd"
255
+ clip-rule="evenodd"
256
+ d="M9.48 14.92C10.0133 14.92 11.08 14.8933 12.5733 14.28C14.3067 13.56 17.72 12.28 20.2 10.9467C21.9333 10.0133 22.68 8.78667 22.68 7.13333C22.68 4.86667 20.84 3 18.5467 3H8.94667C5.66667 3 3 5.66667 3 8.94667C3 12.2267 5.50667 14.92 9.48 14.92Z"
257
+ fill="#39594D"
258
+ ></path><path
259
+ fill-rule="evenodd"
260
+ clip-rule="evenodd"
261
+ d="M11.1066 19C11.1066 17.4 12.0666 15.9333 13.5599 15.32L16.5732 14.0666C19.6399 12.8133 22.9999 15.0533 22.9999 18.36C22.9999 20.92 20.9199 23 18.3599 23H15.0799C12.8932 23 11.1066 21.2133 11.1066 19Z"
262
+ fill="#D18EE2"
263
+ ></path><path
264
+ d="M6.44 15.6934C4.54667 15.6934 3 17.24 3 19.1334V19.5867C3 21.4534 4.54667 23 6.44 23C8.33333 23 9.88 21.4534 9.88 19.56V19.1067C9.85333 17.24 8.33333 15.6934 6.44 15.6934Z"
265
+ fill="#FF7759"
266
+ ></path></svg
267
+ >
268
+ {:else if provider === "hf-inference"}
269
+ <svg
270
+ class="text-lg"
271
+ xmlns="http://www.w3.org/2000/svg"
272
+ xmlns:xlink="http://www.w3.org/1999/xlink"
273
+ aria-hidden="true"
274
+ focusable="false"
275
+ role="img"
276
+ width="1em"
277
+ height="1em"
278
+ preserveAspectRatio="xMidYMid meet"
279
+ viewBox="0 0 26 26"
280
+ ><rect
281
+ x="3.34856"
282
+ y="3.02654"
283
+ width="19.9474"
284
+ height="19.9474"
285
+ rx="2.95009"
286
+ fill="#FFD21E"
287
+ stroke="#FFB41E"
288
+ stroke-width="1.18004"
289
+ ></rect><path
290
+ fill-rule="evenodd"
291
+ clip-rule="evenodd"
292
+ d="M7.69336 9.74609V16.9754H9.32329V13.9595H11.8181V16.9754H13.4591V9.74609H11.8181V12.5292H9.32329V9.74609H7.69336ZM15.1646 9.74609V16.9754H16.7945V14.1702H19.3004V12.7953H16.7945V11.121H19.7217V9.74609H15.1646Z"
293
+ fill="#814D00"
294
+ ></path></svg
295
+ >
296
  {:else}
 
297
  <slot>
298
  <div class="size-4 flex-none rounded-sm bg-gray-200"></div>
299
  </slot>
src/lib/components/Icons/IconSearch.svelte DELETED
@@ -1,18 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- focusable="false"
11
- role="img"
12
- width="1em"
13
- height="1em"
14
- preserveAspectRatio="xMidYMid meet"
15
- viewBox="0 0 32 32"
16
- >
17
- <path d="M30 28.59L22.45 21A11 11 0 1 0 21 22.45L28.59 30zM5 14a9 9 0 1 1 9 9a9 9 0 0 1-9-9z" fill="currentColor" />
18
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconStar.svelte DELETED
@@ -1,22 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- xmlns="http://www.w3.org/2000/svg"
8
- xmlns:xlink="http://www.w3.org/1999/xlink"
9
- aria-hidden="true"
10
- fill="none"
11
- focusable="false"
12
- role="img"
13
- width="1em"
14
- height="1em"
15
- preserveAspectRatio="xMidYMid meet"
16
- viewBox="0 0 32 32"
17
- >
18
- <path
19
- d="M16 6.52l2.76 5.58l.46 1l1 .15l6.16.89l-4.38 4.3l-.75.73l.18 1l1.05 6.13l-5.51-2.89L16 23l-.93.49l-5.51 2.85l1-6.13l.18-1l-.74-.77l-4.42-4.35l6.16-.89l1-.15l.46-1L16 6.52M16 2l-4.55 9.22l-10.17 1.47l7.36 7.18L6.9 30l9.1-4.78L25.1 30l-1.74-10.13l7.36-7.17l-10.17-1.48z"
20
- fill="currentColor"
21
- />
22
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/Icons/IconThrashcan.svelte DELETED
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- export let classNames = "";
3
- </script>
4
-
5
- <svg
6
- class={classNames}
7
- style=""
8
- xmlns="http://www.w3.org/2000/svg"
9
- xmlns:xlink="http://www.w3.org/1999/xlink"
10
- aria-hidden="true"
11
- focusable="false"
12
- role="img"
13
- width="1em"
14
- height="1em"
15
- preserveAspectRatio="xMidYMid meet"
16
- viewBox="0 0 24 24"
17
- ><path
18
- fill="currentColor"
19
- d="M2.131 13.63a10 10 0 0 1 .001-3.26c1.101.026 2.092-.502 2.477-1.431c.385-.93.058-2.003-.74-2.763a10 10 0 0 1 2.306-2.307c.76.798 1.834 1.125 2.763.74c.93-.385 1.458-1.376 1.431-2.477a10 10 0 0 1 3.261 0c-.026 1.102.502 2.092 1.431 2.477c.93.385 2.003.058 2.763-.74a10 10 0 0 1 2.307 2.306c-.798.76-1.125 1.834-.74 2.764s1.376 1.458 2.477 1.43a10 10 0 0 1 0 3.262c-1.102-.027-2.092.501-2.477 1.43c-.385.93-.058 2.004.74 2.764a10 10 0 0 1-2.306 2.306c-.76-.798-1.834-1.125-2.764-.74s-1.458 1.376-1.43 2.478a10 10 0 0 1-3.262-.001c.027-1.101-.502-2.092-1.43-2.477c-.93-.385-2.004-.058-2.764.74a10 10 0 0 1-2.306-2.306c.798-.76 1.125-1.834.74-2.763c-.385-.93-1.376-1.458-2.478-1.431M12 15a3 3 0 1 0 0-6a3 3 0 0 0 0 6"
20
- /></svg
21
- >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/lib/components/InferencePlayground/InferencePlayground.svelte CHANGED
@@ -8,23 +8,23 @@
8
  } from "./inferencePlaygroundUtils";
9
 
10
  import { models } from "$lib/stores/models";
11
- import { session } from "$lib/stores/session";
12
  import { token } from "$lib/stores/token";
13
  import { isMac } from "$lib/utils/platform";
14
  import { HfInference } from "@huggingface/inference";
15
  import { onDestroy } from "svelte";
16
- import IconCode from "../Icons/IconCode.svelte";
17
- import IconCompare from "../Icons/IconCompare.svelte";
18
- import IconDelete from "../Icons/IconDelete.svelte";
19
- import IconInfo from "../Icons/IconInfo.svelte";
20
- import IconThrashcan from "../Icons/IconThrashcan.svelte";
21
  import PlaygroundConversation from "./InferencePlaygroundConversation.svelte";
22
  import PlaygroundConversationHeader from "./InferencePlaygroundConversationHeader.svelte";
23
  import GenerationConfig from "./InferencePlaygroundGenerationConfig.svelte";
24
  import HFTokenModal from "./InferencePlaygroundHFTokenModal.svelte";
25
  import ModelSelector from "./InferencePlaygroundModelSelector.svelte";
26
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
27
- import IconExternal from "../Icons/IconExternal.svelte";
28
 
29
  const startMessageUser: ConversationMessage = { role: "user", content: "" };
30
 
@@ -39,34 +39,15 @@
39
  latency: number;
40
  generatedTokensCount: number;
41
  }
42
- let generationStats = $session.conversations.map(_ => ({ latency: 0, generatedTokensCount: 0 })) as
43
  | [GenerationStatistics]
44
  | [GenerationStatistics, GenerationStatistics];
45
 
46
- $: systemPromptSupported = $session.conversations.some(conversation => isSystemPromptSupported(conversation.model));
47
- $: compareActive = $session.conversations.length === 2;
48
-
49
- function addMessage(conversationIdx: number) {
50
- const conversation = $session.conversations[conversationIdx];
51
- if (!conversation) return;
52
- const msgs = conversation.messages.slice();
53
- conversation.messages = [
54
- ...msgs,
55
- {
56
- role: msgs.at(-1)?.role === "user" ? "assistant" : "user",
57
- content: "",
58
- },
59
- ];
60
- $session = $session;
61
- }
62
-
63
- function deleteMessage(conversationIdx: number, idx: number) {
64
- $session.conversations[conversationIdx]?.messages.splice(idx, 1)[0];
65
- $session = $session;
66
- }
67
 
68
  function reset() {
69
- $session.conversations.map(conversation => {
70
  conversation.systemMessage.content = "";
71
  conversation.messages = [{ ...startMessageUser }];
72
  });
@@ -136,10 +117,10 @@
136
  return;
137
  }
138
 
139
- for (const [idx, conversation] of $session.conversations.entries()) {
140
  if (conversation.messages.at(-1)?.role === "assistant") {
141
  let prefix = "";
142
- if ($session.conversations.length === 2) {
143
  prefix = `Error on ${idx === 0 ? "left" : "right"} conversation. `;
144
  }
145
  return alert(`${prefix}Messages must alternate between user/assistant roles.`);
@@ -150,10 +131,10 @@
150
  loading = true;
151
 
152
  try {
153
- const promises = $session.conversations.map((conversation, idx) => runInference(conversation, idx));
154
  await Promise.all(promises);
155
  } catch (error) {
156
- for (const conversation of $session.conversations) {
157
  if (conversation.messages.at(-1)?.role === "assistant" && !conversation.messages.at(-1)?.content?.trim()) {
158
  conversation.messages.pop();
159
  conversation.messages = [...conversation.messages];
@@ -197,16 +178,16 @@
197
 
198
  function addCompareModel(modelId: ModelWithTokenizer["id"]) {
199
  const model = $models.find(m => m.id === modelId);
200
- if (!model || $session.conversations.length === 2) {
201
  return;
202
  }
203
- const newConversation = { ...JSON.parse(JSON.stringify($session.conversations[0])), model };
204
- $session.conversations = [...$session.conversations, newConversation];
205
  generationStats = [generationStats[0], { latency: 0, generatedTokensCount: 0 }];
206
  }
207
 
208
  function removeCompareModal(conversationIdx: number) {
209
- $session.conversations.splice(conversationIdx, 1)[0];
210
  $session = $session;
211
  generationStats.splice(conversationIdx, 1)[0];
212
  generationStats = generationStats;
@@ -229,11 +210,14 @@
229
 
230
  <!-- svelte-ignore a11y-no-static-element-interactions -->
231
  <div
232
- class="grid h-dvh divide-gray-200 overflow-hidden bg-gray-100/50 max-md:grid-rows-[120px_1fr] max-md:divide-y dark:divide-gray-800 dark:bg-gray-900 dark:text-gray-300 dark:[color-scheme:dark] {compareActive
233
  ? 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)]'
234
  : 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)_clamp(270px,25%,300px)]'}"
235
  >
236
- <div class="flex flex-col overflow-y-auto py-3 pr-3 max-md:pl-3">
 
 
 
237
  <div
238
  class="relative flex flex-1 flex-col gap-6 overflow-y-hidden rounded-r-xl border-x border-y border-gray-200/80 bg-linear-to-b from-white via-white p-3 shadow-xs max-md:rounded-xl dark:border-white/5 dark:from-gray-800/40 dark:via-gray-800/40"
239
  class:pointer-events-none={!systemPromptSupported}
@@ -246,9 +230,9 @@
246
  placeholder={systemPromptSupported
247
  ? "Enter a custom prompt"
248
  : "System prompt is not supported with the chosen model."}
249
- value={systemPromptSupported ? $session.conversations[0].systemMessage.content : ""}
250
  on:input={e => {
251
- for (const conversation of $session.conversations) {
252
  conversation.systemMessage.content = e.currentTarget.value;
253
  }
254
  $session = $session;
@@ -261,7 +245,7 @@
261
  <div
262
  class="flex h-[calc(100dvh-5rem-120px)] divide-x divide-gray-200 overflow-x-auto overflow-y-hidden *:w-full max-sm:w-dvw md:h-[calc(100dvh-5rem)] md:pt-3 dark:divide-gray-800"
263
  >
264
- {#each $session.conversations as conversation, conversationIdx}
265
  <div class="max-sm:min-w-full">
266
  {#if compareActive}
267
  <PlaygroundConversationHeader
@@ -272,11 +256,9 @@
272
  {/if}
273
  <PlaygroundConversation
274
  {loading}
275
- {conversation}
276
  {viewCode}
277
  {compareActive}
278
- on:addMessage={() => addMessage(conversationIdx)}
279
- on:deleteMessage={e => deleteMessage(conversationIdx, e.detail)}
280
  on:closeCode={() => (viewCode = false)}
281
  />
282
  </div>
@@ -292,15 +274,13 @@
292
  on:click={() => (viewSettings = !viewSettings)}
293
  class="flex h-[39px] items-center gap-1 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden md:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
294
  >
295
- <IconThrashcan classNames="text-black dark:text-white" />
 
 
296
  {!viewSettings ? "Settings" : "Hide Settings"}
297
  </button>
298
  {/if}
299
- <button
300
- type="button"
301
- on:click={reset}
302
- class="flex size-[39px] flex-none items-center justify-center rounded-lg border border-gray-200 bg-white text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
303
- >
304
  <IconDelete />
305
  </button>
306
  </div>
@@ -310,11 +290,7 @@
310
  {/each}
311
  </div>
312
  <div class="flex flex-1 justify-end gap-x-2">
313
- <button
314
- type="button"
315
- on:click={() => (viewCode = !viewCode)}
316
- class="flex h-[39px] items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
317
- >
318
  <IconCode />
319
  {!viewCode ? "View Code" : "Hide Code"}</button
320
  >
@@ -331,7 +307,7 @@
331
  {#if loading}
332
  <div class="flex flex-none items-center gap-[3px]">
333
  <span class="mr-2">
334
- {#if $session.conversations[0].streaming || $session.conversations[1]?.streaming}
335
  Stop
336
  {:else}
337
  Cancel
@@ -366,7 +342,7 @@
366
  class="flex flex-1 flex-col gap-6 overflow-y-hidden rounded-xl border border-gray-200/80 bg-white bg-linear-to-b from-white via-white p-3 shadow-xs dark:border-white/5 dark:bg-gray-900 dark:from-gray-800/40 dark:via-gray-800/40"
367
  >
368
  <div class="flex flex-col gap-2">
369
- <ModelSelector bind:conversation={$session.conversations[0]} />
370
  <div class="flex items-center gap-2 self-end px-2 text-xs whitespace-nowrap">
371
  <button
372
  class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
@@ -376,18 +352,18 @@
376
  Compare
377
  </button>
378
  <a
379
- href="https://huggingface.co/{$session.conversations[0].model.id}?inference_provider={$session
380
  .conversations[0].provider}"
381
  target="_blank"
382
  class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
383
  >
384
- <IconExternal />
385
  Model page
386
  </a>
387
  </div>
388
  </div>
389
 
390
- <GenerationConfig bind:conversation={$session.conversations[0]} />
391
  {#if $token.value}
392
  <button
393
  on:click={token.reset}
@@ -429,7 +405,9 @@
429
  href="https://huggingface.co/docs/api-inference/tasks/chat-completion"
430
  class="flex items-center gap-1 text-sm text-gray-500 underline decoration-gray-300 hover:text-gray-800 dark:text-gray-400 dark:decoration-gray-600 dark:hover:text-gray-200"
431
  >
432
- <IconInfo classNames="text-xs" />
 
 
433
  View Docs
434
  </a>
435
  <span class="dark:text-gray-500">·</span>
@@ -444,7 +422,7 @@
444
 
445
  {#if selectCompareModelOpen}
446
  <ModelSelectorModal
447
- conversation={$session.conversations[0]}
448
  on:modelSelected={e => addCompareModel(e.detail)}
449
  on:close={() => (selectCompareModelOpen = false)}
450
  />
 
8
  } from "./inferencePlaygroundUtils";
9
 
10
  import { models } from "$lib/stores/models";
11
+ import { project, session } from "$lib/stores/session";
12
  import { token } from "$lib/stores/token";
13
  import { isMac } from "$lib/utils/platform";
14
  import { HfInference } from "@huggingface/inference";
15
  import { onDestroy } from "svelte";
16
+ import IconExternal from "~icons/carbon/arrow-up-right";
17
+ import IconCode from "~icons/carbon/code";
18
+ import IconCompare from "~icons/carbon/compare";
19
+ import IconInfo from "~icons/carbon/information";
20
+ import { default as IconDelete, default as IconThrashcan } from "~icons/carbon/trash-can";
21
  import PlaygroundConversation from "./InferencePlaygroundConversation.svelte";
22
  import PlaygroundConversationHeader from "./InferencePlaygroundConversationHeader.svelte";
23
  import GenerationConfig from "./InferencePlaygroundGenerationConfig.svelte";
24
  import HFTokenModal from "./InferencePlaygroundHFTokenModal.svelte";
25
  import ModelSelector from "./InferencePlaygroundModelSelector.svelte";
26
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
27
+ import InferencePlaygroundProjectSelect from "./InferencePlaygroundProjectSelect.svelte";
28
 
29
  const startMessageUser: ConversationMessage = { role: "user", content: "" };
30
 
 
39
  latency: number;
40
  generatedTokensCount: number;
41
  }
42
+ let generationStats = $project.conversations.map(_ => ({ latency: 0, generatedTokensCount: 0 })) as
43
  | [GenerationStatistics]
44
  | [GenerationStatistics, GenerationStatistics];
45
 
46
+ $: systemPromptSupported = $project.conversations.some(conversation => isSystemPromptSupported(conversation.model));
47
+ $: compareActive = $project.conversations.length === 2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  function reset() {
50
+ $project.conversations.map(conversation => {
51
  conversation.systemMessage.content = "";
52
  conversation.messages = [{ ...startMessageUser }];
53
  });
 
117
  return;
118
  }
119
 
120
+ for (const [idx, conversation] of $project.conversations.entries()) {
121
  if (conversation.messages.at(-1)?.role === "assistant") {
122
  let prefix = "";
123
+ if ($project.conversations.length === 2) {
124
  prefix = `Error on ${idx === 0 ? "left" : "right"} conversation. `;
125
  }
126
  return alert(`${prefix}Messages must alternate between user/assistant roles.`);
 
131
  loading = true;
132
 
133
  try {
134
+ const promises = $project.conversations.map((conversation, idx) => runInference(conversation, idx));
135
  await Promise.all(promises);
136
  } catch (error) {
137
+ for (const conversation of $project.conversations) {
138
  if (conversation.messages.at(-1)?.role === "assistant" && !conversation.messages.at(-1)?.content?.trim()) {
139
  conversation.messages.pop();
140
  conversation.messages = [...conversation.messages];
 
178
 
179
  function addCompareModel(modelId: ModelWithTokenizer["id"]) {
180
  const model = $models.find(m => m.id === modelId);
181
+ if (!model || $project.conversations.length === 2) {
182
  return;
183
  }
184
+ const newConversation = { ...JSON.parse(JSON.stringify($project.conversations[0])), model };
185
+ $project.conversations = [...$project.conversations, newConversation];
186
  generationStats = [generationStats[0], { latency: 0, generatedTokensCount: 0 }];
187
  }
188
 
189
  function removeCompareModal(conversationIdx: number) {
190
+ $project.conversations.splice(conversationIdx, 1)[0];
191
  $session = $session;
192
  generationStats.splice(conversationIdx, 1)[0];
193
  generationStats = generationStats;
 
210
 
211
  <!-- svelte-ignore a11y-no-static-element-interactions -->
212
  <div
213
+ class="motion-safe:animate-fade-in grid h-dvh divide-gray-200 overflow-hidden bg-gray-100/50 max-md:grid-rows-[120px_1fr] max-md:divide-y dark:divide-gray-800 dark:bg-gray-900 dark:text-gray-300 dark:[color-scheme:dark] {compareActive
214
  ? 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)]'
215
  : 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)_clamp(270px,25%,300px)]'}"
216
  >
217
+ <div class="flex flex-col gap-2 overflow-y-auto py-3 pr-3 max-md:pl-3">
218
+ <div class="pl-2">
219
+ <InferencePlaygroundProjectSelect />
220
+ </div>
221
  <div
222
  class="relative flex flex-1 flex-col gap-6 overflow-y-hidden rounded-r-xl border-x border-y border-gray-200/80 bg-linear-to-b from-white via-white p-3 shadow-xs max-md:rounded-xl dark:border-white/5 dark:from-gray-800/40 dark:via-gray-800/40"
223
  class:pointer-events-none={!systemPromptSupported}
 
230
  placeholder={systemPromptSupported
231
  ? "Enter a custom prompt"
232
  : "System prompt is not supported with the chosen model."}
233
+ value={systemPromptSupported ? $project.conversations[0].systemMessage.content : ""}
234
  on:input={e => {
235
+ for (const conversation of $project.conversations) {
236
  conversation.systemMessage.content = e.currentTarget.value;
237
  }
238
  $session = $session;
 
245
  <div
246
  class="flex h-[calc(100dvh-5rem-120px)] divide-x divide-gray-200 overflow-x-auto overflow-y-hidden *:w-full max-sm:w-dvw md:h-[calc(100dvh-5rem)] md:pt-3 dark:divide-gray-800"
247
  >
248
+ {#each $project.conversations as conversation, conversationIdx}
249
  <div class="max-sm:min-w-full">
250
  {#if compareActive}
251
  <PlaygroundConversationHeader
 
256
  {/if}
257
  <PlaygroundConversation
258
  {loading}
259
+ bind:conversation
260
  {viewCode}
261
  {compareActive}
 
 
262
  on:closeCode={() => (viewCode = false)}
263
  />
264
  </div>
 
274
  on:click={() => (viewSettings = !viewSettings)}
275
  class="flex h-[39px] items-center gap-1 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden md:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
276
  >
277
+ <div class="text-black dark:text-white">
278
+ <IconThrashcan />
279
+ </div>
280
  {!viewSettings ? "Settings" : "Hide Settings"}
281
  </button>
282
  {/if}
283
+ <button type="button" on:click={reset} class="btn size-[39px]">
 
 
 
 
284
  <IconDelete />
285
  </button>
286
  </div>
 
290
  {/each}
291
  </div>
292
  <div class="flex flex-1 justify-end gap-x-2">
293
+ <button type="button" on:click={() => (viewCode = !viewCode)} class="btn">
 
 
 
 
294
  <IconCode />
295
  {!viewCode ? "View Code" : "Hide Code"}</button
296
  >
 
307
  {#if loading}
308
  <div class="flex flex-none items-center gap-[3px]">
309
  <span class="mr-2">
310
+ {#if $project.conversations[0].streaming || $project.conversations[1]?.streaming}
311
  Stop
312
  {:else}
313
  Cancel
 
342
  class="flex flex-1 flex-col gap-6 overflow-y-hidden rounded-xl border border-gray-200/80 bg-white bg-linear-to-b from-white via-white p-3 shadow-xs dark:border-white/5 dark:bg-gray-900 dark:from-gray-800/40 dark:via-gray-800/40"
343
  >
344
  <div class="flex flex-col gap-2">
345
+ <ModelSelector bind:conversation={$project.conversations[0]} />
346
  <div class="flex items-center gap-2 self-end px-2 text-xs whitespace-nowrap">
347
  <button
348
  class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
 
352
  Compare
353
  </button>
354
  <a
355
+ href="https://huggingface.co/{$project.conversations[0].model.id}?inference_provider={$project
356
  .conversations[0].provider}"
357
  target="_blank"
358
  class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
359
  >
360
+ <IconExternal class="text-2xs" />
361
  Model page
362
  </a>
363
  </div>
364
  </div>
365
 
366
+ <GenerationConfig bind:conversation={$project.conversations[0]} />
367
  {#if $token.value}
368
  <button
369
  on:click={token.reset}
 
405
  href="https://huggingface.co/docs/api-inference/tasks/chat-completion"
406
  class="flex items-center gap-1 text-sm text-gray-500 underline decoration-gray-300 hover:text-gray-800 dark:text-gray-400 dark:decoration-gray-600 dark:hover:text-gray-200"
407
  >
408
+ <div class="text-xs">
409
+ <IconInfo />
410
+ </div>
411
  View Docs
412
  </a>
413
  <span class="dark:text-gray-500">·</span>
 
422
 
423
  {#if selectCompareModelOpen}
424
  <ModelSelectorModal
425
+ conversation={$project.conversations[0]}
426
  on:modelSelected={e => addCompareModel(e.detail)}
427
  on:close={() => (selectCompareModelOpen = false)}
428
  />
src/lib/components/InferencePlayground/InferencePlaygroundCodeSnippets.svelte CHANGED
@@ -10,8 +10,8 @@
10
  import { token } from "$lib/stores/token";
11
  import { entries, fromEntries, keys } from "$lib/utils/object";
12
  import type { InferenceProvider } from "@huggingface/inference";
13
- import IconCopyCode from "../Icons/IconCopyCode.svelte";
14
- import IconExternal from "../Icons/IconExternal.svelte";
15
  import {
16
  getInferenceSnippet,
17
  type GetInferenceSnippetReturn,
@@ -191,7 +191,7 @@
191
  target="_blank"
192
  class="relative -bottom-[1px] flex items-center gap-1 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
193
  >
194
- <IconExternal classNames="size-3" />
195
  Docs
196
  </a>
197
  </h2>
@@ -200,7 +200,7 @@
200
  class="flex items-center gap-x-2 rounded-md border bg-white px-1.5 py-0.5 text-sm shadow-xs transition dark:border-gray-800 dark:bg-gray-800"
201
  use:copy={installInstructions.content}
202
  >
203
- <IconCopyCode classNames="text-xs" /> Copy code
204
  </button>
205
  </div>
206
  </div>
@@ -226,7 +226,7 @@
226
  class="flex items-center gap-x-2 rounded-md border bg-white px-1.5 py-0.5 text-sm shadow-xs transition dark:border-gray-800 dark:bg-gray-800"
227
  use:copy={selectedSnippet?.content}
228
  >
229
- <IconCopyCode classNames="text-xs" /> Copy code
230
  </button>
231
  </div>
232
  </div>
 
10
  import { token } from "$lib/stores/token";
11
  import { entries, fromEntries, keys } from "$lib/utils/object";
12
  import type { InferenceProvider } from "@huggingface/inference";
13
+ import IconCopyCode from "~icons/carbon/copy";
14
+ import IconExternal from "~icons/carbon/arrow-up-right";
15
  import {
16
  getInferenceSnippet,
17
  type GetInferenceSnippetReturn,
 
191
  target="_blank"
192
  class="relative -bottom-[1px] flex items-center gap-1 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
193
  >
194
+ <IconExternal class="text-xs" />
195
  Docs
196
  </a>
197
  </h2>
 
200
  class="flex items-center gap-x-2 rounded-md border bg-white px-1.5 py-0.5 text-sm shadow-xs transition dark:border-gray-800 dark:bg-gray-800"
201
  use:copy={installInstructions.content}
202
  >
203
+ <IconCopyCode class="text-2xs" /> Copy code
204
  </button>
205
  </div>
206
  </div>
 
226
  class="flex items-center gap-x-2 rounded-md border bg-white px-1.5 py-0.5 text-sm shadow-xs transition dark:border-gray-800 dark:bg-gray-800"
227
  use:copy={selectedSnippet?.content}
228
  >
229
+ <IconCopyCode class="text-2xs" /> Copy code
230
  </button>
231
  </div>
232
  </div>
src/lib/components/InferencePlayground/InferencePlaygroundConversation.svelte CHANGED
@@ -1,11 +1,11 @@
1
  <script lang="ts">
2
  import type { Conversation } from "$lib/types";
3
 
4
- import { createEventDispatcher, tick } from "svelte";
5
 
 
6
  import CodeSnippets from "./InferencePlaygroundCodeSnippets.svelte";
7
  import Message from "./InferencePlaygroundMessage.svelte";
8
- import IconPlus from "../Icons/IconPlus.svelte";
9
 
10
  export let conversation: Conversation;
11
  export let loading: boolean;
@@ -16,11 +16,6 @@
16
  let isProgrammaticScroll = true;
17
  let conversationLength = conversation.messages.length;
18
 
19
- const dispatch = createEventDispatcher<{
20
- addMessage: void;
21
- deleteMessage: number;
22
- }>();
23
-
24
  let messageContainer: HTMLDivElement | null = null;
25
 
26
  async function resizeMessageTextAreas() {
@@ -60,6 +55,23 @@
60
  }
61
 
62
  $: viewCode, resizeMessageTextAreas();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  </script>
64
 
65
  <svelte:window on:resize={resizeMessageTextAreas} />
@@ -82,21 +94,24 @@
82
  {#each conversation.messages as message, messageIdx}
83
  <Message
84
  class="border-b"
85
- {message}
86
  {loading}
87
  on:input={resizeMessageTextAreas}
88
- on:delete={() => dispatch("deleteMessage", messageIdx)}
89
  autofocus={!loading && messageIdx === conversation.messages.length - 1}
90
  />
91
  {/each}
92
 
93
  <button
94
  class="flex px-3.5 py-6 hover:bg-gray-50 md:px-6 dark:hover:bg-gray-800/50"
95
- on:click={() => dispatch("addMessage")}
96
  disabled={loading}
97
  >
98
  <div class="flex items-center gap-2 p-0! text-sm font-semibold">
99
- <IconPlus classNames="text-lg" /> Add message
 
 
 
100
  </div>
101
  </button>
102
  {:else}
 
1
  <script lang="ts">
2
  import type { Conversation } from "$lib/types";
3
 
4
+ import { tick } from "svelte";
5
 
6
+ import IconPlus from "~icons/carbon/add";
7
  import CodeSnippets from "./InferencePlaygroundCodeSnippets.svelte";
8
  import Message from "./InferencePlaygroundMessage.svelte";
 
9
 
10
  export let conversation: Conversation;
11
  export let loading: boolean;
 
16
  let isProgrammaticScroll = true;
17
  let conversationLength = conversation.messages.length;
18
 
 
 
 
 
 
19
  let messageContainer: HTMLDivElement | null = null;
20
 
21
  async function resizeMessageTextAreas() {
 
55
  }
56
 
57
  $: viewCode, resizeMessageTextAreas();
58
+
59
+ function addMessage() {
60
+ const msgs = conversation.messages.slice();
61
+ conversation.messages = [
62
+ ...msgs,
63
+ {
64
+ role: msgs.at(-1)?.role === "user" ? "assistant" : "user",
65
+ content: "",
66
+ },
67
+ ];
68
+ conversation = conversation;
69
+ }
70
+
71
+ function deleteMessage(idx: number) {
72
+ conversation.messages.splice(idx, 1);
73
+ conversation = conversation;
74
+ }
75
  </script>
76
 
77
  <svelte:window on:resize={resizeMessageTextAreas} />
 
94
  {#each conversation.messages as message, messageIdx}
95
  <Message
96
  class="border-b"
97
+ bind:message
98
  {loading}
99
  on:input={resizeMessageTextAreas}
100
+ on:delete={() => deleteMessage(messageIdx)}
101
  autofocus={!loading && messageIdx === conversation.messages.length - 1}
102
  />
103
  {/each}
104
 
105
  <button
106
  class="flex px-3.5 py-6 hover:bg-gray-50 md:px-6 dark:hover:bg-gray-800/50"
107
+ on:click={addMessage}
108
  disabled={loading}
109
  >
110
  <div class="flex items-center gap-2 p-0! text-sm font-semibold">
111
+ <div class="text-lg">
112
+ <IconPlus />
113
+ </div>
114
+ Add message
115
  </div>
116
  </button>
117
  {:else}
src/lib/components/InferencePlayground/InferencePlaygroundConversationHeader.svelte CHANGED
@@ -5,7 +5,7 @@
5
 
6
  import { models } from "$lib/stores/models";
7
  import Avatar from "../Avatar.svelte";
8
- import IconCog from "../Icons/IconCog.svelte";
9
  import GenerationConfig from "./InferencePlaygroundGenerationConfig.svelte";
10
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
11
  import InferencePlaygroundProviderSelect from "./InferencePlaygroundProviderSelect.svelte";
 
5
 
6
  import { models } from "$lib/stores/models";
7
  import Avatar from "../Avatar.svelte";
8
+ import IconCog from "~icons/carbon/settings";
9
  import GenerationConfig from "./InferencePlaygroundGenerationConfig.svelte";
10
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
11
  import InferencePlaygroundProviderSelect from "./InferencePlaygroundProviderSelect.svelte";
src/lib/components/InferencePlayground/InferencePlaygroundHFTokenModal.svelte CHANGED
@@ -1,9 +1,8 @@
1
  <script lang="ts">
2
- import { browser } from "$app/environment";
3
-
4
  import { createEventDispatcher, onDestroy, onMount } from "svelte";
5
 
6
- import IconCross from "../Icons/IconCross.svelte";
7
 
8
  export let storeLocallyHfToken = false;
9
 
@@ -20,22 +19,12 @@
20
  }
21
  }
22
 
23
- function handleBackdropClick(event: MouseEvent) {
24
- if (window?.getSelection()?.toString()) {
25
- return;
26
- }
27
- if (event.target === backdropEl) {
28
- dispatch("close");
29
- }
30
- }
31
-
32
  onMount(() => {
33
  document.getElementById("app")?.setAttribute("inert", "true");
34
  modalEl.focus();
35
  });
36
 
37
  onDestroy(() => {
38
- if (!browser) return;
39
  // remove inert attribute if this is the last modal
40
  if (document.querySelectorAll('[role="dialog"]:not(#app *)').length === 1) {
41
  document.getElementById("app")?.removeAttribute("inert");
@@ -49,7 +38,6 @@
49
  aria-hidden="true"
50
  class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/85"
51
  bind:this={backdropEl}
52
- on:click|stopPropagation={handleBackdropClick}
53
  >
54
  <div
55
  role="dialog"
@@ -57,6 +45,7 @@
57
  class="relative max-h-full w-full max-w-xl p-4 outline-hidden"
58
  bind:this={modalEl}
59
  on:keydown={handleKeydown}
 
60
  >
61
  <form on:submit|preventDefault class="relative rounded-lg bg-white shadow-sm dark:bg-gray-900">
62
  <div class="flex items-center justify-between rounded-t border-b p-4 md:px-5 md:py-4 dark:border-gray-800">
@@ -72,7 +61,9 @@
72
  on:click={() => dispatch("close")}
73
  class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
74
  >
75
- <IconCross classNames="text-xl" />
 
 
76
  <span class="sr-only">Close modal</span>
77
  </button>
78
  </div>
 
1
  <script lang="ts">
2
+ import { clickOutside } from "$lib/actions/click-outside";
 
3
  import { createEventDispatcher, onDestroy, onMount } from "svelte";
4
 
5
+ import IconCross from "~icons/carbon/close";
6
 
7
  export let storeLocallyHfToken = false;
8
 
 
19
  }
20
  }
21
 
 
 
 
 
 
 
 
 
 
22
  onMount(() => {
23
  document.getElementById("app")?.setAttribute("inert", "true");
24
  modalEl.focus();
25
  });
26
 
27
  onDestroy(() => {
 
28
  // remove inert attribute if this is the last modal
29
  if (document.querySelectorAll('[role="dialog"]:not(#app *)').length === 1) {
30
  document.getElementById("app")?.removeAttribute("inert");
 
38
  aria-hidden="true"
39
  class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/85"
40
  bind:this={backdropEl}
 
41
  >
42
  <div
43
  role="dialog"
 
45
  class="relative max-h-full w-full max-w-xl p-4 outline-hidden"
46
  bind:this={modalEl}
47
  on:keydown={handleKeydown}
48
+ use:clickOutside={() => dispatch("close")}
49
  >
50
  <form on:submit|preventDefault class="relative rounded-lg bg-white shadow-sm dark:bg-gray-900">
51
  <div class="flex items-center justify-between rounded-t border-b p-4 md:px-5 md:py-4 dark:border-gray-800">
 
61
  on:click={() => dispatch("close")}
62
  class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
63
  >
64
+ <div class="text-xl">
65
+ <IconCross />
66
+ </div>
67
  <span class="sr-only">Close modal</span>
68
  </button>
69
  </div>
src/lib/components/InferencePlayground/InferencePlaygroundModelSelector.svelte CHANGED
@@ -2,8 +2,8 @@
2
  import type { Conversation, ModelWithTokenizer } from "$lib/types";
3
 
4
  import { models } from "$lib/stores/models";
 
5
  import Avatar from "../Avatar.svelte";
6
- import IconCaret from "../Icons/IconCaret.svelte";
7
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
8
  import ProviderSelect from "./InferencePlaygroundProviderSelect.svelte";
9
  import { defaultSystemMessage } from "./inferencePlaygroundUtils";
@@ -45,7 +45,11 @@
45
  </div>
46
  <div>{modelName}</div>
47
  </div>
48
- <IconCaret classNames="text-xl bg-gray-100 dark:bg-gray-600 rounded-sm size-4 flex-none absolute right-2" />
 
 
 
 
49
  </button>
50
  </div>
51
 
 
2
  import type { Conversation, ModelWithTokenizer } from "$lib/types";
3
 
4
  import { models } from "$lib/stores/models";
5
+ import IconCaret from "~icons/carbon/chevron-down";
6
  import Avatar from "../Avatar.svelte";
 
7
  import ModelSelectorModal from "./InferencePlaygroundModelSelectorModal.svelte";
8
  import ProviderSelect from "./InferencePlaygroundProviderSelect.svelte";
9
  import { defaultSystemMessage } from "./inferencePlaygroundUtils";
 
45
  </div>
46
  <div>{modelName}</div>
47
  </div>
48
+ <div
49
+ class="absolute right-2 grid size-4 flex-none place-items-center rounded-sm bg-gray-100 text-xs dark:bg-gray-600"
50
+ >
51
+ <IconCaret />
52
+ </div>
53
  </button>
54
  </div>
55
 
src/lib/components/InferencePlayground/InferencePlaygroundModelSelectorModal.svelte CHANGED
@@ -4,8 +4,8 @@
4
  import { createEventDispatcher, onMount, tick } from "svelte";
5
 
6
  import { models } from "$lib/stores/models";
7
- import IconSearch from "../Icons/IconSearch.svelte";
8
- import IconStar from "../Icons/IconStar.svelte";
9
  import { getTrending } from "$lib/utils/model";
10
  import fuzzysearch from "$lib/utils/search";
11
 
@@ -101,7 +101,9 @@
101
  bind:this={containerEl}
102
  >
103
  <div class="flex items-center border-b px-3 dark:border-gray-800">
104
- <IconSearch classNames="mr-2 text-sm" />
 
 
105
  <!-- svelte-ignore a11y-autofocus -->
106
  <input
107
  autofocus
@@ -127,7 +129,9 @@
127
  dispatch("close");
128
  }}
129
  >
130
- <IconStar classNames="lucide lucide-star mr-1.5 size-4 text-yellow-400" />
 
 
131
  <span class="inline-flex items-center"
132
  ><span class="text-gray-500 dark:text-gray-400">{nameSpace}</span><span
133
  class="mx-1 text-gray-300 dark:text-gray-700">/</span
 
4
  import { createEventDispatcher, onMount, tick } from "svelte";
5
 
6
  import { models } from "$lib/stores/models";
7
+ import IconSearch from "~icons/carbon/search";
8
+ import IconStar from "~icons/carbon/star";
9
  import { getTrending } from "$lib/utils/model";
10
  import fuzzysearch from "$lib/utils/search";
11
 
 
101
  bind:this={containerEl}
102
  >
103
  <div class="flex items-center border-b px-3 dark:border-gray-800">
104
+ <div class="mr-2 text-sm">
105
+ <IconSearch />
106
+ </div>
107
  <!-- svelte-ignore a11y-autofocus -->
108
  <input
109
  autofocus
 
129
  dispatch("close");
130
  }}
131
  >
132
+ <div class="lucide lucide-star mr-1.5 size-4 text-yellow-400">
133
+ <IconStar />
134
+ </div>
135
  <span class="inline-flex items-center"
136
  ><span class="text-gray-500 dark:text-gray-400">{nameSpace}</span><span
137
  class="mx-1 text-gray-300 dark:text-gray-700">/</span
src/lib/components/InferencePlayground/InferencePlaygroundProjectSelect.svelte ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import { getActiveProject, session } from "$lib/stores/session";
3
+ import { cn } from "$lib/utils/cn";
4
+ import { createSelect, createSync } from "@melt-ui/svelte";
5
+ import IconCaret from "~icons/carbon/chevron-down";
6
+ import IconCross from "~icons/carbon/close";
7
+ import IconEdit from "~icons/carbon/edit";
8
+ import IconSave from "~icons/carbon/save";
9
+ import IconDelete from "~icons/carbon/trash-can";
10
+ import { prompt } from "../Prompts.svelte";
11
+
12
+ let classNames: string = "";
13
+ export { classNames as class };
14
+
15
+ $: isDefault = $session.activeProjectId === "default";
16
+
17
+ const {
18
+ elements: { trigger, menu, option },
19
+ states: { selected },
20
+ } = createSelect<string, false>();
21
+ const sync = createSync({ selected });
22
+ $: sync.selected({ value: getActiveProject($session).id, label: getActiveProject($session).name }, p => {
23
+ if (!p) return;
24
+ $session.activeProjectId = p?.value;
25
+ });
26
+
27
+ async function saveProject() {
28
+ session.saveProject((await prompt("Set project name")) || "Project #" + ($session.projects.length + 1));
29
+ }
30
+ </script>
31
+
32
+ <div class={cn("flex w-full items-stretch gap-2 ", classNames)}>
33
+ <button
34
+ {...$trigger}
35
+ use:trigger
36
+ class={cn(
37
+ "relative flex grow items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm",
38
+ "hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110"
39
+ )}
40
+ >
41
+ <div class="flex items-center gap-1 text-sm">
42
+ {getActiveProject($session).name}
43
+ </div>
44
+ <div
45
+ class="absolute right-2 grid size-4 flex-none place-items-center rounded-sm bg-gray-100 text-xs dark:bg-gray-600"
46
+ >
47
+ <IconCaret />
48
+ </div>
49
+ </button>
50
+ {#if isDefault}
51
+ <button class="btn size-[32px] p-0" on:click={saveProject}>
52
+ <IconSave />
53
+ </button>
54
+ {:else}
55
+ <button class="btn size-[32px] p-0" on:click={() => ($session.activeProjectId = "default")}>
56
+ <IconCross />
57
+ </button>
58
+ {/if}
59
+ </div>
60
+
61
+ <div {...$menu} use:menu class="rounded-lg border bg-gray-100 dark:border-gray-700 dark:bg-gray-800">
62
+ {#each $session.projects as { name, id } (id)}
63
+ <button {...$option({ value: id, label: name })} use:option class="group block w-full p-1 text-sm dark:text-white">
64
+ <div
65
+ class="flex items-center gap-2 rounded-md py-1.5 pr-1 pl-2 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
66
+ >
67
+ {name}
68
+ {#if id !== "default"}
69
+ <div class="ml-auto flex items-center gap-1">
70
+ <button
71
+ class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
72
+ on:click={async e => {
73
+ e.stopPropagation();
74
+ session.updateProject(id, { name: (await prompt("Edit project name", name)) || name });
75
+ }}
76
+ >
77
+ <IconEdit />
78
+ </button>
79
+ <button
80
+ class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
81
+ on:click={e => {
82
+ e.stopPropagation();
83
+ session.deleteProject(id);
84
+ }}
85
+ >
86
+ <IconDelete />
87
+ </button>
88
+ </div>
89
+ {/if}
90
+ </div>
91
+ </button>
92
+ {/each}
93
+ </div>
src/lib/components/InferencePlayground/InferencePlaygroundProviderSelect.svelte CHANGED
@@ -4,17 +4,14 @@
4
  import { randomPick } from "$lib/utils/array";
5
  import { cn } from "$lib/utils/cn";
6
  import { createSelect, createSync } from "@melt-ui/svelte";
7
- import IconCaret from "../Icons/IconCaret.svelte";
8
  import IconProvider from "../Icons/IconProvider.svelte";
9
- import { isMounted } from "$lib/stores/mounted";
10
- import { browser } from "$app/environment";
11
 
12
  export let conversation: Conversation;
13
  let classes: string | undefined = undefined;
14
  export { classes as class };
15
 
16
  function reset(providers: typeof conversation.model.inferenceProviderMapping) {
17
- if (!browser) return;
18
  const validProvider = providers.find(p => p.provider === conversation.provider);
19
  if (validProvider) return;
20
  conversation.provider = randomPick(providers)?.provider;
@@ -65,8 +62,6 @@
65
 
66
  return words.join(" ");
67
  }
68
-
69
- const mounted = isMounted();
70
  </script>
71
 
72
  <div class="flex flex-col gap-2">
@@ -86,16 +81,18 @@
86
  )}
87
  >
88
  <div class="flex items-center gap-1 text-sm">
89
- {#key $mounted}
90
- <IconProvider provider={conversation.provider} />
91
- {formatName(conversation.provider ?? "") ?? "loading"}
92
- {/key}
 
 
 
93
  </div>
94
- <IconCaret classNames="text-xl bg-gray-100 dark:bg-gray-600 rounded-sm size-4 flex-none absolute right-2" />
95
  </button>
96
 
97
  <div {...$menu} use:menu class="rounded-lg border bg-gray-100 dark:border-gray-700 dark:bg-gray-800">
98
- {#each conversation.model.inferenceProviderMapping as { provider } (provider)}
99
  <button {...$option({ value: provider })} use:option class="group block w-full p-1 text-sm dark:text-white">
100
  <div
101
  class="flex items-center gap-2 rounded-md px-2 py-1.5 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
 
4
  import { randomPick } from "$lib/utils/array";
5
  import { cn } from "$lib/utils/cn";
6
  import { createSelect, createSync } from "@melt-ui/svelte";
7
+ import IconCaret from "~icons/carbon/chevron-down";
8
  import IconProvider from "../Icons/IconProvider.svelte";
 
 
9
 
10
  export let conversation: Conversation;
11
  let classes: string | undefined = undefined;
12
  export { classes as class };
13
 
14
  function reset(providers: typeof conversation.model.inferenceProviderMapping) {
 
15
  const validProvider = providers.find(p => p.provider === conversation.provider);
16
  if (validProvider) return;
17
  conversation.provider = randomPick(providers)?.provider;
 
62
 
63
  return words.join(" ");
64
  }
 
 
65
  </script>
66
 
67
  <div class="flex flex-col gap-2">
 
81
  )}
82
  >
83
  <div class="flex items-center gap-1 text-sm">
84
+ <IconProvider provider={conversation.provider} />
85
+ {formatName(conversation.provider ?? "") ?? "loading"}
86
+ </div>
87
+ <div
88
+ class="absolute right-2 grid size-4 flex-none place-items-center rounded-sm bg-gray-100 text-xs dark:bg-gray-600"
89
+ >
90
+ <IconCaret />
91
  </div>
 
92
  </button>
93
 
94
  <div {...$menu} use:menu class="rounded-lg border bg-gray-100 dark:border-gray-700 dark:bg-gray-800">
95
+ {#each conversation.model.inferenceProviderMapping as { provider, providerId } (provider + providerId)}
96
  <button {...$option({ value: provider })} use:option class="group block w-full p-1 text-sm dark:text-white">
97
  <div
98
  class="flex items-center gap-2 rounded-md px-2 py-1.5 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
src/lib/components/Prompts.svelte ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script lang="ts" context="module">
2
+ import { clickOutside } from "$lib/actions/click-outside";
3
+ import { writable } from "svelte/store";
4
+ import IconCross from "~icons/carbon/close";
5
+
6
+ type Prompt = {
7
+ label: string;
8
+ value?: string;
9
+ placeholder?: string;
10
+ callback: (value: string) => void;
11
+ };
12
+
13
+ const prompts = writable<Prompt[]>([]);
14
+
15
+ export function resolvePrompt() {
16
+ prompts.update(p => {
17
+ p[0]?.callback(p[0]?.value ?? "");
18
+ return p.slice(1);
19
+ });
20
+ }
21
+
22
+ export async function prompt(label: string, defaultVAlue?: string): Promise<string> {
23
+ return new Promise(res => {
24
+ prompts.update(p => [...p, { label, value: defaultVAlue, callback: res }]);
25
+ });
26
+ }
27
+ </script>
28
+
29
+ <script lang="ts">
30
+ $: current = $prompts?.[0];
31
+
32
+ let dialog: HTMLDialogElement | undefined;
33
+
34
+ $: if (current) {
35
+ dialog?.showModal();
36
+ } else {
37
+ dialog?.close();
38
+ }
39
+
40
+ function onSubmit(e: Event) {
41
+ e.preventDefault();
42
+ resolvePrompt();
43
+ }
44
+ </script>
45
+
46
+ <dialog bind:this={dialog} on:close={resolvePrompt}>
47
+ {#if current}
48
+ <div class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/85">
49
+ <form
50
+ on:submit={onSubmit}
51
+ class="relative w-xl rounded-lg bg-white shadow-sm dark:bg-gray-900"
52
+ use:clickOutside={resolvePrompt}
53
+ >
54
+ <div class="flex items-center justify-between rounded-t border-b p-4 md:px-5 md:py-4 dark:border-gray-800">
55
+ <h3 class="flex items-center gap-2.5 text-lg font-semibold text-gray-900 dark:text-white">
56
+ {current.label ?? "Prompt"}
57
+ </h3>
58
+ <button
59
+ type="button"
60
+ class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
61
+ on:click={resolvePrompt}
62
+ >
63
+ <div class="text-xl">
64
+ <IconCross />
65
+ </div>
66
+ <span class="sr-only">Close modal</span>
67
+ </button>
68
+ </div>
69
+ <!-- Modal body -->
70
+ <div class="p-4 md:p-5">
71
+ <label class="flex flex-col gap-2 font-medium text-gray-900 dark:text-white">
72
+ <!-- This is fine in dialogs -->
73
+ <!-- svelte-ignore a11y-autofocus -->
74
+ <input
75
+ bind:value={current.value}
76
+ placeholder={current.placeholder}
77
+ autofocus
78
+ required
79
+ type="text"
80
+ class="block w-full rounded-lg border border-gray-300 bg-gray-50 p-2.5 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-500 dark:focus:ring-blue-500"
81
+ />
82
+ </label>
83
+ </div>
84
+
85
+ <!-- Modal footer -->
86
+ <div class="flex rounded-b border-t border-gray-200 p-4 md:p-5 dark:border-gray-800">
87
+ <button
88
+ type="submit"
89
+ class="ml-auto rounded-lg bg-black px-5 py-2.5 text-sm font-medium text-white hover:bg-gray-900 focus:ring-4 focus:ring-gray-300 focus:outline-hidden dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700"
90
+ >Submit</button
91
+ >
92
+ </div>
93
+ </form>
94
+ </div>
95
+ {/if}
96
+ </dialog>
src/lib/stores/models.ts CHANGED
@@ -3,6 +3,6 @@ import type { ModelWithTokenizer } from "$lib/types";
3
  import { readable } from "svelte/store";
4
 
5
  export const models = readable<ModelWithTokenizer[]>(undefined, set => {
6
- const unsub = page.subscribe($p => set($p.data.models));
7
  return unsub;
8
  });
 
3
  import { readable } from "svelte/store";
4
 
5
  export const models = readable<ModelWithTokenizer[]>(undefined, set => {
6
+ const unsub = page.subscribe($p => set($p.data?.models));
7
  return unsub;
8
  });
src/lib/stores/session.ts CHANGED
@@ -1,97 +1,122 @@
1
- import { browser } from "$app/environment";
2
- import { goto } from "$app/navigation";
3
  import { defaultGenerationConfig } from "$lib/components/InferencePlayground/generationConfigSettings";
4
- import { defaultSystemMessage } from "$lib/components/InferencePlayground/inferencePlaygroundUtils";
5
- import { PipelineTag, type Conversation, type ConversationMessage, type Session } from "$lib/types";
6
-
7
  import { models } from "$lib/stores/models";
8
- import { get, writable } from "svelte/store";
 
 
 
 
 
 
 
 
 
9
  import { getTrending } from "$lib/utils/model";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- function createSessionStore() {
12
- const store = writable<Session>(undefined, (set, update) => {
13
- const searchParams = new URLSearchParams(browser ? window.location.search : undefined);
 
 
14
 
15
- const modelIdsFromSearchParam = searchParams.getAll("modelId");
16
- const modelsFromSearchParam = modelIdsFromSearchParam?.map(id => get(models).find(model => model.id === id));
17
 
18
- const providersFromSearchParam = searchParams.getAll("provider");
 
 
19
 
20
- const startMessageUser: ConversationMessage = { role: "user", content: "" };
21
- const systemMessage: ConversationMessage = {
22
- role: "system",
23
- content: modelIdsFromSearchParam?.[0] ? (defaultSystemMessage?.[modelIdsFromSearchParam[0]] ?? "") : "",
24
  };
25
 
26
- const $models = get(models);
27
- const featured = getTrending($models);
28
-
29
- set({
30
- conversations: [
31
- {
32
- model: featured[0] ??
33
- $models[0] ?? {
34
- _id: "",
35
- inferenceProviderMapping: [],
36
- pipeline_tag: PipelineTag.TextGeneration,
37
- trendingScore: 0,
38
- tags: ["text-generation"],
39
- id: "",
40
- tokenizerConfig: {},
41
- config: {
42
- architectures: [] as string[],
43
- model_type: "",
44
- tokenizer_config: {},
45
- },
46
- },
47
- config: { ...defaultGenerationConfig },
48
- messages: [{ ...startMessageUser }],
49
- systemMessage,
50
- streaming: true,
51
- },
52
- ],
53
- });
54
 
55
- if (modelsFromSearchParam?.length) {
56
- const conversations = modelsFromSearchParam.map((model, i) => {
57
- return {
58
- model,
59
- config: { ...defaultGenerationConfig },
60
- messages: [{ ...startMessageUser }],
61
- systemMessage,
62
- streaming: true,
63
- provider: providersFromSearchParam?.[i],
 
 
 
 
 
 
 
 
 
 
 
 
64
  };
65
- }) as [Conversation] | [Conversation, Conversation];
66
- update(s => ({ ...s, conversations }));
67
  }
 
 
68
  });
69
 
 
70
  const update: typeof store.update = cb => {
71
- const prevQuery = window.location.search;
72
- const query = new URLSearchParams(window.location.search);
73
- query.delete("modelId");
74
- query.delete("provider");
75
-
76
  store.update($s => {
77
  const s = cb($s);
78
 
79
- const modelIds = s.conversations.map(c => c.model.id);
80
- modelIds.forEach(m => query.append("modelId", m));
81
-
82
- const providers = s.conversations.map(c => c.provider ?? "hf-inference");
83
- providers.forEach(p => query.append("provider", p));
84
-
85
- const newQuery = query.toString();
86
- // slice to remove the ? prefix
87
- if (newQuery !== prevQuery.slice(1)) {
88
- window.parent.postMessage(
89
- {
90
- queryString: query.toString(),
91
- },
92
- "https://huggingface.co"
93
- );
94
- goto(`?${query}`, { replaceState: true });
95
  }
96
 
97
  return s;
@@ -102,7 +127,88 @@ function createSessionStore() {
102
  update(_ => args[0]);
103
  };
104
 
105
- return { ...store, set, update };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  }
107
 
108
  export const session = createSessionStore();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import { defaultGenerationConfig } from "$lib/components/InferencePlayground/generationConfigSettings";
 
 
 
2
  import { models } from "$lib/stores/models";
3
+ import {
4
+ PipelineTag,
5
+ type Conversation,
6
+ type ConversationMessage,
7
+ type DefaultProject,
8
+ type ModelWithTokenizer,
9
+ type Project,
10
+ type Session,
11
+ } from "$lib/types";
12
+ import { safeParse } from "$lib/utils/json";
13
  import { getTrending } from "$lib/utils/model";
14
+ import { get, writable } from "svelte/store";
15
+ import typia from "typia";
16
+
17
+ const LOCAL_STORAGE_KEY = "hf_inference_playground_session";
18
+
19
+ const startMessageUser: ConversationMessage = { role: "user", content: "" };
20
+ const systemMessage: ConversationMessage = {
21
+ role: "system",
22
+ content: "",
23
+ };
24
+
25
+ const emptyModel: ModelWithTokenizer = {
26
+ _id: "",
27
+ inferenceProviderMapping: [],
28
+ pipeline_tag: PipelineTag.TextGeneration,
29
+ trendingScore: 0,
30
+ tags: ["text-generation"],
31
+ id: "",
32
+ tokenizerConfig: {},
33
+ config: {
34
+ architectures: [] as string[],
35
+ model_type: "",
36
+ tokenizer_config: {},
37
+ },
38
+ };
39
+
40
+ function getDefaults() {
41
+ const $models = get(models);
42
+ const featured = getTrending($models);
43
+ const defaultModel = featured[0] ?? $models[0] ?? emptyModel;
44
+
45
+ const defaultConversation: Conversation = {
46
+ model: defaultModel,
47
+ config: { ...defaultGenerationConfig },
48
+ messages: [{ ...startMessageUser }],
49
+ systemMessage,
50
+ streaming: true,
51
+ };
52
 
53
+ const defaultProject: DefaultProject = {
54
+ name: "Default",
55
+ id: "default",
56
+ conversations: [defaultConversation],
57
+ };
58
 
59
+ return { defaultProject, defaultConversation };
60
+ }
61
 
62
+ function createSessionStore() {
63
+ const store = writable<Session>(undefined, set => {
64
+ const { defaultConversation, defaultProject } = getDefaults();
65
 
66
+ // Get saved session from localStorage if available
67
+ let savedSession: Session = {
68
+ projects: [defaultProject],
69
+ activeProjectId: defaultProject.id,
70
  };
71
 
72
+ const savedData = localStorage.getItem(LOCAL_STORAGE_KEY);
73
+ if (savedData) {
74
+ const parsed = safeParse(savedData);
75
+ const res = typia.validate<Session>(parsed);
76
+ if (res.success) {
77
+ savedSession = parsed;
78
+ } else {
79
+ localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(savedSession));
80
+ }
81
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
+ // Merge query params with savedSession's default project
84
+ // Query params models and providers take precedence over savedSession's.
85
+ // In any case, we try to merge the two, and the amount of conversations
86
+ // is the maximum between the two.
87
+ const dp = savedSession.projects.find(p => p.id === "default");
88
+ if (typia.is<DefaultProject>(dp)) {
89
+ const $models = get(models);
90
+ // Parse URL query parameters
91
+ const searchParams = new URLSearchParams(window.location.search);
92
+ const searchProviders = searchParams.getAll("provider");
93
+ const searchModelIds = searchParams.getAll("modelId");
94
+ const modelsFromSearch = searchModelIds.map(id => $models.find(model => model.id === id)).filter(Boolean);
95
+ if (modelsFromSearch.length > 0) savedSession.activeProjectId = "default";
96
+
97
+ const max = Math.max(dp.conversations.length, modelsFromSearch.length, searchProviders.length);
98
+ for (let i = 0; i < max; i++) {
99
+ const conversation = dp.conversations[i] ?? defaultConversation;
100
+ dp.conversations[i] = {
101
+ ...conversation,
102
+ model: modelsFromSearch[i] ?? conversation.model,
103
+ provider: searchProviders[i] ?? conversation.provider,
104
  };
105
+ }
 
106
  }
107
+
108
+ set(savedSession);
109
  });
110
 
111
+ // Override update method to sync with localStorage and URL params
112
  const update: typeof store.update = cb => {
 
 
 
 
 
113
  store.update($s => {
114
  const s = cb($s);
115
 
116
+ try {
117
+ localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(s));
118
+ } catch (e) {
119
+ console.error("Failed to save session to localStorage:", e);
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
121
 
122
  return s;
 
127
  update(_ => args[0]);
128
  };
129
 
130
+ // Add a method to clear localStorage
131
+ function clearSavedSession() {
132
+ localStorage.removeItem(LOCAL_STORAGE_KEY);
133
+ }
134
+
135
+ /**
136
+ * Saves a new project with the data inside the default project
137
+ */
138
+ function saveProject(name: string) {
139
+ update(s => {
140
+ const defaultProject = s.projects.find(p => p.id === "default");
141
+ if (!defaultProject) return s;
142
+
143
+ const project: Project = {
144
+ ...defaultProject,
145
+ name,
146
+ id: crypto.randomUUID(),
147
+ };
148
+
149
+ defaultProject.conversations = [getDefaults().defaultConversation];
150
+
151
+ return { ...s, projects: [...s.projects, project], activeProjectId: project.id };
152
+ });
153
+ }
154
+
155
+ function deleteProject(id: string) {
156
+ // Can't delete default project!
157
+ if (id === "default") return;
158
+
159
+ update(s => {
160
+ const projects = s.projects.filter(p => p.id !== id);
161
+ if (projects.length === 0) {
162
+ const { defaultProject } = getDefaults();
163
+ const newSession = { ...s, projects: [defaultProject], activeProjectId: defaultProject.id };
164
+ return typia.is<Session>(newSession) ? newSession : s;
165
+ }
166
+
167
+ const currProject = projects.find(p => p.id === s.activeProjectId);
168
+ const newSession = { ...s, projects, activeProjectId: currProject?.id ?? projects[0]?.id };
169
+ return typia.is<Session>(newSession) ? newSession : s;
170
+ });
171
+ }
172
+
173
+ function updateProject(id: string, data: Partial<Project>) {
174
+ update(s => {
175
+ const projects = s.projects.map(p => (p.id === id ? { ...p, ...data } : p));
176
+ const newSession = { ...s, projects };
177
+ return typia.is<Session>(newSession) ? newSession : s;
178
+ });
179
+ }
180
+
181
+ return { ...store, set, update, clearSavedSession, deleteProject, saveProject, updateProject };
182
  }
183
 
184
  export const session = createSessionStore();
185
+
186
+ export function getActiveProject(s: Session) {
187
+ return s.projects.find(p => p.id === s.activeProjectId) ?? s.projects[0];
188
+ }
189
+
190
+ function createProjectStore() {
191
+ const store = writable<Project>(undefined, set => {
192
+ return session.subscribe(s => {
193
+ set(getActiveProject(s));
194
+ });
195
+ });
196
+
197
+ const update: (typeof store)["update"] = cb => {
198
+ session.update(s => {
199
+ const project = getActiveProject(s);
200
+ const newProject = cb(project);
201
+ const projects = s.projects.map(p => (p.id === project.id ? newProject : p));
202
+ const newSession = { ...s, projects };
203
+ return typia.is<Session>(newSession) ? newSession : s;
204
+ });
205
+ };
206
+
207
+ const set: typeof store.set = (...args) => {
208
+ update(_ => args[0]);
209
+ };
210
+
211
+ return { ...store, update, set };
212
+ }
213
+
214
+ export const project = createProjectStore();
src/lib/stores/token.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { browser } from "$app/environment";
2
  import { writable } from "svelte/store";
3
 
4
  const key = "hf_token";
@@ -13,11 +12,9 @@ function createTokenStore() {
13
  });
14
  }
15
 
16
- if (browser) {
17
- const storedHfToken = localStorage.getItem(key);
18
- if (storedHfToken !== null) {
19
- setValue(JSON.parse(storedHfToken));
20
- }
21
  }
22
 
23
  return {
 
 
1
  import { writable } from "svelte/store";
2
 
3
  const key = "hf_token";
 
12
  });
13
  }
14
 
15
+ const storedHfToken = localStorage.getItem(key);
16
+ if (storedHfToken !== null) {
17
+ setValue(JSON.parse(storedHfToken));
 
 
18
  }
19
 
20
  return {
src/lib/types.ts CHANGED
@@ -12,8 +12,20 @@ export type Conversation = {
12
  provider?: string;
13
  };
14
 
15
- export type Session = {
16
  conversations: [Conversation] | [Conversation, Conversation];
 
 
 
 
 
 
 
 
 
 
 
 
17
  };
18
 
19
  interface TokenizerConfig {
 
12
  provider?: string;
13
  };
14
 
15
+ export type Project = {
16
  conversations: [Conversation] | [Conversation, Conversation];
17
+ id: string;
18
+ name: string;
19
+ };
20
+
21
+ export type DefaultProject = Project & {
22
+ id: "default";
23
+ name: "Default";
24
+ };
25
+
26
+ export type Session = {
27
+ projects: [DefaultProject, ...Project[]];
28
+ activeProjectId: string;
29
  };
30
 
31
  interface TokenizerConfig {
src/lib/utils/json.ts ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ export function safeParse(str: string) {
2
+ try {
3
+ return JSON.parse(str);
4
+ } catch {
5
+ return null;
6
+ }
7
+ }
src/lib/utils/store.ts CHANGED
@@ -1,9 +1,5 @@
1
- import { browser } from "$app/environment";
2
- import { page } from "$app/stores";
3
- import { readable, type Writable } from "svelte/store";
4
 
5
  export function partialSet<T extends Record<string, unknown>>(store: Writable<T>, partial: Partial<T>) {
6
  store.update(s => ({ ...s, ...partial }));
7
  }
8
-
9
- export const safePage = browser ? page : readable(undefined);
 
1
+ import { type Writable } from "svelte/store";
 
 
2
 
3
  export function partialSet<T extends Record<string, unknown>>(store: Writable<T>, partial: Partial<T>) {
4
  store.update(s => ({ ...s, ...partial }));
5
  }
 
 
src/routes/+layout.svelte CHANGED
@@ -1,7 +1,9 @@
1
  <script lang="ts">
2
  import "../app.css";
3
  import DebugMenu from "$lib/components/DebugMenu.svelte";
 
4
  </script>
5
 
6
  <slot />
7
  <DebugMenu />
 
 
1
  <script lang="ts">
2
  import "../app.css";
3
  import DebugMenu from "$lib/components/DebugMenu.svelte";
4
+ import Prompts from "$lib/components/Prompts.svelte";
5
  </script>
6
 
7
  <slot />
8
  <DebugMenu />
9
+ <Prompts />
src/routes/+layout.ts ADDED
@@ -0,0 +1 @@
 
 
1
+ export const ssr = false;
src/routes/+page.ts ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ import type { ModelWithTokenizer } from "$lib/types";
2
+ import type { PageLoad } from "./$types";
3
+
4
+ export const load: PageLoad = async ({ fetch }) => {
5
+ const res = await fetch("/api/models");
6
+ const models: ModelWithTokenizer[] = await res.json();
7
+ return { models };
8
+ };
src/routes/{+page.server.ts → api/models/+server.ts} RENAMED
@@ -1,40 +1,72 @@
1
- import { env } from "$env/dynamic/private";
2
  import type { Model, ModelWithTokenizer } from "$lib/types";
3
- import type { PageServerLoad } from "./$types";
 
 
 
 
 
 
 
 
 
 
4
 
5
- export const load: PageServerLoad = async ({ fetch }) => {
6
  const apiUrl =
7
  "https://huggingface.co/api/models?pipeline_tag=text-generation&filter=conversational&inference_provider=all&limit=100&expand[]=inferenceProviderMapping&expand[]=config&expand[]=library_name&expand[]=pipeline_tag&expand[]=tags&expand[]=mask_token&expand[]=trendingScore";
8
- const HF_TOKEN = env.HF_TOKEN;
9
 
10
  const res = await fetch(apiUrl, {
 
11
  headers: {
12
- Authorization: `Bearer ${HF_TOKEN}`,
 
 
 
 
 
 
 
13
  },
 
 
14
  });
 
15
  if (!res.ok) {
16
  console.error(`Error fetching warm models`, res.status, res.statusText);
17
- return { models: [] };
18
  }
 
19
  const compatibleModels: Model[] = await res.json();
20
  compatibleModels.sort((a, b) => a.id.toLowerCase().localeCompare(b.id.toLowerCase()));
21
 
22
  const promises = compatibleModels.map(async model => {
23
  const configUrl = `https://huggingface.co/${model.id}/raw/main/tokenizer_config.json`;
24
  const res = await fetch(configUrl, {
 
25
  headers: {
26
- Authorization: `Bearer ${HF_TOKEN}`,
 
 
 
 
 
 
 
27
  },
 
 
28
  });
 
29
  if (!res.ok) {
30
- console.error(`Error fetching tokenizer file for ${model.id}`, res.status, res.statusText);
31
  return null; // Ignore failed requests by returning null
32
  }
 
33
  const tokenizerConfig = await res.json();
34
  return { ...model, tokenizerConfig } satisfies ModelWithTokenizer;
35
  });
36
 
37
  const models: ModelWithTokenizer[] = (await Promise.all(promises)).filter(model => model !== null);
 
38
 
39
- return { models };
40
  };
 
 
1
  import type { Model, ModelWithTokenizer } from "$lib/types";
2
+ import { json } from "@sveltejs/kit";
3
+ import type { RequestHandler } from "./$types";
4
+ import { dev } from "$app/environment";
5
+
6
+ let cache: ModelWithTokenizer[] | undefined;
7
+
8
+ export const GET: RequestHandler = async ({ fetch }) => {
9
+ if (cache?.length && dev) {
10
+ console.log("Skipping load, using in memory cache");
11
+ return json(cache);
12
+ }
13
 
 
14
  const apiUrl =
15
  "https://huggingface.co/api/models?pipeline_tag=text-generation&filter=conversational&inference_provider=all&limit=100&expand[]=inferenceProviderMapping&expand[]=config&expand[]=library_name&expand[]=pipeline_tag&expand[]=tags&expand[]=mask_token&expand[]=trendingScore";
 
16
 
17
  const res = await fetch(apiUrl, {
18
+ credentials: "include",
19
  headers: {
20
+ "Upgrade-Insecure-Requests": "1",
21
+ "Sec-Fetch-Dest": "document",
22
+ "Sec-Fetch-Mode": "navigate",
23
+ "Sec-Fetch-Site": "none",
24
+ "Sec-Fetch-User": "?1",
25
+ "Priority": "u=0, i",
26
+ "Pragma": "no-cache",
27
+ "Cache-Control": "no-cache",
28
  },
29
+ method: "GET",
30
+ mode: "cors",
31
  });
32
+
33
  if (!res.ok) {
34
  console.error(`Error fetching warm models`, res.status, res.statusText);
35
+ return json({ models: [] });
36
  }
37
+
38
  const compatibleModels: Model[] = await res.json();
39
  compatibleModels.sort((a, b) => a.id.toLowerCase().localeCompare(b.id.toLowerCase()));
40
 
41
  const promises = compatibleModels.map(async model => {
42
  const configUrl = `https://huggingface.co/${model.id}/raw/main/tokenizer_config.json`;
43
  const res = await fetch(configUrl, {
44
+ credentials: "include",
45
  headers: {
46
+ "Upgrade-Insecure-Requests": "1",
47
+ "Sec-Fetch-Dest": "document",
48
+ "Sec-Fetch-Mode": "navigate",
49
+ "Sec-Fetch-Site": "none",
50
+ "Sec-Fetch-User": "?1",
51
+ "Priority": "u=0, i",
52
+ "Pragma": "no-cache",
53
+ "Cache-Control": "no-cache",
54
  },
55
+ method: "GET",
56
+ mode: "cors",
57
  });
58
+
59
  if (!res.ok) {
60
+ // console.error(`Error fetching tokenizer file for ${model.id}`, res.status, res.statusText);
61
  return null; // Ignore failed requests by returning null
62
  }
63
+
64
  const tokenizerConfig = await res.json();
65
  return { ...model, tokenizerConfig } satisfies ModelWithTokenizer;
66
  });
67
 
68
  const models: ModelWithTokenizer[] = (await Promise.all(promises)).filter(model => model !== null);
69
+ cache = models;
70
 
71
+ return json(cache);
72
  };
tsconfig.json CHANGED
@@ -10,7 +10,14 @@
10
  "sourceMap": true,
11
  "strict": true,
12
  "target": "ES2018",
13
- "noUncheckedIndexedAccess": true
 
 
 
 
 
 
 
14
  },
15
  "exclude": ["vite.config.ts"]
16
  // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
 
10
  "sourceMap": true,
11
  "strict": true,
12
  "target": "ES2018",
13
+ "noUncheckedIndexedAccess": true,
14
+ "plugins": [
15
+ {
16
+ "transform": "typia/lib/transform"
17
+ }
18
+ ],
19
+ "strictNullChecks": true,
20
+ "moduleResolution": "bundler"
21
  },
22
  "exclude": ["vite.config.ts"]
23
  // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
vite.config.ts CHANGED
@@ -1,6 +1,18 @@
1
  import { sveltekit } from "@sveltejs/kit/vite";
2
  import { defineConfig } from "vite";
 
 
3
 
4
  export default defineConfig({
5
- plugins: [sveltekit()],
 
 
 
 
 
 
 
 
 
 
6
  });
 
1
  import { sveltekit } from "@sveltejs/kit/vite";
2
  import { defineConfig } from "vite";
3
+ import UnpluginTypia from "@ryoppippi/unplugin-typia/vite";
4
+ import Icons from "unplugin-icons/vite";
5
 
6
  export default defineConfig({
7
+ plugins: [
8
+ UnpluginTypia({
9
+ log: "verbose",
10
+ cache: false,
11
+ }),
12
+ sveltekit(),
13
+ Icons({
14
+ compiler: "svelte",
15
+ autoInstall: true,
16
+ }),
17
+ ],
18
  });