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([email protected])
 
 
 
26
  devDependencies:
 
 
 
 
 
 
 
 
 
27
  '@sveltejs/adapter-auto':
28
  specifier: ^3.2.2
29
@@ -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([email protected])
@@ -104,144 +122,300 @@ packages:
104
  resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
105
  engines: {node: '>=6.0.0'}
106
 
 
 
 
 
 
 
107
  '@esbuild/[email protected]':
108
  resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
109
  engines: {node: '>=12'}
110
  cpu: [ppc64]
111
  os: [aix]
112
 
 
 
 
 
 
 
113
  '@esbuild/[email protected]':
114
  resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
115
  engines: {node: '>=12'}
116
  cpu: [arm64]
117
  os: [android]
118
 
 
 
 
 
 
 
119
  '@esbuild/[email protected]':
120
  resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
121
  engines: {node: '>=12'}
122
  cpu: [arm]
123
  os: [android]
124
 
 
 
 
 
 
 
125
  '@esbuild/[email protected]':
126
  resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
127
  engines: {node: '>=12'}
128
  cpu: [x64]
129
  os: [android]
130
 
 
 
 
 
 
 
131
  '@esbuild/[email protected]':
132
  resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
133
  engines: {node: '>=12'}
134
  cpu: [arm64]
135
  os: [darwin]
136
 
 
 
 
 
 
 
137
  '@esbuild/[email protected]':
138
  resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
139
  engines: {node: '>=12'}
140
  cpu: [x64]
141
  os: [darwin]
142
 
 
 
 
 
 
 
143
  '@esbuild/[email protected]':
144
  resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
145
  engines: {node: '>=12'}
146
  cpu: [arm64]
147
  os: [freebsd]
148
 
 
 
 
 
 
 
149
  '@esbuild/[email protected]':
150
  resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
151
  engines: {node: '>=12'}
152
  cpu: [x64]
153
  os: [freebsd]
154
 
 
 
 
 
 
 
155
  '@esbuild/[email protected]':
156
  resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
157
  engines: {node: '>=12'}
158
  cpu: [arm64]
159
  os: [linux]
160
 
 
 
 
 
 
 
161
  '@esbuild/[email protected]':
162
  resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
163
  engines: {node: '>=12'}
164
  cpu: [arm]
165
  os: [linux]
166
 
 
 
 
 
 
 
167
  '@esbuild/[email protected]':
168
  resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
169
  engines: {node: '>=12'}
170
  cpu: [ia32]
171
  os: [linux]
172
 
 
 
 
 
 
 
173
  '@esbuild/[email protected]':
174
  resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
175
  engines: {node: '>=12'}
176
  cpu: [loong64]
177
  os: [linux]
178
 
 
 
 
 
 
 
179
  '@esbuild/[email protected]':
180
  resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
181
  engines: {node: '>=12'}
182
  cpu: [mips64el]
183
  os: [linux]
184
 
 
 
 
 
 
 
185
  '@esbuild/[email protected]':
186
  resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
187
  engines: {node: '>=12'}
188
  cpu: [ppc64]
189
  os: [linux]
190
 
 
 
 
 
 
 
191
  '@esbuild/[email protected]':
192
  resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
193
  engines: {node: '>=12'}
194
  cpu: [riscv64]
195
  os: [linux]
196
 
 
 
 
 
 
 
197
  '@esbuild/[email protected]':
198
  resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
199
  engines: {node: '>=12'}
200
  cpu: [s390x]
201
  os: [linux]
202
 
 
 
 
 
 
 
203
  '@esbuild/[email protected]':
204
  resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
205
  engines: {node: '>=12'}
206
  cpu: [x64]
207
  os: [linux]
208
 
 
 
 
 
 
 
 
 
 
 
 
 
209
  '@esbuild/[email protected]':
210
  resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
211
  engines: {node: '>=12'}
212
  cpu: [x64]
213
  os: [netbsd]
214
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  '@esbuild/[email protected]':
216
  resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
217
  engines: {node: '>=12'}
218
  cpu: [x64]
219
  os: [openbsd]
220
 
 
 
 
 
 
 
221
  '@esbuild/[email protected]':
222
  resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
223
  engines: {node: '>=12'}
224
  cpu: [x64]
225
  os: [sunos]
226
 
 
 
 
 
 
 
227
  '@esbuild/[email protected]':
228
  resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
229
  engines: {node: '>=12'}
230
  cpu: [arm64]
231
  os: [win32]
232
 
 
 
 
 
 
 
233
  '@esbuild/[email protected]':
234
  resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
235
  engines: {node: '>=12'}
236
  cpu: [ia32]
237
  os: [win32]
238
 
 
 
 
 
 
 
239
  '@esbuild/[email protected]':
240
  resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
241
  engines: {node: '>=12'}
242
  cpu: [x64]
243
  os: [win32]
244
 
 
 
 
 
 
 
245
  '@eslint-community/[email protected]':
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/[email protected]':
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/[email protected]':
472
  resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
473
  peerDependencies:
@@ -678,6 +867,10 @@ packages:
678
679
  resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
680
 
 
 
 
 
681
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
701
  resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
702
  engines: {node: '>=8'}
@@ -708,10 +904,16 @@ packages:
708
709
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
710
 
 
 
 
711
712
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
713
  engines: {node: '>=8'}
714
 
 
 
 
715
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
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
738
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
739
  engines: {node: '>= 8.10.0'}
740
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
741
742
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
743
  engines: {node: '>=6'}
@@ -752,16 +976,40 @@ packages:
752
753
  resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
754
 
 
 
 
 
 
 
 
 
 
 
 
755
756
  resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
757
 
758
759
  resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
760
 
 
 
 
 
 
 
 
 
 
 
761
762
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
763
  engines: {node: '>= 0.6'}
764
 
 
 
 
765
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
795
  resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
796
  engines: {node: '>=6'}
@@ -807,6 +1061,9 @@ packages:
807
808
  resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
809
 
 
 
 
810
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
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
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
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
900
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
901
 
@@ -920,6 +1205,10 @@ packages:
920
  picomatch:
921
  optional: true
922
 
 
 
 
 
923
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
932
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
933
  engines: {node: '>=10'}
934
 
 
 
 
 
935
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
969
  resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
970
  engines: {node: '>=8'}
971
 
 
 
 
 
972
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
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
995
  resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
996
  engines: {node: '>= 4'}
@@ -1013,6 +1329,14 @@ packages:
1013
1014
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1015
 
 
 
 
 
 
 
 
 
1016
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
1029
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1030
  engines: {node: '>=0.10.0'}
1031
 
 
 
 
 
1032
1033
  resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1034
 
@@ -1046,9 +1378,17 @@ packages:
1046
1047
  resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
1048
 
 
 
 
 
1049
1050
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1051
 
 
 
 
 
1052
1053
  resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1054
  hasBin: true
@@ -1069,6 +1409,10 @@ packages:
1069
1070
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1071
 
 
 
 
 
1072
1073
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1074
  engines: {node: '>=6'}
@@ -1076,6 +1420,9 @@ packages:
1076
1077
  resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
1078
 
 
 
 
1079
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
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
1163
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1164
 
 
 
 
 
 
 
 
1165
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
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
1198
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1199
  engines: {node: '>=4'}
@@ -1205,6 +1574,9 @@ packages:
1205
1206
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1207
 
 
 
 
1208
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
1226
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1227
 
 
 
 
 
1228
1229
  resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1230
  engines: {node: '>= 0.8.0'}
1231
 
 
 
 
 
 
 
 
 
1232
1233
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1234
  engines: {node: '>=10'}
1235
 
 
 
 
 
1236
1237
  resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1238
  engines: {node: '>=10'}
1239
 
 
 
 
 
 
 
 
1240
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
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
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
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
1396
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1397
 
 
 
 
 
 
 
 
 
1398
1399
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1400
  engines: {node: '>=8.10.0'}
1401
 
 
 
 
 
1402
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
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
1431
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1432
 
 
 
 
1433
1434
  resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1435
  engines: {node: '>=6'}
1436
 
 
 
 
 
 
 
1437
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
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
1473
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1474
  engines: {node: '>=8'}
@@ -1567,6 +2028,16 @@ packages:
1567
1568
  resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
1569
 
 
 
 
 
 
 
 
 
 
 
1570
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
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
1596
  resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
1597
  engines: {node: '>=14.17'}
1598
  hasBin: true
1599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1600
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
1646
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1647
  engines: {node: '>= 8'}
1648
  hasBin: true
1649
 
 
 
 
 
 
1650
1651
  resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1652
  engines: {node: '>=0.10.0'}
1653
 
 
 
 
 
1654
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/[email protected]': {}
@@ -1676,75 +2271,157 @@ snapshots:
1676
  '@jridgewell/gen-mapping': 0.3.8
1677
  '@jridgewell/trace-mapping': 0.3.25
1678
 
 
 
 
 
 
 
 
1679
  '@esbuild/[email protected]':
1680
  optional: true
1681
 
 
 
 
1682
  '@esbuild/[email protected]':
1683
  optional: true
1684
 
 
 
 
1685
  '@esbuild/[email protected]':
1686
  optional: true
1687
 
 
 
 
1688
  '@esbuild/[email protected]':
1689
  optional: true
1690
 
 
 
 
1691
  '@esbuild/[email protected]':
1692
  optional: true
1693
 
 
 
 
1694
  '@esbuild/[email protected]':
1695
  optional: true
1696
 
 
 
 
1697
  '@esbuild/[email protected]':
1698
  optional: true
1699
 
 
 
 
1700
  '@esbuild/[email protected]':
1701
  optional: true
1702
 
 
 
 
1703
  '@esbuild/[email protected]':
1704
  optional: true
1705
 
 
 
 
1706
  '@esbuild/[email protected]':
1707
  optional: true
1708
 
 
 
 
1709
  '@esbuild/[email protected]':
1710
  optional: true
1711
 
 
 
 
1712
  '@esbuild/[email protected]':
1713
  optional: true
1714
 
 
 
 
1715
  '@esbuild/[email protected]':
1716
  optional: true
1717
 
 
 
 
1718
  '@esbuild/[email protected]':
1719
  optional: true
1720
 
 
 
 
1721
  '@esbuild/[email protected]':
1722
  optional: true
1723
 
 
 
 
1724
  '@esbuild/[email protected]':
1725
  optional: true
1726
 
 
 
 
1727
  '@esbuild/[email protected]':
1728
  optional: true
1729
 
 
 
 
 
 
 
1730
  '@esbuild/[email protected]':
1731
  optional: true
1732
 
 
 
 
 
 
 
1733
  '@esbuild/[email protected]':
1734
  optional: true
1735
 
 
 
 
1736
  '@esbuild/[email protected]':
1737
  optional: true
1738
 
 
 
 
1739
  '@esbuild/[email protected]':
1740
  optional: true
1741
 
 
 
 
1742
  '@esbuild/[email protected]':
1743
  optional: true
1744
 
 
 
 
1745
  '@esbuild/[email protected]':
1746
  optional: true
1747
 
 
 
 
1748
  '@eslint-community/[email protected]([email protected])':
1749
  dependencies:
1750
  eslint: 8.57.1
@@ -1803,6 +2480,25 @@ snapshots:
1803
 
1804
  '@humanwhocodes/[email protected]': {}
1805
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1806
  '@internationalized/[email protected]':
1807
  dependencies:
1808
  '@swc/helpers': 0.5.15
@@ -1941,6 +2637,38 @@ snapshots:
1941
  '@rollup/[email protected]':
1942
  optional: true
1943
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1944
1945
  dependencies:
1946
@@ -2177,6 +2905,10 @@ snapshots:
2177
  json-schema-traverse: 0.4.1
2178
  uri-js: 4.4.1
2179
 
 
 
 
 
2180
2181
 
2182
@@ -2192,14 +2924,24 @@ snapshots:
2192
 
2193
2194
 
 
 
2195
2196
 
2197
2198
 
2199
2200
 
 
 
2201
2202
 
 
 
 
 
 
 
2203
2204
  dependencies:
2205
  balanced-match: 1.0.2
@@ -2215,6 +2957,11 @@ snapshots:
2215
 
2216
2217
 
 
 
 
 
 
2218
2219
 
2220
@@ -2222,6 +2969,8 @@ snapshots:
2222
  ansi-styles: 4.3.0
2223
  supports-color: 7.2.0
2224
 
 
 
2225
2226
  dependencies:
2227
  anymatch: 3.1.3
@@ -2234,6 +2983,16 @@ snapshots:
2234
  optionalDependencies:
2235
  fsevents: 2.3.3
2236
 
 
 
 
 
 
 
 
 
 
 
2237
2238
 
2239
@@ -2250,12 +3009,32 @@ snapshots:
2250
 
2251
2252
 
 
 
 
 
 
 
 
 
 
 
 
 
2253
2254
 
2255
2256
 
 
 
 
 
 
 
2257
2258
 
 
 
2259
2260
  dependencies:
2261
  path-key: 3.1.1
@@ -2277,6 +3056,12 @@ snapshots:
2277
 
2278
2279
 
 
 
 
 
 
 
2280
2281
 
2282
@@ -2285,6 +3070,8 @@ snapshots:
2285
 
2286
2287
 
 
 
2288
2289
  dependencies:
2290
  path-type: 4.0.0
@@ -2293,6 +3080,10 @@ snapshots:
2293
  dependencies:
2294
  esutils: 2.0.3
2295
 
 
 
 
 
2296
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
2330
 
2331
@@ -2414,6 +3235,8 @@ snapshots:
2414
  acorn-jsx: 5.3.2([email protected])
2415
  eslint-visitor-keys: 3.4.3
2416
 
 
 
2417
2418
  dependencies:
2419
  estraverse: 5.3.0
@@ -2432,6 +3255,14 @@ snapshots:
2432
 
2433
2434
 
 
 
 
 
 
 
 
 
2435
2436
 
2437
@@ -2454,6 +3285,10 @@ snapshots:
2454
  optionalDependencies:
2455
  picomatch: 4.0.2
2456
 
 
 
 
 
2457
2458
  dependencies:
2459
  flat-cache: 3.2.0
@@ -2462,11 +3297,21 @@ snapshots:
2462
  dependencies:
2463
  to-regex-range: 5.0.1
2464
 
 
 
 
 
 
2465
2466
  dependencies:
2467
  locate-path: 6.0.0
2468
  path-exists: 4.0.0
2469
 
 
 
 
 
 
2470
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
2507
  dependencies:
2508
  type-fest: 0.20.2
2509
 
 
 
2510
2511
  dependencies:
2512
  array-union: 2.1.0
@@ -2522,12 +3375,20 @@ snapshots:
2522
 
2523
2524
 
 
 
2525
2526
  dependencies:
2527
  function-bind: 1.1.2
2528
 
2529
2530
 
 
 
 
 
 
 
2531
2532
 
2533
@@ -2546,6 +3407,26 @@ snapshots:
2546
 
2547
2548
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2549
2550
  dependencies:
2551
  binary-extensions: 2.3.0
@@ -2556,10 +3437,14 @@ snapshots:
2556
 
2557
2558
 
 
 
2559
2560
  dependencies:
2561
  is-extglob: 2.1.1
2562
 
 
 
2563
2564
 
2565
@@ -2574,8 +3459,12 @@ snapshots:
2574
  dependencies:
2575
  '@types/estree': 1.0.6
2576
 
 
 
2577
2578
 
 
 
2579
2580
 
2581
@@ -2592,10 +3481,14 @@ snapshots:
2592
  dependencies:
2593
  json-buffer: 3.0.1
2594
 
 
 
2595
2596
 
2597
2598
 
 
 
2599
2600
  dependencies:
2601
  prelude-ls: 1.2.1
@@ -2651,14 +3544,31 @@ snapshots:
2651
2652
  optional: true
2653
 
 
 
 
 
 
 
2654
2655
 
2656
2657
  dependencies:
2658
  p-locate: 5.0.0
2659
 
 
 
 
 
2660
2661
 
 
 
 
 
 
 
 
2662
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
2676
 
2677
@@ -2688,12 +3600,21 @@ snapshots:
2688
  dependencies:
2689
  minimist: 1.2.8
2690
 
 
 
 
 
 
 
 
2691
2692
 
2693
2694
 
2695
2696
 
 
 
2697
2698
 
2699
@@ -2706,6 +3627,10 @@ snapshots:
2706
  dependencies:
2707
  wrappy: 1.0.2
2708
 
 
 
 
 
2709
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
2719
  dependencies:
2720
  yocto-queue: 0.1.0
2721
 
 
 
 
 
2722
2723
  dependencies:
2724
  p-limit: 3.1.0
2725
 
 
 
 
 
 
 
 
 
2726
2727
  dependencies:
2728
  callsites: 3.1.0
2729
 
2730
2731
 
 
 
2732
2733
 
2734
@@ -2737,6 +3690,10 @@ snapshots:
2737
 
2738
2739
 
 
 
 
 
2740
2741
  dependencies:
2742
  '@types/estree': 1.0.6
@@ -2749,6 +3706,22 @@ snapshots:
2749
 
2750
2751
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2752
2753
  dependencies:
2754
  lilconfig: 2.1.0
@@ -2800,12 +3773,27 @@ snapshots:
2800
 
2801
2802
 
 
 
2803
2804
 
 
 
 
 
 
 
 
 
 
 
 
2805
2806
  dependencies:
2807
  picomatch: 2.3.1
2808
 
 
 
2809
2810
 
2811
@@ -2814,6 +3802,13 @@ snapshots:
2814
  path-parse: 1.0.7
2815
  supports-preserve-symlinks-flag: 1.0.0
2816
 
 
 
 
 
 
 
 
2817
2818
 
2819
@@ -2849,14 +3844,24 @@ snapshots:
2849
  '@rollup/rollup-win32-x64-msvc': 4.34.9
2850
  fsevents: 2.3.3
2851
 
 
 
2852
2853
  dependencies:
2854
  queue-microtask: 1.2.3
2855
 
 
 
 
 
2856
2857
  dependencies:
2858
  mri: 1.2.0
2859
 
 
 
 
 
2860
2861
  dependencies:
2862
  es6-promise: 3.3.1
@@ -2874,6 +3879,8 @@ snapshots:
2874
 
2875
2876
 
 
 
2877
2878
  dependencies:
2879
  '@polka/url': 1.0.0-next.28
@@ -2891,6 +3898,16 @@ snapshots:
2891
 
2892
2893
 
 
 
 
 
 
 
 
 
 
 
2894
2895
  dependencies:
2896
  ansi-regex: 5.0.1
@@ -2981,6 +3998,14 @@ snapshots:
2981
 
2982
2983
 
 
 
 
 
 
 
 
 
2984
2985
  dependencies:
2986
  is-number: 7.0.0
@@ -2991,6 +4016,15 @@ snapshots:
2991
  dependencies:
2992
  typescript: 5.8.2
2993
 
 
 
 
 
 
 
 
 
 
2994
2995
 
2996
@@ -2999,8 +4033,58 @@ snapshots:
2999
 
3000
3001
 
 
 
 
 
 
 
3002
3003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3004
3005
  dependencies:
3006
  punycode: 2.3.1
@@ -3016,16 +4100,43 @@ snapshots:
3016
  fsevents: 2.3.3
3017
  lightningcss: 1.29.1
3018
 
 
 
 
 
 
 
 
 
 
 
 
3019
3020
  optionalDependencies:
3021
  vite: 5.4.14([email protected])
3022
 
 
 
 
 
 
 
3023
3024
  dependencies:
3025
  isexe: 2.0.0
3026
 
 
 
 
 
3027
3028
 
 
 
 
 
 
 
3029
3030
 
3031
@@ -3034,3 +4145,5 @@ snapshots:
3034
  optional: true
3035
 
3036
 
 
 
23
  '@tailwindcss/container-queries':
24
  specifier: ^0.1.1
25
  version: 0.1.1([email protected])
26
+ typia:
27
+ specifier: ^8.0.0
28
+ version: 8.0.0(@samchon/[email protected])([email protected])
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
36
+ '@samchon/openapi':
37
+ specifier: ^3.0.0
38
+ version: 3.0.0
39
  '@sveltejs/adapter-auto':
40
  specifier: ^3.2.2
41
 
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([email protected])
111
  vite:
112
  specifier: ^5.0.3
113
  version: 5.4.14([email protected])
 
122
  resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
123
  engines: {node: '>=6.0.0'}
124
 
125
+ '@antfu/[email protected]':
126
+ resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
127
+
128
+ '@antfu/[email protected]':
129
+ resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
130
+
131
  '@esbuild/[email protected]':
132
  resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
133
  engines: {node: '>=12'}
134
  cpu: [ppc64]
135
  os: [aix]
136
 
137
+ '@esbuild/[email protected]':
138
+ resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==}
139
+ engines: {node: '>=18'}
140
+ cpu: [ppc64]
141
+ os: [aix]
142
+
143
  '@esbuild/[email protected]':
144
  resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
145
  engines: {node: '>=12'}
146
  cpu: [arm64]
147
  os: [android]
148
 
149
+ '@esbuild/[email protected]':
150
+ resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==}
151
+ engines: {node: '>=18'}
152
+ cpu: [arm64]
153
+ os: [android]
154
+
155
  '@esbuild/[email protected]':
156
  resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
157
  engines: {node: '>=12'}
158
  cpu: [arm]
159
  os: [android]
160
 
161
+ '@esbuild/[email protected]':
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/[email protected]':
168
  resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
169
  engines: {node: '>=12'}
170
  cpu: [x64]
171
  os: [android]
172
 
173
+ '@esbuild/[email protected]':
174
+ resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==}
175
+ engines: {node: '>=18'}
176
+ cpu: [x64]
177
+ os: [android]
178
+
179
  '@esbuild/[email protected]':
180
  resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
181
  engines: {node: '>=12'}
182
  cpu: [arm64]
183
  os: [darwin]
184
 
185
+ '@esbuild/[email protected]':
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/[email protected]':
192
  resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
193
  engines: {node: '>=12'}
194
  cpu: [x64]
195
  os: [darwin]
196
 
197
+ '@esbuild/[email protected]':
198
+ resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==}
199
+ engines: {node: '>=18'}
200
+ cpu: [x64]
201
+ os: [darwin]
202
+
203
  '@esbuild/[email protected]':
204
  resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
205
  engines: {node: '>=12'}
206
  cpu: [arm64]
207
  os: [freebsd]
208
 
209
+ '@esbuild/[email protected]':
210
+ resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==}
211
+ engines: {node: '>=18'}
212
+ cpu: [arm64]
213
+ os: [freebsd]
214
+
215
  '@esbuild/[email protected]':
216
  resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
217
  engines: {node: '>=12'}
218
  cpu: [x64]
219
  os: [freebsd]
220
 
221
+ '@esbuild/[email protected]':
222
+ resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==}
223
+ engines: {node: '>=18'}
224
+ cpu: [x64]
225
+ os: [freebsd]
226
+
227
  '@esbuild/[email protected]':
228
  resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
229
  engines: {node: '>=12'}
230
  cpu: [arm64]
231
  os: [linux]
232
 
233
+ '@esbuild/[email protected]':
234
+ resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==}
235
+ engines: {node: '>=18'}
236
+ cpu: [arm64]
237
+ os: [linux]
238
+
239
  '@esbuild/[email protected]':
240
  resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
241
  engines: {node: '>=12'}
242
  cpu: [arm]
243
  os: [linux]
244
 
245
+ '@esbuild/[email protected]':
246
+ resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==}
247
+ engines: {node: '>=18'}
248
+ cpu: [arm]
249
+ os: [linux]
250
+
251
  '@esbuild/[email protected]':
252
  resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
253
  engines: {node: '>=12'}
254
  cpu: [ia32]
255
  os: [linux]
256
 
257
+ '@esbuild/[email protected]':
258
+ resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==}
259
+ engines: {node: '>=18'}
260
+ cpu: [ia32]
261
+ os: [linux]
262
+
263
  '@esbuild/[email protected]':
264
  resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
265
  engines: {node: '>=12'}
266
  cpu: [loong64]
267
  os: [linux]
268
 
269
+ '@esbuild/[email protected]':
270
+ resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==}
271
+ engines: {node: '>=18'}
272
+ cpu: [loong64]
273
+ os: [linux]
274
+
275
  '@esbuild/[email protected]':
276
  resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
277
  engines: {node: '>=12'}
278
  cpu: [mips64el]
279
  os: [linux]
280
 
281
+ '@esbuild/[email protected]':
282
+ resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==}
283
+ engines: {node: '>=18'}
284
+ cpu: [mips64el]
285
+ os: [linux]
286
+
287
  '@esbuild/[email protected]':
288
  resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
289
  engines: {node: '>=12'}
290
  cpu: [ppc64]
291
  os: [linux]
292
 
293
+ '@esbuild/[email protected]':
294
+ resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==}
295
+ engines: {node: '>=18'}
296
+ cpu: [ppc64]
297
+ os: [linux]
298
+
299
  '@esbuild/[email protected]':
300
  resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
301
  engines: {node: '>=12'}
302
  cpu: [riscv64]
303
  os: [linux]
304
 
305
+ '@esbuild/[email protected]':
306
+ resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==}
307
+ engines: {node: '>=18'}
308
+ cpu: [riscv64]
309
+ os: [linux]
310
+
311
  '@esbuild/[email protected]':
312
  resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
313
  engines: {node: '>=12'}
314
  cpu: [s390x]
315
  os: [linux]
316
 
317
+ '@esbuild/[email protected]':
318
+ resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==}
319
+ engines: {node: '>=18'}
320
+ cpu: [s390x]
321
+ os: [linux]
322
+
323
  '@esbuild/[email protected]':
324
  resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
325
  engines: {node: '>=12'}
326
  cpu: [x64]
327
  os: [linux]
328
 
329
+ '@esbuild/[email protected]':
330
+ resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==}
331
+ engines: {node: '>=18'}
332
+ cpu: [x64]
333
+ os: [linux]
334
+
335
+ '@esbuild/[email protected]':
336
+ resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==}
337
+ engines: {node: '>=18'}
338
+ cpu: [arm64]
339
+ os: [netbsd]
340
+
341
  '@esbuild/[email protected]':
342
  resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
343
  engines: {node: '>=12'}
344
  cpu: [x64]
345
  os: [netbsd]
346
 
347
+ '@esbuild/[email protected]':
348
+ resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==}
349
+ engines: {node: '>=18'}
350
+ cpu: [x64]
351
+ os: [netbsd]
352
+
353
+ '@esbuild/[email protected]':
354
+ resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==}
355
+ engines: {node: '>=18'}
356
+ cpu: [arm64]
357
+ os: [openbsd]
358
+
359
  '@esbuild/[email protected]':
360
  resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
361
  engines: {node: '>=12'}
362
  cpu: [x64]
363
  os: [openbsd]
364
 
365
+ '@esbuild/[email protected]':
366
+ resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==}
367
+ engines: {node: '>=18'}
368
+ cpu: [x64]
369
+ os: [openbsd]
370
+
371
  '@esbuild/[email protected]':
372
  resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
373
  engines: {node: '>=12'}
374
  cpu: [x64]
375
  os: [sunos]
376
 
377
+ '@esbuild/[email protected]':
378
+ resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==}
379
+ engines: {node: '>=18'}
380
+ cpu: [x64]
381
+ os: [sunos]
382
+
383
  '@esbuild/[email protected]':
384
  resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
385
  engines: {node: '>=12'}
386
  cpu: [arm64]
387
  os: [win32]
388
 
389
+ '@esbuild/[email protected]':
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/[email protected]':
396
  resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
397
  engines: {node: '>=12'}
398
  cpu: [ia32]
399
  os: [win32]
400
 
401
+ '@esbuild/[email protected]':
402
+ resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==}
403
+ engines: {node: '>=18'}
404
+ cpu: [ia32]
405
+ os: [win32]
406
+
407
  '@esbuild/[email protected]':
408
  resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
409
  engines: {node: '>=12'}
410
  cpu: [x64]
411
  os: [win32]
412
 
413
+ '@esbuild/[email protected]':
414
+ resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==}
415
+ engines: {node: '>=18'}
416
+ cpu: [x64]
417
+ os: [win32]
418
+
419
  '@eslint-community/[email protected]':
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/[email protected]':
474
+ resolution: {integrity: sha512-6xh4YiFBz6qoSnB3XMe23WvjTJroDFXB17J1MbiT7nATFe+70+em1acRXr8hgP/gYpwFMHFc4IvjA/IPTPnTzg==}
475
+
476
+ '@iconify/[email protected]':
477
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
478
+
479
+ '@iconify/[email protected]':
480
+ resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
481
+
482
  '@internationalized/[email protected]':
483
  resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==}
484
 
 
651
  cpu: [x64]
652
  os: [win32]
653
 
654
+ '@ryoppippi/[email protected]':
655
+ resolution: {integrity: sha512-TlrqL2WQie2HvSqJpmKPXrFsNPbMwU5Jw2Asx+E3E3Fuyya5mN1lqaeILwSZLmkCOMTQLazIrTWNOGs0V6XL6A==}
656
+
657
+ '@samchon/[email protected]':
658
+ resolution: {integrity: sha512-eVQlyKRYv1/C2Mikc1xZr7c0jMjg1vjPkeY/gheKB4c5WOOWyTNZ1uvnXR+ETpPHwaQ54I9NrQZhoNk6BEGuuw==}
659
+
660
  '@sveltejs/[email protected]':
661
  resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
662
  peerDependencies:
 
867
868
  resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
869
 
870
871
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
872
+ engines: {node: '>=8'}
873
+
874
875
  resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
876
  engines: {node: '>=8'}
 
890
  resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
891
  engines: {node: '>= 0.4'}
892
 
893
894
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
895
+
896
897
  resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
898
  engines: {node: '>=8'}
 
904
905
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
906
 
907
908
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
909
+
910
911
  resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
912
  engines: {node: '>=8'}
913
 
914
915
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
916
+
917
918
  resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
919
 
 
928
  resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
929
  engines: {node: '>=8.0.0'}
930
 
931
932
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
933
+
934
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
943
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
944
+
945
946
  resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
947
  engines: {node: '>= 8.10.0'}
948
 
949
950
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
951
+ engines: {node: '>=8'}
952
+
953
954
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
955
+ engines: {node: '>=6'}
956
+
957
958
+ resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
959
+ engines: {node: '>= 10'}
960
+
961
962
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
963
+ engines: {node: '>=0.8'}
964
+
965
966
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
967
  engines: {node: '>=6'}
 
976
977
  resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
978
 
979
980
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
981
+ engines: {node: '>=14'}
982
+
983
984
+ resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==}
985
+ engines: {node: '>= 6'}
986
+
987
988
+ resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
989
+
990
991
  resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
992
 
993
994
  resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
995
 
996
997
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
998
+
999
1000
+ resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
1001
+
1002
1003
+ resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
1004
+ engines: {node: ^14.18.0 || >=16.10.0}
1005
+
1006
1007
  resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
1008
  engines: {node: '>= 0.6'}
1009
 
1010
1011
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
1012
+
1013
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
1043
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
1044
+
1045
1046
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
1047
+
1048
1049
  resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
1050
  engines: {node: '>=6'}
 
1061
1062
  resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
1063
 
1064
1065
+ resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
1066
+
1067
1068
  resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1069
  engines: {node: '>=8'}
 
1072
  resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1073
  engines: {node: '>=6.0.0'}
1074
 
1075
1076
+ resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==}
1077
+ engines: {node: '>=4'}
1078
+
1079
1080
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1081
+
1082
1083
  resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
1084
  engines: {node: '>=10.13.0'}
 
1091
  engines: {node: '>=12'}
1092
  hasBin: true
1093
 
1094
1095
+ resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==}
1096
+ engines: {node: '>=18'}
1097
+ hasBin: true
1098
+
1099
1100
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1101
+ engines: {node: '>=0.8.0'}
1102
+
1103
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
1151
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1152
+ engines: {node: '>=4'}
1153
+ hasBin: true
1154
+
1155
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
1178
+ resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
1179
+
1180
1181
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
1182
+ engines: {node: '>=4'}
1183
+
1184
1185
  resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1186
 
 
1205
  picomatch:
1206
  optional: true
1207
 
1208
1209
+ resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
1210
+ engines: {node: '>=8'}
1211
+
1212
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
1221
+ resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==}
1222
+ engines: {node: '>=16'}
1223
+
1224
1225
  resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1226
  engines: {node: '>=10'}
1227
 
1228
1229
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
1230
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1231
+
1232
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
1266
+ resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
1267
+ engines: {node: '>=16'}
1268
+
1269
1270
  resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
1271
  engines: {node: '>=8'}
1272
 
1273
1274
+ resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
1275
+ engines: {node: '>=18'}
1276
+
1277
1278
  resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1279
  engines: {node: '>=10'}
 
1288
  resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1289
  engines: {node: '>=8'}
1290
 
1291
1292
+ resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
1293
+ engines: {node: '>=8'}
1294
+
1295
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
1304
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1305
+ engines: {node: '>=0.10.0'}
1306
+
1307
1308
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1309
+
1310
1311
  resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1312
  engines: {node: '>= 4'}
 
1329
1330
  resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1331
 
1332
1333
+ resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
1334
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1335
+
1336
1337
+ resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
1338
+ engines: {node: '>=12.0.0'}
1339
+
1340
1341
  resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1342
  engines: {node: '>=8'}
 
1349
  resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1350
  engines: {node: '>=0.10.0'}
1351
 
1352
1353
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1354
+ engines: {node: '>=8'}
1355
+
1356
1357
  resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1358
  engines: {node: '>=0.10.0'}
1359
 
1360
1361
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1362
+ engines: {node: '>=8'}
1363
+
1364
1365
  resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1366
 
 
1378
1379
  resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
1380
 
1381
1382
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1383
+ engines: {node: '>=10'}
1384
+
1385
1386
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1387
 
1388
1389
+ resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
1390
+ engines: {node: '>=16'}
1391
+
1392
1393
  resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1394
  hasBin: true
 
1409
1410
  resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1411
 
1412
1413
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1414
+ engines: {node: '>=0.10.0'}
1415
+
1416
1417
  resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
1418
  engines: {node: '>=6'}
 
1420
1421
  resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==}
1422
 
1423
1424
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1425
+
1426
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
1503
+ resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
1504
+ engines: {node: '>=14'}
1505
+
1506
1507
  resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
1508
 
 
1510
  resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1511
  engines: {node: '>=10'}
1512
 
1513
1514
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
1515
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1516
+
1517
1518
  resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1519
 
1520
1521
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1522
+
1523
1524
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1525
+ engines: {node: '>=10'}
1526
+
1527
1528
  resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1529
 
 
1538
  resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1539
  engines: {node: '>=8.6'}
1540
 
1541
1542
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1543
+ engines: {node: '>=6'}
1544
+
1545
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
1564
+ resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
1565
+
1566
1567
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1568
  engines: {node: '>=4'}
 
1574
1575
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1576
 
1577
1578
+ resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
1579
+
1580
1581
  resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1582
  engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 
1597
1598
  resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1599
 
1600
1601
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1602
+ engines: {node: '>=6'}
1603
+
1604
1605
  resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1606
  engines: {node: '>= 0.8.0'}
1607
 
1608
1609
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
1610
+ engines: {node: '>=10'}
1611
+
1612
1613
+ resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1614
+ engines: {node: '>=0.10.0'}
1615
+
1616
1617
  resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1618
  engines: {node: '>=10'}
1619
 
1620
1621
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
1622
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1623
+
1624
1625
  resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1626
  engines: {node: '>=10'}
1627
 
1628
1629
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
1630
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1631
+
1632
1633
+ resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
1634
+
1635
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
1644
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
1645
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1646
+
1647
1648
  resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1649
  engines: {node: '>=0.10.0'}
 
1659
  resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1660
  engines: {node: '>=8'}
1661
 
1662
1663
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
1664
+
1665
1666
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
1667
+
1668
1669
  resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
1670
 
 
1679
  resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1680
  engines: {node: '>=12'}
1681
 
1682
1683
+ resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
1684
+ engines: {node: '>=14.16'}
1685
+
1686
1687
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
1688
+
1689
1690
+ resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
1691
+
1692
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
1811
+ resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
1812
+
1813
1814
  resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1815
 
1816
1817
+ resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
1818
+ engines: {node: '>=4'}
1819
+
1820
1821
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
1822
+ engines: {node: '>= 6'}
1823
+
1824
1825
  resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
1826
  engines: {node: '>=8.10.0'}
1827
 
1828
1829
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
1830
+ engines: {node: '>=0.10'}
1831
+
1832
1833
  resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1834
  engines: {node: '>=4'}
 
1838
  engines: {node: '>= 0.4'}
1839
  hasBin: true
1840
 
1841
1842
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
1843
+ engines: {node: '>=8'}
1844
+
1845
1846
+ resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==}
1847
+ engines: {node: '>=4'}
1848
+
1849
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
1869
+ resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
1870
+ engines: {node: '>=0.12.0'}
1871
+
1872
1873
  resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1874
 
1875
1876
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
1877
+
1878
1879
  resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
1880
  engines: {node: '>=6'}
1881
 
1882
1883
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1884
+
1885
1886
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1887
+
1888
1889
  resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
1890
 
 
1904
  resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1905
  engines: {node: '>=8'}
1906
 
1907
1908
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1909
+
1910
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
1927
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1928
+ engines: {node: '>=8'}
1929
+
1930
1931
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1932
+
1933
1934
  resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1935
  engines: {node: '>=8'}
 
2028
2029
  resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
2030
 
2031
2032
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
2033
+
2034
2035
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
2036
+
2037
2038
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
2039
+ engines: {node: '>=0.6.0'}
2040
+
2041
2042
  resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2043
  engines: {node: '>=8.0'}
 
2052
  peerDependencies:
2053
  typescript: '>=4.2.0'
2054
 
2055
2056
+ resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
2057
+ hasBin: true
2058
+
2059
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
2071
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
2072
+ engines: {node: '>=10'}
2073
+
2074
2075
+ resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
2076
+ engines: {node: '>=16'}
2077
+
2078
2079
+ resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
2080
+ engines: {node: '>=14.17'}
2081
+ hasBin: true
2082
+
2083
2084
  resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
2085
  engines: {node: '>=14.17'}
2086
  hasBin: true
2087
 
2088
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
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
2103
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
2104
+
2105
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
2129
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
2130
+ engines: {node: '>=14.0.0'}
2131
+
2132
2133
+ resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==}
2134
+ engines: {node: '>=18.12.0'}
2135
+
2136
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
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
2222
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
2223
+
2224
2225
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
2226
+
2227
2228
  resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2229
  engines: {node: '>= 8'}
2230
  hasBin: true
2231
 
2232
2233
+ resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
2234
+ engines: {node: ^16.13.0 || >=18.0.0}
2235
+ hasBin: true
2236
+
2237
2238
  resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
2239
  engines: {node: '>=0.10.0'}
2240
 
2241
2242
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2243
+ engines: {node: '>=8'}
2244
+
2245
2246
  resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2247
 
 
2258
  resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2259
  engines: {node: '>=10'}
2260
 
2261
2262
+ resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
2263
+ engines: {node: '>=12.20'}
2264
+
2265
  snapshots:
2266
 
2267
  '@alloc/[email protected]': {}
 
2271
  '@jridgewell/gen-mapping': 0.3.8
2272
  '@jridgewell/trace-mapping': 0.3.25
2273
 
2274
+ '@antfu/[email protected]':
2275
+ dependencies:
2276
+ package-manager-detector: 0.2.11
2277
+ tinyexec: 0.3.2
2278
+
2279
+ '@antfu/[email protected]': {}
2280
+
2281
  '@esbuild/[email protected]':
2282
  optional: true
2283
 
2284
+ '@esbuild/[email protected]':
2285
+ optional: true
2286
+
2287
  '@esbuild/[email protected]':
2288
  optional: true
2289
 
2290
+ '@esbuild/[email protected]':
2291
+ optional: true
2292
+
2293
  '@esbuild/[email protected]':
2294
  optional: true
2295
 
2296
+ '@esbuild/[email protected]':
2297
+ optional: true
2298
+
2299
  '@esbuild/[email protected]':
2300
  optional: true
2301
 
2302
+ '@esbuild/[email protected]':
2303
+ optional: true
2304
+
2305
  '@esbuild/[email protected]':
2306
  optional: true
2307
 
2308
+ '@esbuild/[email protected]':
2309
+ optional: true
2310
+
2311
  '@esbuild/[email protected]':
2312
  optional: true
2313
 
2314
+ '@esbuild/[email protected]':
2315
+ optional: true
2316
+
2317
  '@esbuild/[email protected]':
2318
  optional: true
2319
 
2320
+ '@esbuild/[email protected]':
2321
+ optional: true
2322
+
2323
  '@esbuild/[email protected]':
2324
  optional: true
2325
 
2326
+ '@esbuild/[email protected]':
2327
+ optional: true
2328
+
2329
  '@esbuild/[email protected]':
2330
  optional: true
2331
 
2332
+ '@esbuild/[email protected]':
2333
+ optional: true
2334
+
2335
  '@esbuild/[email protected]':
2336
  optional: true
2337
 
2338
+ '@esbuild/[email protected]':
2339
+ optional: true
2340
+
2341
  '@esbuild/[email protected]':
2342
  optional: true
2343
 
2344
+ '@esbuild/[email protected]':
2345
+ optional: true
2346
+
2347
  '@esbuild/[email protected]':
2348
  optional: true
2349
 
2350
+ '@esbuild/[email protected]':
2351
+ optional: true
2352
+
2353
  '@esbuild/[email protected]':
2354
  optional: true
2355
 
2356
+ '@esbuild/[email protected]':
2357
+ optional: true
2358
+
2359
  '@esbuild/[email protected]':
2360
  optional: true
2361
 
2362
+ '@esbuild/[email protected]':
2363
+ optional: true
2364
+
2365
  '@esbuild/[email protected]':
2366
  optional: true
2367
 
2368
+ '@esbuild/[email protected]':
2369
+ optional: true
2370
+
2371
  '@esbuild/[email protected]':
2372
  optional: true
2373
 
2374
+ '@esbuild/[email protected]':
2375
+ optional: true
2376
+
2377
  '@esbuild/[email protected]':
2378
  optional: true
2379
 
2380
+ '@esbuild/[email protected]':
2381
+ optional: true
2382
+
2383
+ '@esbuild/[email protected]':
2384
+ optional: true
2385
+
2386
  '@esbuild/[email protected]':
2387
  optional: true
2388
 
2389
+ '@esbuild/[email protected]':
2390
+ optional: true
2391
+
2392
+ '@esbuild/[email protected]':
2393
+ optional: true
2394
+
2395
  '@esbuild/[email protected]':
2396
  optional: true
2397
 
2398
+ '@esbuild/[email protected]':
2399
+ optional: true
2400
+
2401
  '@esbuild/[email protected]':
2402
  optional: true
2403
 
2404
+ '@esbuild/[email protected]':
2405
+ optional: true
2406
+
2407
  '@esbuild/[email protected]':
2408
  optional: true
2409
 
2410
+ '@esbuild/[email protected]':
2411
+ optional: true
2412
+
2413
  '@esbuild/[email protected]':
2414
  optional: true
2415
 
2416
+ '@esbuild/[email protected]':
2417
+ optional: true
2418
+
2419
  '@esbuild/[email protected]':
2420
  optional: true
2421
 
2422
+ '@esbuild/[email protected]':
2423
+ optional: true
2424
+
2425
  '@eslint-community/[email protected]([email protected])':
2426
  dependencies:
2427
  eslint: 8.57.1
 
2480
 
2481
  '@humanwhocodes/[email protected]': {}
2482
 
2483
+ '@iconify-json/[email protected]':
2484
+ dependencies:
2485
+ '@iconify/types': 2.0.0
2486
+
2487
+ '@iconify/[email protected]': {}
2488
+
2489
+ '@iconify/[email protected]':
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/[email protected]':
2503
  dependencies:
2504
  '@swc/helpers': 0.5.15
 
2637
  '@rollup/[email protected]':
2638
  optional: true
2639
 
2640
2641
+ dependencies:
2642
+ '@rollup/pluginutils': 5.1.4([email protected])
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/[email protected])([email protected])
2653
+ unplugin: 1.16.1
2654
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/[email protected]': {}
2671
+
2672
2673
  dependencies:
2674
 
2905
  json-schema-traverse: 0.4.1
2906
  uri-js: 4.4.1
2907
 
2908
2909
+ dependencies:
2910
+ type-fest: 0.21.3
2911
+
2912
2913
 
2914
 
2924
 
2925
2926
 
2927
2928
+
2929
2930
 
2931
2932
 
2933
2934
 
2935
2936
+
2937
2938
 
2939
2940
+ dependencies:
2941
+ buffer: 5.7.1
2942
+ inherits: 2.0.4
2943
+ readable-stream: 3.6.2
2944
+
2945
2946
  dependencies:
2947
  balanced-match: 1.0.2
 
2957
 
2958
2959
 
2960
2961
+ dependencies:
2962
+ base64-js: 1.5.1
2963
+ ieee754: 1.2.1
2964
+
2965
2966
 
2967
 
2969
  ansi-styles: 4.3.0
2970
  supports-color: 7.2.0
2971
 
2972
2973
+
2974
2975
  dependencies:
2976
  anymatch: 3.1.3
 
2983
  optionalDependencies:
2984
  fsevents: 2.3.3
2985
 
2986
2987
+ dependencies:
2988
+ restore-cursor: 3.1.0
2989
+
2990
2991
+
2992
2993
+
2994
2995
+
2996
2997
 
2998
 
3009
 
3010
3011
 
3012
3013
+
3014
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
3023
+
3024
3025
 
3026
3027
 
3028
3029
+
3030
3031
+
3032
3033
+
3034
3035
 
3036
3037
+
3038
3039
  dependencies:
3040
  path-key: 3.1.1
 
3056
 
3057
3058
 
3059
3060
+ dependencies:
3061
+ clone: 1.0.4
3062
+
3063
3064
+
3065
3066
 
3067
 
3070
 
3071
3072
 
3073
3074
+
3075
3076
  dependencies:
3077
  path-type: 4.0.0
 
3080
  dependencies:
3081
  esutils: 2.0.3
3082
 
3083
3084
+
3085
3086
+
3087
3088
  dependencies:
3089
  graceful-fs: 4.2.11
 
3117
  '@esbuild/win32-ia32': 0.21.5
3118
  '@esbuild/win32-x64': 0.21.5
3119
 
3120
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
3149
+
3150
3151
 
3152
 
3235
  acorn-jsx: 5.3.2([email protected])
3236
  eslint-visitor-keys: 3.4.3
3237
 
3238
3239
+
3240
3241
  dependencies:
3242
  estraverse: 5.3.0
 
3255
 
3256
3257
 
3258
3259
+
3260
3261
+ dependencies:
3262
+ chardet: 0.7.0
3263
+ iconv-lite: 0.4.24
3264
+ tmp: 0.0.33
3265
+
3266
3267
 
3268
 
3285
  optionalDependencies:
3286
  picomatch: 4.0.2
3287
 
3288
3289
+ dependencies:
3290
+ escape-string-regexp: 1.0.5
3291
+
3292
3293
  dependencies:
3294
  flat-cache: 3.2.0
 
3297
  dependencies:
3298
  to-regex-range: 5.0.1
3299
 
3300
3301
+ dependencies:
3302
+ common-path-prefix: 3.0.0
3303
+ pkg-dir: 7.0.0
3304
+
3305
3306
  dependencies:
3307
  locate-path: 6.0.0
3308
  path-exists: 4.0.0
3309
 
3310
3311
+ dependencies:
3312
+ locate-path: 7.2.0
3313
+ path-exists: 5.0.0
3314
+
3315
3316
  dependencies:
3317
  flatted: 3.3.3
 
3348
  once: 1.4.0
3349
  path-is-absolute: 1.0.1
3350
 
3351
3352
+ dependencies:
3353
+ ini: 4.1.3
3354
+ kind-of: 6.0.3
3355
+ which: 4.0.0
3356
+
3357
3358
  dependencies:
3359
  type-fest: 0.20.2
3360
 
3361
3362
+
3363
3364
  dependencies:
3365
  array-union: 2.1.0
 
3375
 
3376
3377
 
3378
3379
+
3380
3381
  dependencies:
3382
  function-bind: 1.1.2
3383
 
3384
3385
 
3386
3387
+ dependencies:
3388
+ safer-buffer: 2.1.2
3389
+
3390
3391
+
3392
3393
 
3394
 
3407
 
3408
3409
 
3410
3411
+
3412
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
3431
  dependencies:
3432
  binary-extensions: 2.3.0
 
3437
 
3438
3439
 
3440
3441
+
3442
3443
  dependencies:
3444
  is-extglob: 2.1.1
3445
 
3446
3447
+
3448
3449
 
3450
 
3459
  dependencies:
3460
  '@types/estree': 1.0.6
3461
 
3462
3463
+
3464
3465
 
3466
3467
+
3468
3469
 
3470
 
3481
  dependencies:
3482
  json-buffer: 3.0.1
3483
 
3484
3485
+
3486
3487
 
3488
3489
 
3490
3491
+
3492
3493
  dependencies:
3494
  prelude-ls: 1.2.1
 
3544
3545
  optional: true
3546
 
3547
3548
+ dependencies:
3549
+ mlly: 1.7.4
3550
+ pkg-types: 2.1.0
3551
+ quansync: 0.2.8
3552
+
3553
3554
 
3555
3556
  dependencies:
3557
  p-locate: 5.0.0
3558
 
3559
3560
+ dependencies:
3561
+ p-locate: 6.0.0
3562
+
3563
3564
 
3565
3566
+
3567
3568
+ dependencies:
3569
+ chalk: 4.1.2
3570
+ is-unicode-supported: 0.1.0
3571
+
3572
3573
  dependencies:
3574
  '@jridgewell/sourcemap-codec': 1.5.0
 
3582
  braces: 3.0.3
3583
  picomatch: 2.3.1
3584
 
3585
3586
+
3587
3588
 
3589
 
3600
  dependencies:
3601
  minimist: 1.2.8
3602
 
3603
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
3611
 
3612
3613
 
3614
3615
 
3616
3617
+
3618
3619
 
3620
 
3627
  dependencies:
3628
  wrappy: 1.0.2
3629
 
3630
3631
+ dependencies:
3632
+ mimic-fn: 2.1.0
3633
+
3634
3635
  dependencies:
3636
  deep-is: 0.1.4
 
3640
  type-check: 0.4.0
3641
  word-wrap: 1.2.5
3642
 
3643
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
3656
+
3657
3658
  dependencies:
3659
  yocto-queue: 0.1.0
3660
 
3661
3662
+ dependencies:
3663
+ yocto-queue: 1.2.0
3664
+
3665
3666
  dependencies:
3667
  p-limit: 3.1.0
3668
 
3669
3670
+ dependencies:
3671
+ p-limit: 4.0.0
3672
+
3673
3674
+ dependencies:
3675
+ quansync: 0.2.8
3676
+
3677
3678
  dependencies:
3679
  callsites: 3.1.0
3680
 
3681
3682
 
3683
3684
+
3685
3686
 
3687
 
3690
 
3691
3692
 
3693
3694
+
3695
3696
+
3697
3698
  dependencies:
3699
  '@types/estree': 1.0.6
 
3706
 
3707
3708
 
3709
3710
+ dependencies:
3711
+ find-up: 6.3.0
3712
+
3713
3714
+ dependencies:
3715
+ confbox: 0.1.8
3716
+ mlly: 1.7.4
3717
+ pathe: 2.0.3
3718
+
3719
3720
+ dependencies:
3721
+ confbox: 0.2.1
3722
+ exsolve: 1.0.4
3723
+ pathe: 2.0.3
3724
+
3725
3726
  dependencies:
3727
  lilconfig: 2.1.0
 
3773
 
3774
3775
 
3776
3777
+
3778
3779
 
3780
3781
+ dependencies:
3782
+ drange: 1.1.1
3783
+ ret: 0.2.2
3784
+
3785
3786
+ dependencies:
3787
+ inherits: 2.0.4
3788
+ string_decoder: 1.3.0
3789
+ util-deprecate: 1.0.2
3790
+
3791
3792
  dependencies:
3793
  picomatch: 2.3.1
3794
 
3795
3796
+
3797
3798
 
3799
 
3802
  path-parse: 1.0.7
3803
  supports-preserve-symlinks-flag: 1.0.0
3804
 
3805
3806
+ dependencies:
3807
+ onetime: 5.1.2
3808
+ signal-exit: 3.0.7
3809
+
3810
3811
+
3812
3813
 
3814
 
3844
  '@rollup/rollup-win32-x64-msvc': 4.34.9
3845
  fsevents: 2.3.3
3846
 
3847
3848
+
3849
3850
  dependencies:
3851
  queue-microtask: 1.2.3
3852
 
3853
3854
+ dependencies:
3855
+ tslib: 2.8.1
3856
+
3857
3858
  dependencies:
3859
  mri: 1.2.0
3860
 
3861
3862
+
3863
3864
+
3865
3866
  dependencies:
3867
  es6-promise: 3.3.1
 
3879
 
3880
3881
 
3882
3883
+
3884
3885
  dependencies:
3886
  '@polka/url': 1.0.0-next.28
 
3898
 
3899
3900
 
3901
3902
+ dependencies:
3903
+ emoji-regex: 8.0.0
3904
+ is-fullwidth-code-point: 3.0.0
3905
+ strip-ansi: 6.0.1
3906
+
3907
3908
+ dependencies:
3909
+ safe-buffer: 5.2.1
3910
+
3911
3912
  dependencies:
3913
  ansi-regex: 5.0.1
 
3998
 
3999
4000
 
4001
4002
+
4003
4004
+
4005
4006
+ dependencies:
4007
+ os-tmpdir: 1.0.2
4008
+
4009
4010
  dependencies:
4011
  is-number: 7.0.0
 
4016
  dependencies:
4017
  typescript: 5.8.2
4018
 
4019
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
4029
 
4030
 
4033
 
4034
4035
 
4036
4037
+
4038
4039
+
4040
4041
+
4042
4043
 
4044
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
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
4065
+
4066
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
4079
+ dependencies:
4080
+ acorn: 8.14.0
4081
+ webpack-virtual-modules: 0.6.2
4082
+
4083
4084
+ dependencies:
4085
+ acorn: 8.14.0
4086
+ webpack-virtual-modules: 0.6.2
4087
+
4088
4089
  dependencies:
4090
  punycode: 2.3.1
 
4100
  fsevents: 2.3.3
4101
  lightningcss: 1.29.1
4102
 
4103
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
4115
  optionalDependencies:
4116
  vite: 5.4.14([email protected])
4117
 
4118
4119
+ dependencies:
4120
+ defaults: 1.0.4
4121
+
4122
4123
+
4124
4125
  dependencies:
4126
  isexe: 2.0.0
4127
 
4128
4129
+ dependencies:
4130
+ isexe: 3.1.1
4131
+
4132
4133
 
4134
4135
+ dependencies:
4136
+ ansi-styles: 4.3.0
4137
+ string-width: 4.2.3
4138
+ strip-ansi: 6.0.1
4139
+
4140
4141
 
4142
 
4145
  optional: true
4146
 
4147
4148
+
4149
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
  });