GitHub Action commited on
Commit
3054a70
·
1 Parent(s): 93df20b

Sync from GitHub: da3b7690cc0258c8aac78e9996fafdbfcd359e27

Browse files
.gitattributes CHANGED
@@ -7,3 +7,9 @@
7
  *.mp4 filter=lfs diff=lfs merge=lfs -text
8
  *.webm filter=lfs diff=lfs merge=lfs -text
9
  *.pdf filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
7
  *.mp4 filter=lfs diff=lfs merge=lfs -text
8
  *.webm filter=lfs diff=lfs merge=lfs -text
9
  *.pdf filter=lfs diff=lfs merge=lfs -text
10
+ hfstudio/static/assets/hf-studio-logo.png filter=lfs diff=lfs merge=lfs -text
11
+ hfstudio/static/assets/hf-logo.png filter=lfs diff=lfs merge=lfs -text
12
+ frontend/static/assets/hf-studio-logo.png filter=lfs diff=lfs merge=lfs -text
13
+ frontend/static/assets/hf-logo.png filter=lfs diff=lfs merge=lfs -text
14
+ hfstudio/static/samples/harvard.wav filter=lfs diff=lfs merge=lfs -text
15
+ frontend/static/samples/harvard.wav filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -10,9 +10,6 @@ pinned: false
10
  hf_oauth: true
11
  hf_oauth_expiration_minutes: 43200
12
  hf_oauth_scopes:
13
- - read-repos
14
- - write-repos
15
- - manage-repos
16
  - inference-api
17
  ---
18
 
 
10
  hf_oauth: true
11
  hf_oauth_expiration_minutes: 43200
12
  hf_oauth_scopes:
 
 
 
13
  - inference-api
14
  ---
15
 
README_SPACE.md CHANGED
@@ -10,9 +10,6 @@ pinned: false
10
  hf_oauth: true
11
  hf_oauth_expiration_minutes: 43200
12
  hf_oauth_scopes:
13
- - read-repos
14
- - write-repos
15
- - manage-repos
16
  - inference-api
17
  ---
18
 
 
10
  hf_oauth: true
11
  hf_oauth_expiration_minutes: 43200
12
  hf_oauth_scopes:
 
 
 
13
  - inference-api
14
  ---
15
 
frontend/package-lock.json CHANGED
@@ -8,17 +8,8 @@
8
  "name": "hfstudio-frontend",
9
  "version": "0.1.2",
10
  "dependencies": {
11
- "@fortawesome/free-solid-svg-icons": "^6.5.1",
12
  "@sveltejs/adapter-static": "^3.0.10",
13
- "bits-ui": "^0.21.0",
14
- "clsx": "^2.0.0",
15
- "lucide-svelte": "^0.303.0",
16
- "mode-watcher": "^0.2.0",
17
- "prismjs": "^1.30.0",
18
- "svelte-sonner": "^0.3.19",
19
- "tailwind-merge": "^2.2.0",
20
- "tailwind-variants": "^0.1.19",
21
- "wavesurfer.js": "^7.6.0"
22
  },
23
  "devDependencies": {
24
  "@sveltejs/adapter-auto": "^3.0.0",
@@ -27,9 +18,7 @@
27
  "autoprefixer": "^10.4.16",
28
  "postcss": "^8.4.32",
29
  "svelte": "^4.2.7",
30
- "svelte-check": "^3.6.0",
31
  "tailwindcss": "^3.3.0",
32
- "typescript": "^5.0.0",
33
  "vite": "^5.0.3"
34
  }
35
  },
@@ -37,6 +26,7 @@
37
  "version": "5.2.0",
38
  "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
39
  "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
 
40
  "license": "MIT",
41
  "engines": {
42
  "node": ">=10"
@@ -426,65 +416,11 @@
426
  "node": ">=12"
427
  }
428
  },
429
- "node_modules/@floating-ui/core": {
430
- "version": "1.7.3",
431
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
432
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
433
- "license": "MIT",
434
- "dependencies": {
435
- "@floating-ui/utils": "^0.2.10"
436
- }
437
- },
438
- "node_modules/@floating-ui/dom": {
439
- "version": "1.7.4",
440
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
441
- "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
442
- "license": "MIT",
443
- "dependencies": {
444
- "@floating-ui/core": "^1.7.3",
445
- "@floating-ui/utils": "^0.2.10"
446
- }
447
- },
448
- "node_modules/@floating-ui/utils": {
449
- "version": "0.2.10",
450
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
451
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
452
- "license": "MIT"
453
- },
454
- "node_modules/@fortawesome/fontawesome-common-types": {
455
- "version": "6.7.2",
456
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz",
457
- "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==",
458
- "license": "MIT",
459
- "engines": {
460
- "node": ">=6"
461
- }
462
- },
463
- "node_modules/@fortawesome/free-solid-svg-icons": {
464
- "version": "6.7.2",
465
- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz",
466
- "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==",
467
- "license": "(CC-BY-4.0 AND MIT)",
468
- "dependencies": {
469
- "@fortawesome/fontawesome-common-types": "6.7.2"
470
- },
471
- "engines": {
472
- "node": ">=6"
473
- }
474
- },
475
- "node_modules/@internationalized/date": {
476
- "version": "3.10.0",
477
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.0.tgz",
478
- "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==",
479
- "license": "Apache-2.0",
480
- "dependencies": {
481
- "@swc/helpers": "^0.5.0"
482
- }
483
- },
484
  "node_modules/@isaacs/cliui": {
485
  "version": "8.0.2",
486
  "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
487
  "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
 
488
  "license": "ISC",
489
  "dependencies": {
490
  "string-width": "^5.1.2",
@@ -533,27 +469,11 @@
533
  "@jridgewell/sourcemap-codec": "^1.4.14"
534
  }
535
  },
536
- "node_modules/@melt-ui/svelte": {
537
- "version": "0.76.2",
538
- "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.76.2.tgz",
539
- "integrity": "sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==",
540
- "license": "MIT",
541
- "dependencies": {
542
- "@floating-ui/core": "^1.3.1",
543
- "@floating-ui/dom": "^1.4.5",
544
- "@internationalized/date": "^3.5.0",
545
- "dequal": "^2.0.3",
546
- "focus-trap": "^7.5.2",
547
- "nanoid": "^5.0.4"
548
- },
549
- "peerDependencies": {
550
- "svelte": ">=3 <5"
551
- }
552
- },
553
  "node_modules/@nodelib/fs.scandir": {
554
  "version": "2.1.5",
555
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
556
  "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
 
557
  "license": "MIT",
558
  "dependencies": {
559
  "@nodelib/fs.stat": "2.0.5",
@@ -567,6 +487,7 @@
567
  "version": "2.0.5",
568
  "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
569
  "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
 
570
  "license": "MIT",
571
  "engines": {
572
  "node": ">= 8"
@@ -576,6 +497,7 @@
576
  "version": "1.2.8",
577
  "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
578
  "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
 
579
  "license": "MIT",
580
  "dependencies": {
581
  "@nodelib/fs.scandir": "2.1.5",
@@ -589,6 +511,7 @@
589
  "version": "0.11.0",
590
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
591
  "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
 
592
  "license": "MIT",
593
  "optional": true,
594
  "engines": {
@@ -1001,15 +924,6 @@
1001
  "vite": "^5.0.0"
1002
  }
1003
  },
1004
- "node_modules/@swc/helpers": {
1005
- "version": "0.5.17",
1006
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
1007
- "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
1008
- "license": "Apache-2.0",
1009
- "dependencies": {
1010
- "tslib": "^2.8.0"
1011
- }
1012
- },
1013
  "node_modules/@types/cookie": {
1014
  "version": "0.6.0",
1015
  "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
@@ -1022,13 +936,6 @@
1022
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1023
  "license": "MIT"
1024
  },
1025
- "node_modules/@types/pug": {
1026
- "version": "2.0.10",
1027
- "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz",
1028
- "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==",
1029
- "dev": true,
1030
- "license": "MIT"
1031
- },
1032
  "node_modules/acorn": {
1033
  "version": "8.15.0",
1034
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
@@ -1045,6 +952,7 @@
1045
  "version": "6.2.2",
1046
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
1047
  "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
 
1048
  "license": "MIT",
1049
  "engines": {
1050
  "node": ">=12"
@@ -1057,6 +965,7 @@
1057
  "version": "6.2.3",
1058
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
1059
  "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
 
1060
  "license": "MIT",
1061
  "engines": {
1062
  "node": ">=12"
@@ -1069,12 +978,14 @@
1069
  "version": "1.3.0",
1070
  "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1071
  "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
 
1072
  "license": "MIT"
1073
  },
1074
  "node_modules/anymatch": {
1075
  "version": "3.1.3",
1076
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1077
  "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
 
1078
  "license": "ISC",
1079
  "dependencies": {
1080
  "normalize-path": "^3.0.0",
@@ -1088,6 +999,7 @@
1088
  "version": "5.0.2",
1089
  "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1090
  "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
 
1091
  "license": "MIT"
1092
  },
1093
  "node_modules/aria-query": {
@@ -1150,6 +1062,7 @@
1150
  "version": "1.0.2",
1151
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1152
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
 
1153
  "license": "MIT"
1154
  },
1155
  "node_modules/baseline-browser-mapping": {
@@ -1166,6 +1079,7 @@
1166
  "version": "2.3.0",
1167
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1168
  "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
 
1169
  "license": "MIT",
1170
  "engines": {
1171
  "node": ">=8"
@@ -1174,38 +1088,11 @@
1174
  "url": "https://github.com/sponsors/sindresorhus"
1175
  }
1176
  },
1177
- "node_modules/bits-ui": {
1178
- "version": "0.21.16",
1179
- "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.21.16.tgz",
1180
- "integrity": "sha512-XFZ7/bK7j/K+5iktxX/ZpmoFHjYjpPzP5EOO/4bWiaFg5TG1iMcfjDhlBTQnJxD6BoVoHuqeZPHZvaTgF4Iv3Q==",
1181
- "license": "MIT",
1182
- "dependencies": {
1183
- "@internationalized/date": "^3.5.1",
1184
- "@melt-ui/svelte": "0.76.2",
1185
- "nanoid": "^5.0.5"
1186
- },
1187
- "funding": {
1188
- "url": "https://github.com/sponsors/huntabyte"
1189
- },
1190
- "peerDependencies": {
1191
- "svelte": "^4.0.0 || ^5.0.0-next.118"
1192
- }
1193
- },
1194
- "node_modules/brace-expansion": {
1195
- "version": "1.1.12",
1196
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
1197
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
1198
- "dev": true,
1199
- "license": "MIT",
1200
- "dependencies": {
1201
- "balanced-match": "^1.0.0",
1202
- "concat-map": "0.0.1"
1203
- }
1204
- },
1205
  "node_modules/braces": {
1206
  "version": "3.0.3",
1207
  "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1208
  "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 
1209
  "license": "MIT",
1210
  "dependencies": {
1211
  "fill-range": "^7.1.1"
@@ -1248,20 +1135,11 @@
1248
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1249
  }
1250
  },
1251
- "node_modules/buffer-crc32": {
1252
- "version": "1.0.0",
1253
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
1254
- "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
1255
- "dev": true,
1256
- "license": "MIT",
1257
- "engines": {
1258
- "node": ">=8.0.0"
1259
- }
1260
- },
1261
  "node_modules/camelcase-css": {
1262
  "version": "2.0.1",
1263
  "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1264
  "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
 
1265
  "license": "MIT",
1266
  "engines": {
1267
  "node": ">= 6"
@@ -1292,6 +1170,7 @@
1292
  "version": "3.6.0",
1293
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1294
  "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
 
1295
  "license": "MIT",
1296
  "dependencies": {
1297
  "anymatch": "~3.1.2",
@@ -1312,15 +1191,6 @@
1312
  "fsevents": "~2.3.2"
1313
  }
1314
  },
1315
- "node_modules/clsx": {
1316
- "version": "2.1.1",
1317
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
1318
- "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
1319
- "license": "MIT",
1320
- "engines": {
1321
- "node": ">=6"
1322
- }
1323
- },
1324
  "node_modules/code-red": {
1325
  "version": "1.0.4",
1326
  "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
@@ -1338,6 +1208,7 @@
1338
  "version": "2.0.1",
1339
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1340
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 
1341
  "license": "MIT",
1342
  "dependencies": {
1343
  "color-name": "~1.1.4"
@@ -1350,24 +1221,19 @@
1350
  "version": "1.1.4",
1351
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1352
  "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 
1353
  "license": "MIT"
1354
  },
1355
  "node_modules/commander": {
1356
  "version": "4.1.1",
1357
  "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1358
  "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
 
1359
  "license": "MIT",
1360
  "engines": {
1361
  "node": ">= 6"
1362
  }
1363
  },
1364
- "node_modules/concat-map": {
1365
- "version": "0.0.1",
1366
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1367
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1368
- "dev": true,
1369
- "license": "MIT"
1370
- },
1371
  "node_modules/cookie": {
1372
  "version": "0.6.0",
1373
  "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
@@ -1381,6 +1247,7 @@
1381
  "version": "7.0.6",
1382
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1383
  "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
 
1384
  "license": "MIT",
1385
  "dependencies": {
1386
  "path-key": "^3.1.0",
@@ -1408,6 +1275,7 @@
1408
  "version": "3.0.0",
1409
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1410
  "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
 
1411
  "license": "MIT",
1412
  "bin": {
1413
  "cssesc": "bin/cssesc"
@@ -1442,25 +1310,6 @@
1442
  "node": ">=0.10.0"
1443
  }
1444
  },
1445
- "node_modules/dequal": {
1446
- "version": "2.0.3",
1447
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
1448
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
1449
- "license": "MIT",
1450
- "engines": {
1451
- "node": ">=6"
1452
- }
1453
- },
1454
- "node_modules/detect-indent": {
1455
- "version": "6.1.0",
1456
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
1457
- "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
1458
- "dev": true,
1459
- "license": "MIT",
1460
- "engines": {
1461
- "node": ">=8"
1462
- }
1463
- },
1464
  "node_modules/devalue": {
1465
  "version": "5.4.1",
1466
  "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.1.tgz",
@@ -1471,18 +1320,21 @@
1471
  "version": "1.2.2",
1472
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1473
  "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
 
1474
  "license": "Apache-2.0"
1475
  },
1476
  "node_modules/dlv": {
1477
  "version": "1.1.3",
1478
  "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1479
  "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
 
1480
  "license": "MIT"
1481
  },
1482
  "node_modules/eastasianwidth": {
1483
  "version": "0.2.0",
1484
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1485
  "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
 
1486
  "license": "MIT"
1487
  },
1488
  "node_modules/electron-to-chromium": {
@@ -1496,12 +1348,6 @@
1496
  "version": "9.2.2",
1497
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1498
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1499
- "license": "MIT"
1500
- },
1501
- "node_modules/es6-promise": {
1502
- "version": "3.3.1",
1503
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
1504
- "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
1505
  "dev": true,
1506
  "license": "MIT"
1507
  },
@@ -1572,6 +1418,7 @@
1572
  "version": "3.3.3",
1573
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1574
  "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
 
1575
  "license": "MIT",
1576
  "dependencies": {
1577
  "@nodelib/fs.stat": "^2.0.2",
@@ -1588,6 +1435,7 @@
1588
  "version": "1.19.1",
1589
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
1590
  "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
 
1591
  "license": "ISC",
1592
  "dependencies": {
1593
  "reusify": "^1.0.4"
@@ -1597,6 +1445,7 @@
1597
  "version": "7.1.1",
1598
  "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1599
  "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 
1600
  "license": "MIT",
1601
  "dependencies": {
1602
  "to-regex-range": "^5.0.1"
@@ -1605,19 +1454,11 @@
1605
  "node": ">=8"
1606
  }
1607
  },
1608
- "node_modules/focus-trap": {
1609
- "version": "7.6.5",
1610
- "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
1611
- "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
1612
- "license": "MIT",
1613
- "dependencies": {
1614
- "tabbable": "^6.2.0"
1615
- }
1616
- },
1617
  "node_modules/foreground-child": {
1618
  "version": "3.3.1",
1619
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
1620
  "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
 
1621
  "license": "ISC",
1622
  "dependencies": {
1623
  "cross-spawn": "^7.0.6",
@@ -1644,13 +1485,6 @@
1644
  "url": "https://github.com/sponsors/rawify"
1645
  }
1646
  },
1647
- "node_modules/fs.realpath": {
1648
- "version": "1.0.0",
1649
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1650
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1651
- "dev": true,
1652
- "license": "ISC"
1653
- },
1654
  "node_modules/fsevents": {
1655
  "version": "2.3.3",
1656
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -1669,37 +1503,17 @@
1669
  "version": "1.1.2",
1670
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1671
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 
1672
  "license": "MIT",
1673
  "funding": {
1674
  "url": "https://github.com/sponsors/ljharb"
1675
  }
1676
  },
1677
- "node_modules/glob": {
1678
- "version": "7.2.3",
1679
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
1680
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
1681
- "deprecated": "Glob versions prior to v9 are no longer supported",
1682
- "dev": true,
1683
- "license": "ISC",
1684
- "dependencies": {
1685
- "fs.realpath": "^1.0.0",
1686
- "inflight": "^1.0.4",
1687
- "inherits": "2",
1688
- "minimatch": "^3.1.1",
1689
- "once": "^1.3.0",
1690
- "path-is-absolute": "^1.0.0"
1691
- },
1692
- "engines": {
1693
- "node": "*"
1694
- },
1695
- "funding": {
1696
- "url": "https://github.com/sponsors/isaacs"
1697
- }
1698
- },
1699
  "node_modules/glob-parent": {
1700
  "version": "5.1.2",
1701
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1702
  "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 
1703
  "license": "ISC",
1704
  "dependencies": {
1705
  "is-glob": "^4.0.1"
@@ -1708,17 +1522,11 @@
1708
  "node": ">= 6"
1709
  }
1710
  },
1711
- "node_modules/graceful-fs": {
1712
- "version": "4.2.11",
1713
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1714
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1715
- "dev": true,
1716
- "license": "ISC"
1717
- },
1718
  "node_modules/hasown": {
1719
  "version": "2.0.2",
1720
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1721
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
 
1722
  "license": "MIT",
1723
  "dependencies": {
1724
  "function-bind": "^1.1.2"
@@ -1738,29 +1546,11 @@
1738
  "url": "https://github.com/sponsors/wooorm"
1739
  }
1740
  },
1741
- "node_modules/inflight": {
1742
- "version": "1.0.6",
1743
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1744
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1745
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
1746
- "dev": true,
1747
- "license": "ISC",
1748
- "dependencies": {
1749
- "once": "^1.3.0",
1750
- "wrappy": "1"
1751
- }
1752
- },
1753
- "node_modules/inherits": {
1754
- "version": "2.0.4",
1755
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1756
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1757
- "dev": true,
1758
- "license": "ISC"
1759
- },
1760
  "node_modules/is-binary-path": {
1761
  "version": "2.1.0",
1762
  "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1763
  "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
 
1764
  "license": "MIT",
1765
  "dependencies": {
1766
  "binary-extensions": "^2.0.0"
@@ -1773,6 +1563,7 @@
1773
  "version": "2.16.1",
1774
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
1775
  "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
 
1776
  "license": "MIT",
1777
  "dependencies": {
1778
  "hasown": "^2.0.2"
@@ -1788,6 +1579,7 @@
1788
  "version": "2.1.1",
1789
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1790
  "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
 
1791
  "license": "MIT",
1792
  "engines": {
1793
  "node": ">=0.10.0"
@@ -1797,6 +1589,7 @@
1797
  "version": "3.0.0",
1798
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1799
  "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
 
1800
  "license": "MIT",
1801
  "engines": {
1802
  "node": ">=8"
@@ -1806,6 +1599,7 @@
1806
  "version": "4.0.3",
1807
  "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1808
  "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
 
1809
  "license": "MIT",
1810
  "dependencies": {
1811
  "is-extglob": "^2.1.1"
@@ -1818,6 +1612,7 @@
1818
  "version": "7.0.0",
1819
  "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1820
  "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
 
1821
  "license": "MIT",
1822
  "engines": {
1823
  "node": ">=0.12.0"
@@ -1836,12 +1631,14 @@
1836
  "version": "2.0.0",
1837
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1838
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
 
1839
  "license": "ISC"
1840
  },
1841
  "node_modules/jackspeak": {
1842
  "version": "3.4.3",
1843
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1844
  "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
 
1845
  "license": "BlueOak-1.0.0",
1846
  "dependencies": {
1847
  "@isaacs/cliui": "^8.0.2"
@@ -1857,6 +1654,7 @@
1857
  "version": "1.21.7",
1858
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
1859
  "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
 
1860
  "license": "MIT",
1861
  "bin": {
1862
  "jiti": "bin/jiti.js"
@@ -1875,6 +1673,7 @@
1875
  "version": "3.1.3",
1876
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
1877
  "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
 
1878
  "license": "MIT",
1879
  "engines": {
1880
  "node": ">=14"
@@ -1887,6 +1686,7 @@
1887
  "version": "1.2.4",
1888
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1889
  "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
 
1890
  "license": "MIT"
1891
  },
1892
  "node_modules/locate-character": {
@@ -1899,6 +1699,7 @@
1899
  "version": "10.4.3",
1900
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1901
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
 
1902
  "license": "ISC"
1903
  },
1904
  "node_modules/lucide-svelte": {
@@ -1929,6 +1730,7 @@
1929
  "version": "1.4.1",
1930
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1931
  "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
 
1932
  "license": "MIT",
1933
  "engines": {
1934
  "node": ">= 8"
@@ -1938,6 +1740,7 @@
1938
  "version": "4.0.8",
1939
  "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1940
  "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 
1941
  "license": "MIT",
1942
  "dependencies": {
1943
  "braces": "^3.0.3",
@@ -1947,70 +1750,16 @@
1947
  "node": ">=8.6"
1948
  }
1949
  },
1950
- "node_modules/min-indent": {
1951
- "version": "1.0.1",
1952
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
1953
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
1954
- "dev": true,
1955
- "license": "MIT",
1956
- "engines": {
1957
- "node": ">=4"
1958
- }
1959
- },
1960
- "node_modules/minimatch": {
1961
- "version": "3.1.2",
1962
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1963
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1964
- "dev": true,
1965
- "license": "ISC",
1966
- "dependencies": {
1967
- "brace-expansion": "^1.1.7"
1968
- },
1969
- "engines": {
1970
- "node": "*"
1971
- }
1972
- },
1973
- "node_modules/minimist": {
1974
- "version": "1.2.8",
1975
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1976
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1977
- "dev": true,
1978
- "license": "MIT",
1979
- "funding": {
1980
- "url": "https://github.com/sponsors/ljharb"
1981
- }
1982
- },
1983
  "node_modules/minipass": {
1984
  "version": "7.1.2",
1985
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1986
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
 
1987
  "license": "ISC",
1988
  "engines": {
1989
  "node": ">=16 || 14 >=14.17"
1990
  }
1991
  },
1992
- "node_modules/mkdirp": {
1993
- "version": "0.5.6",
1994
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
1995
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
1996
- "dev": true,
1997
- "license": "MIT",
1998
- "dependencies": {
1999
- "minimist": "^1.2.6"
2000
- },
2001
- "bin": {
2002
- "mkdirp": "bin/cmd.js"
2003
- }
2004
- },
2005
- "node_modules/mode-watcher": {
2006
- "version": "0.2.2",
2007
- "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.2.2.tgz",
2008
- "integrity": "sha512-QjkHQL9pXrr7Vb0P3WbOWAF8mv1Q6jEwUZ5GUyCnI9eEoXH234zuaOGChUF7ZQtjxwtmXDzKFSW/36TvLDg1/A==",
2009
- "license": "MIT",
2010
- "peerDependencies": {
2011
- "svelte": "^4.0.0"
2012
- }
2013
- },
2014
  "node_modules/mri": {
2015
  "version": "1.2.0",
2016
  "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
@@ -2039,6 +1788,7 @@
2039
  "version": "2.7.0",
2040
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
2041
  "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
 
2042
  "license": "MIT",
2043
  "dependencies": {
2044
  "any-promise": "^1.0.0",
@@ -2046,24 +1796,6 @@
2046
  "thenify-all": "^1.0.0"
2047
  }
2048
  },
2049
- "node_modules/nanoid": {
2050
- "version": "5.1.6",
2051
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz",
2052
- "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
2053
- "funding": [
2054
- {
2055
- "type": "github",
2056
- "url": "https://github.com/sponsors/ai"
2057
- }
2058
- ],
2059
- "license": "MIT",
2060
- "bin": {
2061
- "nanoid": "bin/nanoid.js"
2062
- },
2063
- "engines": {
2064
- "node": "^18 || >=20"
2065
- }
2066
- },
2067
  "node_modules/node-releases": {
2068
  "version": "2.0.25",
2069
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz",
@@ -2075,6 +1807,7 @@
2075
  "version": "3.0.0",
2076
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2077
  "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 
2078
  "license": "MIT",
2079
  "engines": {
2080
  "node": ">=0.10.0"
@@ -2094,6 +1827,7 @@
2094
  "version": "4.1.1",
2095
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2096
  "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
 
2097
  "license": "MIT",
2098
  "engines": {
2099
  "node": ">=0.10.0"
@@ -2103,41 +1837,24 @@
2103
  "version": "3.0.0",
2104
  "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
2105
  "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
 
2106
  "license": "MIT",
2107
  "engines": {
2108
  "node": ">= 6"
2109
  }
2110
  },
2111
- "node_modules/once": {
2112
- "version": "1.4.0",
2113
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2114
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
2115
- "dev": true,
2116
- "license": "ISC",
2117
- "dependencies": {
2118
- "wrappy": "1"
2119
- }
2120
- },
2121
  "node_modules/package-json-from-dist": {
2122
  "version": "1.0.1",
2123
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
2124
  "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
2125
- "license": "BlueOak-1.0.0"
2126
- },
2127
- "node_modules/path-is-absolute": {
2128
- "version": "1.0.1",
2129
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2130
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
2131
  "dev": true,
2132
- "license": "MIT",
2133
- "engines": {
2134
- "node": ">=0.10.0"
2135
- }
2136
  },
2137
  "node_modules/path-key": {
2138
  "version": "3.1.1",
2139
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2140
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 
2141
  "license": "MIT",
2142
  "engines": {
2143
  "node": ">=8"
@@ -2147,12 +1864,14 @@
2147
  "version": "1.0.7",
2148
  "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2149
  "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 
2150
  "license": "MIT"
2151
  },
2152
  "node_modules/path-scurry": {
2153
  "version": "1.11.1",
2154
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
2155
  "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
 
2156
  "license": "BlueOak-1.0.0",
2157
  "dependencies": {
2158
  "lru-cache": "^10.2.0",
@@ -2186,6 +1905,7 @@
2186
  "version": "2.3.1",
2187
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2188
  "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
 
2189
  "license": "MIT",
2190
  "engines": {
2191
  "node": ">=8.6"
@@ -2198,6 +1918,7 @@
2198
  "version": "2.3.0",
2199
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2200
  "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
 
2201
  "license": "MIT",
2202
  "engines": {
2203
  "node": ">=0.10.0"
@@ -2207,6 +1928,7 @@
2207
  "version": "4.0.7",
2208
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
2209
  "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
 
2210
  "license": "MIT",
2211
  "engines": {
2212
  "node": ">= 6"
@@ -2244,6 +1966,7 @@
2244
  "version": "15.1.0",
2245
  "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
2246
  "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
 
2247
  "license": "MIT",
2248
  "dependencies": {
2249
  "postcss-value-parser": "^4.0.0",
@@ -2261,6 +1984,7 @@
2261
  "version": "4.1.0",
2262
  "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
2263
  "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
 
2264
  "funding": [
2265
  {
2266
  "type": "opencollective",
@@ -2286,6 +2010,7 @@
2286
  "version": "5.1.0",
2287
  "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz",
2288
  "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==",
 
2289
  "funding": [
2290
  {
2291
  "type": "opencollective",
@@ -2325,6 +2050,7 @@
2325
  "version": "6.2.0",
2326
  "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
2327
  "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
 
2328
  "funding": [
2329
  {
2330
  "type": "opencollective",
@@ -2350,6 +2076,7 @@
2350
  "version": "6.1.2",
2351
  "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
2352
  "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
 
2353
  "license": "MIT",
2354
  "dependencies": {
2355
  "cssesc": "^3.0.0",
@@ -2363,6 +2090,7 @@
2363
  "version": "4.2.0",
2364
  "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2365
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
 
2366
  "license": "MIT"
2367
  },
2368
  "node_modules/postcss/node_modules/nanoid": {
@@ -2383,19 +2111,11 @@
2383
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2384
  }
2385
  },
2386
- "node_modules/prismjs": {
2387
- "version": "1.30.0",
2388
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
2389
- "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
2390
- "license": "MIT",
2391
- "engines": {
2392
- "node": ">=6"
2393
- }
2394
- },
2395
  "node_modules/queue-microtask": {
2396
  "version": "1.2.3",
2397
  "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2398
  "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
 
2399
  "funding": [
2400
  {
2401
  "type": "github",
@@ -2416,6 +2136,7 @@
2416
  "version": "1.0.0",
2417
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2418
  "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
 
2419
  "license": "MIT",
2420
  "dependencies": {
2421
  "pify": "^2.3.0"
@@ -2425,6 +2146,7 @@
2425
  "version": "3.6.0",
2426
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2427
  "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
 
2428
  "license": "MIT",
2429
  "dependencies": {
2430
  "picomatch": "^2.2.1"
@@ -2437,6 +2159,7 @@
2437
  "version": "1.22.10",
2438
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
2439
  "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
 
2440
  "license": "MIT",
2441
  "dependencies": {
2442
  "is-core-module": "^2.16.0",
@@ -2457,26 +2180,13 @@
2457
  "version": "1.1.0",
2458
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
2459
  "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
 
2460
  "license": "MIT",
2461
  "engines": {
2462
  "iojs": ">=1.0.0",
2463
  "node": ">=0.10.0"
2464
  }
2465
  },
2466
- "node_modules/rimraf": {
2467
- "version": "2.7.1",
2468
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
2469
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
2470
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
2471
- "dev": true,
2472
- "license": "ISC",
2473
- "dependencies": {
2474
- "glob": "^7.1.3"
2475
- },
2476
- "bin": {
2477
- "rimraf": "bin.js"
2478
- }
2479
- },
2480
  "node_modules/rollup": {
2481
  "version": "4.52.4",
2482
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
@@ -2522,6 +2232,7 @@
2522
  "version": "1.2.0",
2523
  "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2524
  "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
 
2525
  "funding": [
2526
  {
2527
  "type": "github",
@@ -2553,19 +2264,6 @@
2553
  "node": ">=6"
2554
  }
2555
  },
2556
- "node_modules/sander": {
2557
- "version": "0.5.1",
2558
- "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz",
2559
- "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
2560
- "dev": true,
2561
- "license": "MIT",
2562
- "dependencies": {
2563
- "es6-promise": "^3.1.2",
2564
- "graceful-fs": "^4.1.3",
2565
- "mkdirp": "^0.5.1",
2566
- "rimraf": "^2.5.2"
2567
- }
2568
- },
2569
  "node_modules/set-cookie-parser": {
2570
  "version": "2.7.1",
2571
  "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
@@ -2576,6 +2274,7 @@
2576
  "version": "2.0.0",
2577
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2578
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
 
2579
  "license": "MIT",
2580
  "dependencies": {
2581
  "shebang-regex": "^3.0.0"
@@ -2588,6 +2287,7 @@
2588
  "version": "3.0.0",
2589
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2590
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 
2591
  "license": "MIT",
2592
  "engines": {
2593
  "node": ">=8"
@@ -2597,6 +2297,7 @@
2597
  "version": "4.1.0",
2598
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2599
  "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
 
2600
  "license": "ISC",
2601
  "engines": {
2602
  "node": ">=14"
@@ -2619,22 +2320,6 @@
2619
  "node": ">=18"
2620
  }
2621
  },
2622
- "node_modules/sorcery": {
2623
- "version": "0.11.1",
2624
- "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.1.tgz",
2625
- "integrity": "sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==",
2626
- "dev": true,
2627
- "license": "MIT",
2628
- "dependencies": {
2629
- "@jridgewell/sourcemap-codec": "^1.4.14",
2630
- "buffer-crc32": "^1.0.0",
2631
- "minimist": "^1.2.0",
2632
- "sander": "^0.5.0"
2633
- },
2634
- "bin": {
2635
- "sorcery": "bin/sorcery"
2636
- }
2637
- },
2638
  "node_modules/source-map-js": {
2639
  "version": "1.2.1",
2640
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -2648,6 +2333,7 @@
2648
  "version": "5.1.2",
2649
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2650
  "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
 
2651
  "license": "MIT",
2652
  "dependencies": {
2653
  "eastasianwidth": "^0.2.0",
@@ -2666,6 +2352,7 @@
2666
  "version": "4.2.3",
2667
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2668
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
 
2669
  "license": "MIT",
2670
  "dependencies": {
2671
  "emoji-regex": "^8.0.0",
@@ -2680,6 +2367,7 @@
2680
  "version": "5.0.1",
2681
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2682
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 
2683
  "license": "MIT",
2684
  "engines": {
2685
  "node": ">=8"
@@ -2689,12 +2377,14 @@
2689
  "version": "8.0.0",
2690
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2691
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
 
2692
  "license": "MIT"
2693
  },
2694
  "node_modules/string-width-cjs/node_modules/strip-ansi": {
2695
  "version": "6.0.1",
2696
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2697
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 
2698
  "license": "MIT",
2699
  "dependencies": {
2700
  "ansi-regex": "^5.0.1"
@@ -2707,6 +2397,7 @@
2707
  "version": "7.1.2",
2708
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
2709
  "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
 
2710
  "license": "MIT",
2711
  "dependencies": {
2712
  "ansi-regex": "^6.0.1"
@@ -2723,6 +2414,7 @@
2723
  "version": "6.0.1",
2724
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2725
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 
2726
  "license": "MIT",
2727
  "dependencies": {
2728
  "ansi-regex": "^5.0.1"
@@ -2735,20 +2427,8 @@
2735
  "version": "5.0.1",
2736
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2737
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2738
- "license": "MIT",
2739
- "engines": {
2740
- "node": ">=8"
2741
- }
2742
- },
2743
- "node_modules/strip-indent": {
2744
- "version": "3.0.0",
2745
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
2746
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
2747
  "dev": true,
2748
  "license": "MIT",
2749
- "dependencies": {
2750
- "min-indent": "^1.0.0"
2751
- },
2752
  "engines": {
2753
  "node": ">=8"
2754
  }
@@ -2757,6 +2437,7 @@
2757
  "version": "3.35.0",
2758
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
2759
  "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
 
2760
  "license": "MIT",
2761
  "dependencies": {
2762
  "@jridgewell/gen-mapping": "^0.3.2",
@@ -2779,6 +2460,7 @@
2779
  "version": "2.0.2",
2780
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
2781
  "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
 
2782
  "license": "MIT",
2783
  "dependencies": {
2784
  "balanced-match": "^1.0.0"
@@ -2788,6 +2470,7 @@
2788
  "version": "10.4.5",
2789
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
2790
  "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
 
2791
  "license": "ISC",
2792
  "dependencies": {
2793
  "foreground-child": "^3.1.0",
@@ -2808,6 +2491,7 @@
2808
  "version": "9.0.5",
2809
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2810
  "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 
2811
  "license": "ISC",
2812
  "dependencies": {
2813
  "brace-expansion": "^2.0.1"
@@ -2823,6 +2507,7 @@
2823
  "version": "1.0.0",
2824
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2825
  "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 
2826
  "license": "MIT",
2827
  "engines": {
2828
  "node": ">= 0.4"
@@ -2856,27 +2541,6 @@
2856
  "node": ">=16"
2857
  }
2858
  },
2859
- "node_modules/svelte-check": {
2860
- "version": "3.8.6",
2861
- "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.8.6.tgz",
2862
- "integrity": "sha512-ij0u4Lw/sOTREP13BdWZjiXD/BlHE6/e2e34XzmVmsp5IN4kVa3PWP65NM32JAgwjZlwBg/+JtiNV1MM8khu0Q==",
2863
- "dev": true,
2864
- "license": "MIT",
2865
- "dependencies": {
2866
- "@jridgewell/trace-mapping": "^0.3.17",
2867
- "chokidar": "^3.4.1",
2868
- "picocolors": "^1.0.0",
2869
- "sade": "^1.7.4",
2870
- "svelte-preprocess": "^5.1.3",
2871
- "typescript": "^5.0.3"
2872
- },
2873
- "bin": {
2874
- "svelte-check": "bin/svelte-check"
2875
- },
2876
- "peerDependencies": {
2877
- "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0"
2878
- }
2879
- },
2880
  "node_modules/svelte-hmr": {
2881
  "version": "0.16.0",
2882
  "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz",
@@ -2889,124 +2553,11 @@
2889
  "svelte": "^3.19.0 || ^4.0.0"
2890
  }
2891
  },
2892
- "node_modules/svelte-preprocess": {
2893
- "version": "5.1.4",
2894
- "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz",
2895
- "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==",
2896
- "dev": true,
2897
- "hasInstallScript": true,
2898
- "license": "MIT",
2899
- "dependencies": {
2900
- "@types/pug": "^2.0.6",
2901
- "detect-indent": "^6.1.0",
2902
- "magic-string": "^0.30.5",
2903
- "sorcery": "^0.11.0",
2904
- "strip-indent": "^3.0.0"
2905
- },
2906
- "engines": {
2907
- "node": ">= 16.0.0"
2908
- },
2909
- "peerDependencies": {
2910
- "@babel/core": "^7.10.2",
2911
- "coffeescript": "^2.5.1",
2912
- "less": "^3.11.3 || ^4.0.0",
2913
- "postcss": "^7 || ^8",
2914
- "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0",
2915
- "pug": "^3.0.0",
2916
- "sass": "^1.26.8",
2917
- "stylus": "^0.55.0",
2918
- "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0",
2919
- "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0",
2920
- "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0"
2921
- },
2922
- "peerDependenciesMeta": {
2923
- "@babel/core": {
2924
- "optional": true
2925
- },
2926
- "coffeescript": {
2927
- "optional": true
2928
- },
2929
- "less": {
2930
- "optional": true
2931
- },
2932
- "postcss": {
2933
- "optional": true
2934
- },
2935
- "postcss-load-config": {
2936
- "optional": true
2937
- },
2938
- "pug": {
2939
- "optional": true
2940
- },
2941
- "sass": {
2942
- "optional": true
2943
- },
2944
- "stylus": {
2945
- "optional": true
2946
- },
2947
- "sugarss": {
2948
- "optional": true
2949
- },
2950
- "typescript": {
2951
- "optional": true
2952
- }
2953
- }
2954
- },
2955
- "node_modules/svelte-sonner": {
2956
- "version": "0.3.28",
2957
- "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.28.tgz",
2958
- "integrity": "sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==",
2959
- "license": "MIT",
2960
- "peerDependencies": {
2961
- "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.1"
2962
- }
2963
- },
2964
- "node_modules/tabbable": {
2965
- "version": "6.2.0",
2966
- "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
2967
- "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
2968
- "license": "MIT"
2969
- },
2970
- "node_modules/tailwind-merge": {
2971
- "version": "2.6.0",
2972
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
2973
- "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
2974
- "license": "MIT",
2975
- "funding": {
2976
- "type": "github",
2977
- "url": "https://github.com/sponsors/dcastil"
2978
- }
2979
- },
2980
- "node_modules/tailwind-variants": {
2981
- "version": "0.1.20",
2982
- "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.20.tgz",
2983
- "integrity": "sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==",
2984
- "license": "MIT",
2985
- "dependencies": {
2986
- "tailwind-merge": "^1.14.0"
2987
- },
2988
- "engines": {
2989
- "node": ">=16.x",
2990
- "pnpm": ">=7.x"
2991
- },
2992
- "peerDependencies": {
2993
- "tailwindcss": "*"
2994
- }
2995
- },
2996
- "node_modules/tailwind-variants/node_modules/tailwind-merge": {
2997
- "version": "1.14.0",
2998
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
2999
- "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==",
3000
- "license": "MIT",
3001
- "funding": {
3002
- "type": "github",
3003
- "url": "https://github.com/sponsors/dcastil"
3004
- }
3005
- },
3006
  "node_modules/tailwindcss": {
3007
  "version": "3.4.18",
3008
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
3009
  "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
 
3010
  "license": "MIT",
3011
  "dependencies": {
3012
  "@alloc/quick-lru": "^5.2.0",
@@ -3044,6 +2595,7 @@
3044
  "version": "6.0.2",
3045
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
3046
  "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
 
3047
  "license": "ISC",
3048
  "dependencies": {
3049
  "is-glob": "^4.0.3"
@@ -3056,6 +2608,7 @@
3056
  "version": "3.3.1",
3057
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
3058
  "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
 
3059
  "license": "MIT",
3060
  "dependencies": {
3061
  "any-promise": "^1.0.0"
@@ -3065,6 +2618,7 @@
3065
  "version": "1.6.0",
3066
  "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
3067
  "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
 
3068
  "license": "MIT",
3069
  "dependencies": {
3070
  "thenify": ">= 3.1.0 < 4"
@@ -3077,6 +2631,7 @@
3077
  "version": "5.0.1",
3078
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3079
  "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
 
3080
  "license": "MIT",
3081
  "dependencies": {
3082
  "is-number": "^7.0.0"
@@ -3098,27 +2653,8 @@
3098
  "version": "0.1.13",
3099
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
3100
  "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
3101
- "license": "Apache-2.0"
3102
- },
3103
- "node_modules/tslib": {
3104
- "version": "2.8.1",
3105
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
3106
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
3107
- "license": "0BSD"
3108
- },
3109
- "node_modules/typescript": {
3110
- "version": "5.9.3",
3111
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
3112
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
3113
  "dev": true,
3114
- "license": "Apache-2.0",
3115
- "bin": {
3116
- "tsc": "bin/tsc",
3117
- "tsserver": "bin/tsserver"
3118
- },
3119
- "engines": {
3120
- "node": ">=14.17"
3121
- }
3122
  },
3123
  "node_modules/update-browserslist-db": {
3124
  "version": "1.1.3",
@@ -3155,6 +2691,7 @@
3155
  "version": "1.0.2",
3156
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3157
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
 
3158
  "license": "MIT"
3159
  },
3160
  "node_modules/vite": {
@@ -3230,16 +2767,11 @@
3230
  }
3231
  }
3232
  },
3233
- "node_modules/wavesurfer.js": {
3234
- "version": "7.11.0",
3235
- "resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-7.11.0.tgz",
3236
- "integrity": "sha512-LOGdIBIKv/roYuQYClhoqhwbIdQL1GfobLnS2vx0heoLD9lu57OUHWE2DIsCNXBvCsmmbkUvJq9W8bPLPbikGw==",
3237
- "license": "BSD-3-Clause"
3238
- },
3239
  "node_modules/which": {
3240
  "version": "2.0.2",
3241
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3242
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
 
3243
  "license": "ISC",
3244
  "dependencies": {
3245
  "isexe": "^2.0.0"
@@ -3255,6 +2787,7 @@
3255
  "version": "8.1.0",
3256
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
3257
  "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
 
3258
  "license": "MIT",
3259
  "dependencies": {
3260
  "ansi-styles": "^6.1.0",
@@ -3273,6 +2806,7 @@
3273
  "version": "7.0.0",
3274
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3275
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
 
3276
  "license": "MIT",
3277
  "dependencies": {
3278
  "ansi-styles": "^4.0.0",
@@ -3290,6 +2824,7 @@
3290
  "version": "5.0.1",
3291
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
3292
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 
3293
  "license": "MIT",
3294
  "engines": {
3295
  "node": ">=8"
@@ -3299,6 +2834,7 @@
3299
  "version": "4.3.0",
3300
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3301
  "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 
3302
  "license": "MIT",
3303
  "dependencies": {
3304
  "color-convert": "^2.0.1"
@@ -3314,12 +2850,14 @@
3314
  "version": "8.0.0",
3315
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3316
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
 
3317
  "license": "MIT"
3318
  },
3319
  "node_modules/wrap-ansi-cjs/node_modules/string-width": {
3320
  "version": "4.2.3",
3321
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3322
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
 
3323
  "license": "MIT",
3324
  "dependencies": {
3325
  "emoji-regex": "^8.0.0",
@@ -3334,6 +2872,7 @@
3334
  "version": "6.0.1",
3335
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3336
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 
3337
  "license": "MIT",
3338
  "dependencies": {
3339
  "ansi-regex": "^5.0.1"
@@ -3342,17 +2881,11 @@
3342
  "node": ">=8"
3343
  }
3344
  },
3345
- "node_modules/wrappy": {
3346
- "version": "1.0.2",
3347
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3348
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
3349
- "dev": true,
3350
- "license": "ISC"
3351
- },
3352
  "node_modules/yaml": {
3353
  "version": "2.8.1",
3354
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
3355
  "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
 
3356
  "license": "ISC",
3357
  "bin": {
3358
  "yaml": "bin.mjs"
 
8
  "name": "hfstudio-frontend",
9
  "version": "0.1.2",
10
  "dependencies": {
 
11
  "@sveltejs/adapter-static": "^3.0.10",
12
+ "lucide-svelte": "^0.303.0"
 
 
 
 
 
 
 
 
13
  },
14
  "devDependencies": {
15
  "@sveltejs/adapter-auto": "^3.0.0",
 
18
  "autoprefixer": "^10.4.16",
19
  "postcss": "^8.4.32",
20
  "svelte": "^4.2.7",
 
21
  "tailwindcss": "^3.3.0",
 
22
  "vite": "^5.0.3"
23
  }
24
  },
 
26
  "version": "5.2.0",
27
  "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
28
  "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
29
+ "dev": true,
30
  "license": "MIT",
31
  "engines": {
32
  "node": ">=10"
 
416
  "node": ">=12"
417
  }
418
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
  "node_modules/@isaacs/cliui": {
420
  "version": "8.0.2",
421
  "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
422
  "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
423
+ "dev": true,
424
  "license": "ISC",
425
  "dependencies": {
426
  "string-width": "^5.1.2",
 
469
  "@jridgewell/sourcemap-codec": "^1.4.14"
470
  }
471
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
  "node_modules/@nodelib/fs.scandir": {
473
  "version": "2.1.5",
474
  "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
475
  "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
476
+ "dev": true,
477
  "license": "MIT",
478
  "dependencies": {
479
  "@nodelib/fs.stat": "2.0.5",
 
487
  "version": "2.0.5",
488
  "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
489
  "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
490
+ "dev": true,
491
  "license": "MIT",
492
  "engines": {
493
  "node": ">= 8"
 
497
  "version": "1.2.8",
498
  "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
499
  "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
500
+ "dev": true,
501
  "license": "MIT",
502
  "dependencies": {
503
  "@nodelib/fs.scandir": "2.1.5",
 
511
  "version": "0.11.0",
512
  "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
513
  "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
514
+ "dev": true,
515
  "license": "MIT",
516
  "optional": true,
517
  "engines": {
 
924
  "vite": "^5.0.0"
925
  }
926
  },
 
 
 
 
 
 
 
 
 
927
  "node_modules/@types/cookie": {
928
  "version": "0.6.0",
929
  "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
 
936
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
937
  "license": "MIT"
938
  },
 
 
 
 
 
 
 
939
  "node_modules/acorn": {
940
  "version": "8.15.0",
941
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
 
952
  "version": "6.2.2",
953
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
954
  "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
955
+ "dev": true,
956
  "license": "MIT",
957
  "engines": {
958
  "node": ">=12"
 
965
  "version": "6.2.3",
966
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
967
  "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
968
+ "dev": true,
969
  "license": "MIT",
970
  "engines": {
971
  "node": ">=12"
 
978
  "version": "1.3.0",
979
  "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
980
  "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
981
+ "dev": true,
982
  "license": "MIT"
983
  },
984
  "node_modules/anymatch": {
985
  "version": "3.1.3",
986
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
987
  "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
988
+ "dev": true,
989
  "license": "ISC",
990
  "dependencies": {
991
  "normalize-path": "^3.0.0",
 
999
  "version": "5.0.2",
1000
  "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1001
  "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1002
+ "dev": true,
1003
  "license": "MIT"
1004
  },
1005
  "node_modules/aria-query": {
 
1062
  "version": "1.0.2",
1063
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1064
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1065
+ "dev": true,
1066
  "license": "MIT"
1067
  },
1068
  "node_modules/baseline-browser-mapping": {
 
1079
  "version": "2.3.0",
1080
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1081
  "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1082
+ "dev": true,
1083
  "license": "MIT",
1084
  "engines": {
1085
  "node": ">=8"
 
1088
  "url": "https://github.com/sponsors/sindresorhus"
1089
  }
1090
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1091
  "node_modules/braces": {
1092
  "version": "3.0.3",
1093
  "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1094
  "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1095
+ "dev": true,
1096
  "license": "MIT",
1097
  "dependencies": {
1098
  "fill-range": "^7.1.1"
 
1135
  "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1136
  }
1137
  },
 
 
 
 
 
 
 
 
 
 
1138
  "node_modules/camelcase-css": {
1139
  "version": "2.0.1",
1140
  "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1141
  "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1142
+ "dev": true,
1143
  "license": "MIT",
1144
  "engines": {
1145
  "node": ">= 6"
 
1170
  "version": "3.6.0",
1171
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1172
  "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1173
+ "dev": true,
1174
  "license": "MIT",
1175
  "dependencies": {
1176
  "anymatch": "~3.1.2",
 
1191
  "fsevents": "~2.3.2"
1192
  }
1193
  },
 
 
 
 
 
 
 
 
 
1194
  "node_modules/code-red": {
1195
  "version": "1.0.4",
1196
  "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
 
1208
  "version": "2.0.1",
1209
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1210
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1211
+ "dev": true,
1212
  "license": "MIT",
1213
  "dependencies": {
1214
  "color-name": "~1.1.4"
 
1221
  "version": "1.1.4",
1222
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1223
  "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1224
+ "dev": true,
1225
  "license": "MIT"
1226
  },
1227
  "node_modules/commander": {
1228
  "version": "4.1.1",
1229
  "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1230
  "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1231
+ "dev": true,
1232
  "license": "MIT",
1233
  "engines": {
1234
  "node": ">= 6"
1235
  }
1236
  },
 
 
 
 
 
 
 
1237
  "node_modules/cookie": {
1238
  "version": "0.6.0",
1239
  "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
 
1247
  "version": "7.0.6",
1248
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1249
  "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1250
+ "dev": true,
1251
  "license": "MIT",
1252
  "dependencies": {
1253
  "path-key": "^3.1.0",
 
1275
  "version": "3.0.0",
1276
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1277
  "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1278
+ "dev": true,
1279
  "license": "MIT",
1280
  "bin": {
1281
  "cssesc": "bin/cssesc"
 
1310
  "node": ">=0.10.0"
1311
  }
1312
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1313
  "node_modules/devalue": {
1314
  "version": "5.4.1",
1315
  "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.1.tgz",
 
1320
  "version": "1.2.2",
1321
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1322
  "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1323
+ "dev": true,
1324
  "license": "Apache-2.0"
1325
  },
1326
  "node_modules/dlv": {
1327
  "version": "1.1.3",
1328
  "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1329
  "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1330
+ "dev": true,
1331
  "license": "MIT"
1332
  },
1333
  "node_modules/eastasianwidth": {
1334
  "version": "0.2.0",
1335
  "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1336
  "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
1337
+ "dev": true,
1338
  "license": "MIT"
1339
  },
1340
  "node_modules/electron-to-chromium": {
 
1348
  "version": "9.2.2",
1349
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1350
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
 
 
 
 
 
 
1351
  "dev": true,
1352
  "license": "MIT"
1353
  },
 
1418
  "version": "3.3.3",
1419
  "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1420
  "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
1421
+ "dev": true,
1422
  "license": "MIT",
1423
  "dependencies": {
1424
  "@nodelib/fs.stat": "^2.0.2",
 
1435
  "version": "1.19.1",
1436
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
1437
  "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
1438
+ "dev": true,
1439
  "license": "ISC",
1440
  "dependencies": {
1441
  "reusify": "^1.0.4"
 
1445
  "version": "7.1.1",
1446
  "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1447
  "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1448
+ "dev": true,
1449
  "license": "MIT",
1450
  "dependencies": {
1451
  "to-regex-range": "^5.0.1"
 
1454
  "node": ">=8"
1455
  }
1456
  },
 
 
 
 
 
 
 
 
 
1457
  "node_modules/foreground-child": {
1458
  "version": "3.3.1",
1459
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
1460
  "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
1461
+ "dev": true,
1462
  "license": "ISC",
1463
  "dependencies": {
1464
  "cross-spawn": "^7.0.6",
 
1485
  "url": "https://github.com/sponsors/rawify"
1486
  }
1487
  },
 
 
 
 
 
 
 
1488
  "node_modules/fsevents": {
1489
  "version": "2.3.3",
1490
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
 
1503
  "version": "1.1.2",
1504
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1505
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1506
+ "dev": true,
1507
  "license": "MIT",
1508
  "funding": {
1509
  "url": "https://github.com/sponsors/ljharb"
1510
  }
1511
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1512
  "node_modules/glob-parent": {
1513
  "version": "5.1.2",
1514
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1515
  "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1516
+ "dev": true,
1517
  "license": "ISC",
1518
  "dependencies": {
1519
  "is-glob": "^4.0.1"
 
1522
  "node": ">= 6"
1523
  }
1524
  },
 
 
 
 
 
 
 
1525
  "node_modules/hasown": {
1526
  "version": "2.0.2",
1527
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1528
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1529
+ "dev": true,
1530
  "license": "MIT",
1531
  "dependencies": {
1532
  "function-bind": "^1.1.2"
 
1546
  "url": "https://github.com/sponsors/wooorm"
1547
  }
1548
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1549
  "node_modules/is-binary-path": {
1550
  "version": "2.1.0",
1551
  "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1552
  "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1553
+ "dev": true,
1554
  "license": "MIT",
1555
  "dependencies": {
1556
  "binary-extensions": "^2.0.0"
 
1563
  "version": "2.16.1",
1564
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
1565
  "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
1566
+ "dev": true,
1567
  "license": "MIT",
1568
  "dependencies": {
1569
  "hasown": "^2.0.2"
 
1579
  "version": "2.1.1",
1580
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1581
  "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1582
+ "dev": true,
1583
  "license": "MIT",
1584
  "engines": {
1585
  "node": ">=0.10.0"
 
1589
  "version": "3.0.0",
1590
  "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1591
  "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1592
+ "dev": true,
1593
  "license": "MIT",
1594
  "engines": {
1595
  "node": ">=8"
 
1599
  "version": "4.0.3",
1600
  "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1601
  "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1602
+ "dev": true,
1603
  "license": "MIT",
1604
  "dependencies": {
1605
  "is-extglob": "^2.1.1"
 
1612
  "version": "7.0.0",
1613
  "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1614
  "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1615
+ "dev": true,
1616
  "license": "MIT",
1617
  "engines": {
1618
  "node": ">=0.12.0"
 
1631
  "version": "2.0.0",
1632
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1633
  "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1634
+ "dev": true,
1635
  "license": "ISC"
1636
  },
1637
  "node_modules/jackspeak": {
1638
  "version": "3.4.3",
1639
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1640
  "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
1641
+ "dev": true,
1642
  "license": "BlueOak-1.0.0",
1643
  "dependencies": {
1644
  "@isaacs/cliui": "^8.0.2"
 
1654
  "version": "1.21.7",
1655
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
1656
  "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
1657
+ "dev": true,
1658
  "license": "MIT",
1659
  "bin": {
1660
  "jiti": "bin/jiti.js"
 
1673
  "version": "3.1.3",
1674
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
1675
  "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
1676
+ "dev": true,
1677
  "license": "MIT",
1678
  "engines": {
1679
  "node": ">=14"
 
1686
  "version": "1.2.4",
1687
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1688
  "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1689
+ "dev": true,
1690
  "license": "MIT"
1691
  },
1692
  "node_modules/locate-character": {
 
1699
  "version": "10.4.3",
1700
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1701
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
1702
+ "dev": true,
1703
  "license": "ISC"
1704
  },
1705
  "node_modules/lucide-svelte": {
 
1730
  "version": "1.4.1",
1731
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1732
  "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1733
+ "dev": true,
1734
  "license": "MIT",
1735
  "engines": {
1736
  "node": ">= 8"
 
1740
  "version": "4.0.8",
1741
  "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1742
  "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1743
+ "dev": true,
1744
  "license": "MIT",
1745
  "dependencies": {
1746
  "braces": "^3.0.3",
 
1750
  "node": ">=8.6"
1751
  }
1752
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1753
  "node_modules/minipass": {
1754
  "version": "7.1.2",
1755
  "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1756
  "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1757
+ "dev": true,
1758
  "license": "ISC",
1759
  "engines": {
1760
  "node": ">=16 || 14 >=14.17"
1761
  }
1762
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1763
  "node_modules/mri": {
1764
  "version": "1.2.0",
1765
  "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
 
1788
  "version": "2.7.0",
1789
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1790
  "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1791
+ "dev": true,
1792
  "license": "MIT",
1793
  "dependencies": {
1794
  "any-promise": "^1.0.0",
 
1796
  "thenify-all": "^1.0.0"
1797
  }
1798
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1799
  "node_modules/node-releases": {
1800
  "version": "2.0.25",
1801
  "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz",
 
1807
  "version": "3.0.0",
1808
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1809
  "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1810
+ "dev": true,
1811
  "license": "MIT",
1812
  "engines": {
1813
  "node": ">=0.10.0"
 
1827
  "version": "4.1.1",
1828
  "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1829
  "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1830
+ "dev": true,
1831
  "license": "MIT",
1832
  "engines": {
1833
  "node": ">=0.10.0"
 
1837
  "version": "3.0.0",
1838
  "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1839
  "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1840
+ "dev": true,
1841
  "license": "MIT",
1842
  "engines": {
1843
  "node": ">= 6"
1844
  }
1845
  },
 
 
 
 
 
 
 
 
 
 
1846
  "node_modules/package-json-from-dist": {
1847
  "version": "1.0.1",
1848
  "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1849
  "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
 
 
 
 
 
 
1850
  "dev": true,
1851
+ "license": "BlueOak-1.0.0"
 
 
 
1852
  },
1853
  "node_modules/path-key": {
1854
  "version": "3.1.1",
1855
  "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1856
  "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1857
+ "dev": true,
1858
  "license": "MIT",
1859
  "engines": {
1860
  "node": ">=8"
 
1864
  "version": "1.0.7",
1865
  "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1866
  "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1867
+ "dev": true,
1868
  "license": "MIT"
1869
  },
1870
  "node_modules/path-scurry": {
1871
  "version": "1.11.1",
1872
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
1873
  "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
1874
+ "dev": true,
1875
  "license": "BlueOak-1.0.0",
1876
  "dependencies": {
1877
  "lru-cache": "^10.2.0",
 
1905
  "version": "2.3.1",
1906
  "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1907
  "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1908
+ "dev": true,
1909
  "license": "MIT",
1910
  "engines": {
1911
  "node": ">=8.6"
 
1918
  "version": "2.3.0",
1919
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1920
  "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1921
+ "dev": true,
1922
  "license": "MIT",
1923
  "engines": {
1924
  "node": ">=0.10.0"
 
1928
  "version": "4.0.7",
1929
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
1930
  "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
1931
+ "dev": true,
1932
  "license": "MIT",
1933
  "engines": {
1934
  "node": ">= 6"
 
1966
  "version": "15.1.0",
1967
  "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
1968
  "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
1969
+ "dev": true,
1970
  "license": "MIT",
1971
  "dependencies": {
1972
  "postcss-value-parser": "^4.0.0",
 
1984
  "version": "4.1.0",
1985
  "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
1986
  "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
1987
+ "dev": true,
1988
  "funding": [
1989
  {
1990
  "type": "opencollective",
 
2010
  "version": "5.1.0",
2011
  "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz",
2012
  "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==",
2013
+ "dev": true,
2014
  "funding": [
2015
  {
2016
  "type": "opencollective",
 
2050
  "version": "6.2.0",
2051
  "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
2052
  "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
2053
+ "dev": true,
2054
  "funding": [
2055
  {
2056
  "type": "opencollective",
 
2076
  "version": "6.1.2",
2077
  "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
2078
  "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
2079
+ "dev": true,
2080
  "license": "MIT",
2081
  "dependencies": {
2082
  "cssesc": "^3.0.0",
 
2090
  "version": "4.2.0",
2091
  "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2092
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2093
+ "dev": true,
2094
  "license": "MIT"
2095
  },
2096
  "node_modules/postcss/node_modules/nanoid": {
 
2111
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2112
  }
2113
  },
 
 
 
 
 
 
 
 
 
2114
  "node_modules/queue-microtask": {
2115
  "version": "1.2.3",
2116
  "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2117
  "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2118
+ "dev": true,
2119
  "funding": [
2120
  {
2121
  "type": "github",
 
2136
  "version": "1.0.0",
2137
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2138
  "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2139
+ "dev": true,
2140
  "license": "MIT",
2141
  "dependencies": {
2142
  "pify": "^2.3.0"
 
2146
  "version": "3.6.0",
2147
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2148
  "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2149
+ "dev": true,
2150
  "license": "MIT",
2151
  "dependencies": {
2152
  "picomatch": "^2.2.1"
 
2159
  "version": "1.22.10",
2160
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
2161
  "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
2162
+ "dev": true,
2163
  "license": "MIT",
2164
  "dependencies": {
2165
  "is-core-module": "^2.16.0",
 
2180
  "version": "1.1.0",
2181
  "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
2182
  "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
2183
+ "dev": true,
2184
  "license": "MIT",
2185
  "engines": {
2186
  "iojs": ">=1.0.0",
2187
  "node": ">=0.10.0"
2188
  }
2189
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2190
  "node_modules/rollup": {
2191
  "version": "4.52.4",
2192
  "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz",
 
2232
  "version": "1.2.0",
2233
  "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2234
  "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2235
+ "dev": true,
2236
  "funding": [
2237
  {
2238
  "type": "github",
 
2264
  "node": ">=6"
2265
  }
2266
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
2267
  "node_modules/set-cookie-parser": {
2268
  "version": "2.7.1",
2269
  "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
 
2274
  "version": "2.0.0",
2275
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2276
  "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2277
+ "dev": true,
2278
  "license": "MIT",
2279
  "dependencies": {
2280
  "shebang-regex": "^3.0.0"
 
2287
  "version": "3.0.0",
2288
  "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2289
  "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2290
+ "dev": true,
2291
  "license": "MIT",
2292
  "engines": {
2293
  "node": ">=8"
 
2297
  "version": "4.1.0",
2298
  "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2299
  "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2300
+ "dev": true,
2301
  "license": "ISC",
2302
  "engines": {
2303
  "node": ">=14"
 
2320
  "node": ">=18"
2321
  }
2322
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2323
  "node_modules/source-map-js": {
2324
  "version": "1.2.1",
2325
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
 
2333
  "version": "5.1.2",
2334
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2335
  "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2336
+ "dev": true,
2337
  "license": "MIT",
2338
  "dependencies": {
2339
  "eastasianwidth": "^0.2.0",
 
2352
  "version": "4.2.3",
2353
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2354
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2355
+ "dev": true,
2356
  "license": "MIT",
2357
  "dependencies": {
2358
  "emoji-regex": "^8.0.0",
 
2367
  "version": "5.0.1",
2368
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2369
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2370
+ "dev": true,
2371
  "license": "MIT",
2372
  "engines": {
2373
  "node": ">=8"
 
2377
  "version": "8.0.0",
2378
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2379
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2380
+ "dev": true,
2381
  "license": "MIT"
2382
  },
2383
  "node_modules/string-width-cjs/node_modules/strip-ansi": {
2384
  "version": "6.0.1",
2385
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2386
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2387
+ "dev": true,
2388
  "license": "MIT",
2389
  "dependencies": {
2390
  "ansi-regex": "^5.0.1"
 
2397
  "version": "7.1.2",
2398
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
2399
  "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
2400
+ "dev": true,
2401
  "license": "MIT",
2402
  "dependencies": {
2403
  "ansi-regex": "^6.0.1"
 
2414
  "version": "6.0.1",
2415
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2416
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2417
+ "dev": true,
2418
  "license": "MIT",
2419
  "dependencies": {
2420
  "ansi-regex": "^5.0.1"
 
2427
  "version": "5.0.1",
2428
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2429
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 
 
 
 
 
 
 
 
 
2430
  "dev": true,
2431
  "license": "MIT",
 
 
 
2432
  "engines": {
2433
  "node": ">=8"
2434
  }
 
2437
  "version": "3.35.0",
2438
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
2439
  "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
2440
+ "dev": true,
2441
  "license": "MIT",
2442
  "dependencies": {
2443
  "@jridgewell/gen-mapping": "^0.3.2",
 
2460
  "version": "2.0.2",
2461
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
2462
  "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
2463
+ "dev": true,
2464
  "license": "MIT",
2465
  "dependencies": {
2466
  "balanced-match": "^1.0.0"
 
2470
  "version": "10.4.5",
2471
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
2472
  "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
2473
+ "dev": true,
2474
  "license": "ISC",
2475
  "dependencies": {
2476
  "foreground-child": "^3.1.0",
 
2491
  "version": "9.0.5",
2492
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2493
  "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
2494
+ "dev": true,
2495
  "license": "ISC",
2496
  "dependencies": {
2497
  "brace-expansion": "^2.0.1"
 
2507
  "version": "1.0.0",
2508
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2509
  "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2510
+ "dev": true,
2511
  "license": "MIT",
2512
  "engines": {
2513
  "node": ">= 0.4"
 
2541
  "node": ">=16"
2542
  }
2543
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2544
  "node_modules/svelte-hmr": {
2545
  "version": "0.16.0",
2546
  "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz",
 
2553
  "svelte": "^3.19.0 || ^4.0.0"
2554
  }
2555
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2556
  "node_modules/tailwindcss": {
2557
  "version": "3.4.18",
2558
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
2559
  "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
2560
+ "dev": true,
2561
  "license": "MIT",
2562
  "dependencies": {
2563
  "@alloc/quick-lru": "^5.2.0",
 
2595
  "version": "6.0.2",
2596
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2597
  "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2598
+ "dev": true,
2599
  "license": "ISC",
2600
  "dependencies": {
2601
  "is-glob": "^4.0.3"
 
2608
  "version": "3.3.1",
2609
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2610
  "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2611
+ "dev": true,
2612
  "license": "MIT",
2613
  "dependencies": {
2614
  "any-promise": "^1.0.0"
 
2618
  "version": "1.6.0",
2619
  "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2620
  "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2621
+ "dev": true,
2622
  "license": "MIT",
2623
  "dependencies": {
2624
  "thenify": ">= 3.1.0 < 4"
 
2631
  "version": "5.0.1",
2632
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2633
  "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2634
+ "dev": true,
2635
  "license": "MIT",
2636
  "dependencies": {
2637
  "is-number": "^7.0.0"
 
2653
  "version": "0.1.13",
2654
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2655
  "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
 
 
 
 
 
 
 
 
 
 
 
 
2656
  "dev": true,
2657
+ "license": "Apache-2.0"
 
 
 
 
 
 
 
2658
  },
2659
  "node_modules/update-browserslist-db": {
2660
  "version": "1.1.3",
 
2691
  "version": "1.0.2",
2692
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2693
  "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2694
+ "dev": true,
2695
  "license": "MIT"
2696
  },
2697
  "node_modules/vite": {
 
2767
  }
2768
  }
2769
  },
 
 
 
 
 
 
2770
  "node_modules/which": {
2771
  "version": "2.0.2",
2772
  "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2773
  "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2774
+ "dev": true,
2775
  "license": "ISC",
2776
  "dependencies": {
2777
  "isexe": "^2.0.0"
 
2787
  "version": "8.1.0",
2788
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2789
  "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2790
+ "dev": true,
2791
  "license": "MIT",
2792
  "dependencies": {
2793
  "ansi-styles": "^6.1.0",
 
2806
  "version": "7.0.0",
2807
  "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2808
  "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2809
+ "dev": true,
2810
  "license": "MIT",
2811
  "dependencies": {
2812
  "ansi-styles": "^4.0.0",
 
2824
  "version": "5.0.1",
2825
  "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2826
  "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2827
+ "dev": true,
2828
  "license": "MIT",
2829
  "engines": {
2830
  "node": ">=8"
 
2834
  "version": "4.3.0",
2835
  "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2836
  "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2837
+ "dev": true,
2838
  "license": "MIT",
2839
  "dependencies": {
2840
  "color-convert": "^2.0.1"
 
2850
  "version": "8.0.0",
2851
  "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2852
  "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2853
+ "dev": true,
2854
  "license": "MIT"
2855
  },
2856
  "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2857
  "version": "4.2.3",
2858
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2859
  "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2860
+ "dev": true,
2861
  "license": "MIT",
2862
  "dependencies": {
2863
  "emoji-regex": "^8.0.0",
 
2872
  "version": "6.0.1",
2873
  "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2874
  "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2875
+ "dev": true,
2876
  "license": "MIT",
2877
  "dependencies": {
2878
  "ansi-regex": "^5.0.1"
 
2881
  "node": ">=8"
2882
  }
2883
  },
 
 
 
 
 
 
 
2884
  "node_modules/yaml": {
2885
  "version": "2.8.1",
2886
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
2887
  "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
2888
+ "dev": true,
2889
  "license": "ISC",
2890
  "bin": {
2891
  "yaml": "bin.mjs"
frontend/package.json CHANGED
@@ -5,9 +5,7 @@
5
  "scripts": {
6
  "dev": "vite dev",
7
  "build": "vite build",
8
- "preview": "vite preview",
9
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
10
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
11
  },
12
  "devDependencies": {
13
  "@sveltejs/adapter-auto": "^3.0.0",
@@ -16,23 +14,12 @@
16
  "autoprefixer": "^10.4.16",
17
  "postcss": "^8.4.32",
18
  "svelte": "^4.2.7",
19
- "svelte-check": "^3.6.0",
20
  "tailwindcss": "^3.3.0",
21
- "typescript": "^5.0.0",
22
  "vite": "^5.0.3"
23
  },
24
  "type": "module",
25
  "dependencies": {
26
- "@fortawesome/free-solid-svg-icons": "^6.5.1",
27
  "@sveltejs/adapter-static": "^3.0.10",
28
- "bits-ui": "^0.21.0",
29
- "clsx": "^2.0.0",
30
- "lucide-svelte": "^0.303.0",
31
- "mode-watcher": "^0.2.0",
32
- "prismjs": "^1.30.0",
33
- "svelte-sonner": "^0.3.19",
34
- "tailwind-merge": "^2.2.0",
35
- "tailwind-variants": "^0.1.19",
36
- "wavesurfer.js": "^7.6.0"
37
  }
38
  }
 
5
  "scripts": {
6
  "dev": "vite dev",
7
  "build": "vite build",
8
+ "preview": "vite preview"
 
 
9
  },
10
  "devDependencies": {
11
  "@sveltejs/adapter-auto": "^3.0.0",
 
14
  "autoprefixer": "^10.4.16",
15
  "postcss": "^8.4.32",
16
  "svelte": "^4.2.7",
 
17
  "tailwindcss": "^3.3.0",
 
18
  "vite": "^5.0.3"
19
  },
20
  "type": "module",
21
  "dependencies": {
 
22
  "@sveltejs/adapter-static": "^3.0.10",
23
+ "lucide-svelte": "^0.303.0"
 
 
 
 
 
 
 
 
24
  }
25
  }
frontend/src/app.css CHANGED
@@ -1,59 +1,6 @@
1
  @tailwind base;
2
  @tailwind components;
3
  @tailwind utilities;
4
-
5
- @layer base {
6
- :root {
7
- --background: 0 0% 100%;
8
- --foreground: 240 10% 3.9%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 240 10% 3.9%;
11
- --popover: 0 0% 100%;
12
- --popover-foreground: 240 10% 3.9%;
13
- --primary: 240 5.9% 10%;
14
- --primary-foreground: 0 0% 98%;
15
- --secondary: 240 4.8% 95.9%;
16
- --secondary-foreground: 240 5.9% 10%;
17
- --muted: 240 4.8% 95.9%;
18
- --muted-foreground: 240 3.8% 46.1%;
19
- --accent: 240 4.8% 95.9%;
20
- --accent-foreground: 240 5.9% 10%;
21
- --destructive: 0 84.2% 60.2%;
22
- --destructive-foreground: 0 0% 98%;
23
- --border: 240 5.9% 90%;
24
- --input: 240 5.9% 90%;
25
- --ring: 240 5.9% 10%;
26
- --radius: 0.5rem;
27
- }
28
-
29
- .dark {
30
- --background: 240 10% 3.9%;
31
- --foreground: 0 0% 98%;
32
- --card: 240 10% 3.9%;
33
- --card-foreground: 0 0% 98%;
34
- --popover: 240 10% 3.9%;
35
- --popover-foreground: 0 0% 98%;
36
- --primary: 0 0% 98%;
37
- --primary-foreground: 240 5.9% 10%;
38
- --secondary: 240 3.7% 15.9%;
39
- --secondary-foreground: 0 0% 98%;
40
- --muted: 240 3.7% 15.9%;
41
- --muted-foreground: 240 5% 64.9%;
42
- --accent: 240 3.7% 15.9%;
43
- --accent-foreground: 0 0% 98%;
44
- --destructive: 0 62.8% 30.6%;
45
- --destructive-foreground: 0 0% 98%;
46
- --border: 240 3.7% 15.9%;
47
- --input: 240 3.7% 15.9%;
48
- --ring: 240 4.9% 83.9%;
49
- }
50
- }
51
-
52
- body {
53
- @apply bg-background text-foreground;
54
- }
55
-
56
- /* Custom slider styles with HF brand colors */
57
  .slider-hf::-webkit-slider-thumb {
58
  @apply appearance-none w-4 h-4 rounded-full cursor-pointer;
59
  background: linear-gradient(45deg, #FFD21E, #FF9D00);
 
1
  @tailwind base;
2
  @tailwind components;
3
  @tailwind utilities;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  .slider-hf::-webkit-slider-thumb {
5
  @apply appearance-none w-4 h-4 rounded-full cursor-pointer;
6
  background: linear-gradient(45deg, #FFD21E, #FF9D00);
frontend/src/app.html CHANGED
@@ -2,7 +2,7 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <link rel="icon" href="/assets/hf-logo.png" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <title>HFStudio - Text to Speech</title>
8
  %sveltekit.head%
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <link rel="icon" href="/assets/hf-studio-logo.png" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <title>HFStudio - Text to Speech</title>
8
  %sveltekit.head%
frontend/src/routes/+layout.svelte CHANGED
@@ -15,9 +15,6 @@
15
  let showSignInPopover = false;
16
 
17
  onMount(() => {
18
- console.log('onMount called - starting auth check');
19
-
20
- // Listen for sign in popover requests from child components
21
  window.addEventListener('show-signin-popover', () => {
22
  showSignInPopover = true;
23
  setTimeout(() => {
@@ -25,24 +22,17 @@
25
  }, 4000);
26
  });
27
 
28
- // First check if we can use local token (for local development)
29
- // This should happen before checking localStorage to prioritize local tokens
30
  checkLocalTokenAvailability();
31
-
32
- // Then check if user is logged in (from localStorage)
33
  checkLoginStatus();
34
 
35
- // Re-check login status when page becomes visible (e.g., after OAuth redirect)
36
  document.addEventListener('visibilitychange', () => {
37
  if (!document.hidden) {
38
  checkLoginStatus();
39
  }
40
  });
41
 
42
- // Listen for storage changes (e.g., when token is set from OAuth callback)
43
  window.addEventListener('storage', checkLoginStatus);
44
 
45
- // Also check periodically to catch cases where localStorage changes in same tab
46
  const interval = setInterval(checkLoginStatus, 1000);
47
 
48
  return () => {
@@ -53,48 +43,33 @@
53
 
54
  async function checkLocalTokenAvailability() {
55
  try {
56
- console.log('Checking local token availability...');
57
  const response = await fetch('/api/auth/local-token');
58
  const data = await response.json();
59
- console.log('Local token response:', data);
60
 
61
  if (data.available) {
62
  isLocalEnvironment = true;
63
- // Always use the local token if available (it's more reliable than localStorage)
64
  localStorage.setItem('hf_access_token', data.token);
65
- console.log('Set local token in localStorage');
66
 
67
- // If we have user info from the API, use it directly
68
  if (data.user_info && data.user_info.name !== "Local User") {
69
  isLoggedIn = true;
70
  username = data.user_info.name.split(' ')[0];
71
- console.log('Logged in with user info:', username);
72
  } else {
73
- // For local tokens, even if we can't validate due to rate limiting,
74
- // we should still consider the user logged in
75
  isLoggedIn = true;
76
  username = "Local User";
77
- console.log('Logged in with local token (validation skipped due to rate limiting)');
78
- console.log('isLoggedIn set to:', isLoggedIn, 'username set to:', username);
79
  }
80
  } else {
81
  isLocalEnvironment = false;
82
- console.log('No local token available');
83
  }
84
  } catch (error) {
85
- console.log('Could not check local token availability:', error);
86
  isLocalEnvironment = false;
87
  } finally {
88
  isCheckingAuth = false;
89
- console.log('Finished checking auth, isLoggedIn:', isLoggedIn);
90
  }
91
  }
92
 
93
  function checkLoginStatus() {
94
  const token = localStorage.getItem('hf_access_token');
95
  if (token && !isLoggedIn) {
96
- // Only fetch user info if we're not already logged in
97
- // (to avoid overriding the local token login state)
98
  fetchUserInfo(token);
99
  } else if (!token) {
100
  isLoggedIn = false;
@@ -104,8 +79,6 @@
104
 
105
  async function fetchUserInfo(token) {
106
  try {
107
- console.log('Fetching user info for token:', token.substring(0, 10) + '...');
108
- // Validate token using the correct whoami-v2 endpoint
109
  const response = await fetch('https://huggingface.co/api/whoami-v2', {
110
  headers: {
111
  'Authorization': `Bearer ${token}`
@@ -117,34 +90,26 @@
117
  isLoggedIn = true;
118
  const fullName = userData.name || userData.fullname || userData.login || userData.username || 'User';
119
  username = fullName.split(' ')[0];
120
- console.log('Successfully fetched user info:', username);
121
  } else {
122
- // Token might be invalid, remove it
123
  localStorage.removeItem('hf_access_token');
124
  isLoggedIn = false;
125
  username = '';
126
- console.log('Token validation failed:', response.status);
127
  }
128
  } catch (error) {
129
- // Token might be invalid, remove it
130
  localStorage.removeItem('hf_access_token');
131
  isLoggedIn = false;
132
  username = '';
133
- console.log('Error fetching user info:', error);
134
  }
135
  }
136
 
137
  async function handleAuthAction() {
138
  if (isLoggedIn) {
139
- // Logout
140
  localStorage.removeItem('hf_access_token');
141
  sessionStorage.removeItem('oauth_state');
142
  isLoggedIn = false;
143
  username = '';
144
  } else {
145
- // If we're on Spaces, redirect to OAuth
146
  if (window.location.hostname.includes('hf.space') || window.location.hostname.includes('huggingface.co')) {
147
- // On Spaces, we need to get the OAuth client ID from the backend
148
  try {
149
  const response = await fetch('/api/auth/oauth-config');
150
  const config = await response.json();
@@ -152,14 +117,11 @@
152
  const oauthUrl = `https://huggingface.co/oauth/authorize?client_id=${config.client_id}&redirect_uri=${encodeURIComponent(window.location.origin + '/auth/callback')}&scope=${encodeURIComponent(scopes)}&response_type=code&state=${Date.now()}`;
153
  window.location.href = oauthUrl;
154
  } catch (error) {
155
- console.error('Failed to get OAuth config:', error);
156
- // Fallback to manual token input
157
  showTokenInput = true;
158
  tokenInput = '';
159
  tokenError = '';
160
  }
161
  } else {
162
- // Local development fallback: show token input
163
  showTokenInput = true;
164
  tokenInput = '';
165
  tokenError = '';
@@ -185,7 +147,6 @@
185
  }
186
 
187
  try {
188
- // Validate token using the correct whoami-v2 endpoint
189
  const response = await fetch('https://huggingface.co/api/whoami-v2', {
190
  headers: {
191
  'Authorization': `Bearer ${tokenInput.trim()}`
@@ -200,12 +161,9 @@
200
  username = fullName.split(' ')[0];
201
  closeTokenInput();
202
  } else {
203
- const errorText = await response.text();
204
- console.log('Token validation error:', response.status, errorText);
205
  tokenError = `Invalid token (${response.status}). Please check your token and try again.`;
206
  }
207
  } catch (error) {
208
- console.error('Token validation error:', error);
209
  tokenError = 'Error validating token. Please try again.';
210
  }
211
  }
 
15
  let showSignInPopover = false;
16
 
17
  onMount(() => {
 
 
 
18
  window.addEventListener('show-signin-popover', () => {
19
  showSignInPopover = true;
20
  setTimeout(() => {
 
22
  }, 4000);
23
  });
24
 
 
 
25
  checkLocalTokenAvailability();
 
 
26
  checkLoginStatus();
27
 
 
28
  document.addEventListener('visibilitychange', () => {
29
  if (!document.hidden) {
30
  checkLoginStatus();
31
  }
32
  });
33
 
 
34
  window.addEventListener('storage', checkLoginStatus);
35
 
 
36
  const interval = setInterval(checkLoginStatus, 1000);
37
 
38
  return () => {
 
43
 
44
  async function checkLocalTokenAvailability() {
45
  try {
 
46
  const response = await fetch('/api/auth/local-token');
47
  const data = await response.json();
 
48
 
49
  if (data.available) {
50
  isLocalEnvironment = true;
 
51
  localStorage.setItem('hf_access_token', data.token);
 
52
 
 
53
  if (data.user_info && data.user_info.name !== "Local User") {
54
  isLoggedIn = true;
55
  username = data.user_info.name.split(' ')[0];
 
56
  } else {
 
 
57
  isLoggedIn = true;
58
  username = "Local User";
 
 
59
  }
60
  } else {
61
  isLocalEnvironment = false;
 
62
  }
63
  } catch (error) {
 
64
  isLocalEnvironment = false;
65
  } finally {
66
  isCheckingAuth = false;
 
67
  }
68
  }
69
 
70
  function checkLoginStatus() {
71
  const token = localStorage.getItem('hf_access_token');
72
  if (token && !isLoggedIn) {
 
 
73
  fetchUserInfo(token);
74
  } else if (!token) {
75
  isLoggedIn = false;
 
79
 
80
  async function fetchUserInfo(token) {
81
  try {
 
 
82
  const response = await fetch('https://huggingface.co/api/whoami-v2', {
83
  headers: {
84
  'Authorization': `Bearer ${token}`
 
90
  isLoggedIn = true;
91
  const fullName = userData.name || userData.fullname || userData.login || userData.username || 'User';
92
  username = fullName.split(' ')[0];
 
93
  } else {
 
94
  localStorage.removeItem('hf_access_token');
95
  isLoggedIn = false;
96
  username = '';
 
97
  }
98
  } catch (error) {
 
99
  localStorage.removeItem('hf_access_token');
100
  isLoggedIn = false;
101
  username = '';
 
102
  }
103
  }
104
 
105
  async function handleAuthAction() {
106
  if (isLoggedIn) {
 
107
  localStorage.removeItem('hf_access_token');
108
  sessionStorage.removeItem('oauth_state');
109
  isLoggedIn = false;
110
  username = '';
111
  } else {
 
112
  if (window.location.hostname.includes('hf.space') || window.location.hostname.includes('huggingface.co')) {
 
113
  try {
114
  const response = await fetch('/api/auth/oauth-config');
115
  const config = await response.json();
 
117
  const oauthUrl = `https://huggingface.co/oauth/authorize?client_id=${config.client_id}&redirect_uri=${encodeURIComponent(window.location.origin + '/auth/callback')}&scope=${encodeURIComponent(scopes)}&response_type=code&state=${Date.now()}`;
118
  window.location.href = oauthUrl;
119
  } catch (error) {
 
 
120
  showTokenInput = true;
121
  tokenInput = '';
122
  tokenError = '';
123
  }
124
  } else {
 
125
  showTokenInput = true;
126
  tokenInput = '';
127
  tokenError = '';
 
147
  }
148
 
149
  try {
 
150
  const response = await fetch('https://huggingface.co/api/whoami-v2', {
151
  headers: {
152
  'Authorization': `Bearer ${tokenInput.trim()}`
 
161
  username = fullName.split(' ')[0];
162
  closeTokenInput();
163
  } else {
 
 
164
  tokenError = `Invalid token (${response.status}). Please check your token and try again.`;
165
  }
166
  } catch (error) {
 
167
  tokenError = 'Error validating token. Please try again.';
168
  }
169
  }
frontend/src/routes/+page.svelte CHANGED
@@ -1,21 +1,19 @@
1
  <script>
2
- import { Play, Download, Loader2, AlertCircle, ChevronDown, Copy, RefreshCw, Share, MoreHorizontal, Settings, Sliders, Pause, SkipBack, SkipForward, Layout, Code } from 'lucide-svelte';
3
 
4
  let text = `In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.`;
5
  let selectedVoice = 'Lily';
6
  let selectedModel = 'Chatterbox';
7
- let mode = 'api'; // 'api' or 'local'
8
- let viewMode = 'ui'; // 'ui' or 'code'
9
  let modelDropdownOpen = false;
10
  let isGenerating = false;
11
- let codeCells = []; // Store code cells for the Code view
12
  let audioUrl = null;
13
- let copyNotification = null; // For copy notifications
14
- let codeButtonFlash = false; // For animating the code button
15
- let speed = 1.0;
16
- let stability = 0.5;
17
- let similarity = 0.75;
18
- let styleExaggeration = 0;
19
  let showSettings = true;
20
  let isPlaying = false;
21
  let currentTime = 0;
@@ -24,6 +22,9 @@
24
  let audioElement = null;
25
  let sampleAudioElement = null;
26
  let playingSampleVoice = null;
 
 
 
27
 
28
  const models = [
29
  { id: 'chatterbox', name: 'Chatterbox', badge: 'recommended' },
@@ -31,36 +32,30 @@
31
  ];
32
 
33
  const voices = [
34
- { id: 'lily', name: 'Lily', description: 'Warm, conversational voice from a female in her 30s to 40s', sample: '/voices/lily.mp3' },
35
- { id: 'sarah', name: 'Sarah', description: 'Clear, professional tone' },
36
- { id: 'alex', name: 'Alex', description: 'Friendly, approachable voice' },
37
- { id: 'emma', name: 'Emma', description: 'Calm, soothing delivery' },
38
  ];
39
 
40
  async function generateSpeech() {
41
- console.log('generateSpeech called, text:', text.trim().substring(0, 50));
42
  if (!text.trim()) return;
43
 
44
- // Check if user is logged in (has access token)
45
  const accessToken = getAccessToken();
46
  if (!accessToken) {
47
- // Trigger popover over sign in button in layout
48
  window.dispatchEvent(new CustomEvent('show-signin-popover'));
49
  return;
50
  }
51
 
52
- console.log('Starting generation...');
53
  isGenerating = true;
54
  audioUrl = null;
55
  currentTime = 0;
56
 
57
- // Add code cell for this generation
58
  if (codeCells.length === 0) {
59
  addCodeCell('Setup and Import', generateSetupCode());
60
  }
61
  addCodeCell('Generate Speech', generateTTSCode());
62
 
63
- // Flash the API Recorder button to draw attention
64
  if (viewMode === 'ui') {
65
  codeButtonFlash = true;
66
  setTimeout(() => {
@@ -69,13 +64,10 @@
69
  }
70
  isPlaying = false;
71
 
72
- // Create title from first part of text
73
  audioTitle = text.length > 30 ? text.substring(0, 30) + '...' : text;
74
 
75
  try {
76
- // Get OAuth token from browser storage or handle authentication
77
  const accessToken = getAccessToken();
78
- console.log('Access token for API call:', accessToken ? 'Found (' + accessToken.substring(0, 10) + '...)' : 'None');
79
 
80
  const requestBody = {
81
  text: text,
@@ -84,15 +76,11 @@
84
  mode: mode,
85
  access_token: accessToken,
86
  parameters: {
87
- speed: speed,
88
- stability: stability,
89
- similarity: similarity,
90
- style_exaggeration: styleExaggeration
91
  }
92
  };
93
 
94
- console.log('Sending request to /api/tts/generate:', requestBody);
95
-
96
  const response = await fetch('/api/tts/generate', {
97
  method: 'POST',
98
  headers: {
@@ -101,23 +89,17 @@
101
  body: JSON.stringify(requestBody)
102
  });
103
 
104
- console.log('API response status:', response.status);
105
-
106
  if (!response.ok) {
107
  const errorText = await response.text();
108
- console.error('API error response:', errorText);
109
  throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
110
  }
111
 
112
  const result = await response.json();
113
- console.log('API response result:', result);
114
 
115
  if (result.success && result.audio_url) {
116
  audioUrl = result.audio_url;
117
- // Add code cell for saving the audio
118
  addCodeCell('Save Audio Output', generateSaveCode());
119
 
120
- // Flash the API Recorder button again for the save code
121
  if (viewMode === 'ui') {
122
  codeButtonFlash = true;
123
  setTimeout(() => {
@@ -125,15 +107,13 @@
125
  }, 2500);
126
  }
127
  } else {
128
- // Show error message to user
129
  const errorMessage = result.error || 'Unknown error occurred';
130
- alert(`❌ ${errorMessage}`);
131
  audioUrl = null;
132
  }
133
 
134
  } catch (error) {
135
- console.error('Error generating speech:', error);
136
- alert('❌ Network error: Failed to connect to the server');
137
  audioUrl = null;
138
  } finally {
139
  isGenerating = false;
@@ -141,25 +121,18 @@
141
  }
142
 
143
  function getAccessToken() {
144
- console.log('Getting access token...');
145
-
146
- // For HuggingFace Spaces, check if we can access the global hf object
147
  if (typeof window !== 'undefined' && window.gradio && window.gradio.auth_token) {
148
- console.log('Found Gradio auth token:', window.gradio.auth_token.substring(0, 10) + '...');
149
  return window.gradio.auth_token;
150
  }
151
 
152
- // Check for HF OAuth token in meta tags (common in HF Spaces)
153
  const metaToken = document.querySelector('meta[name="hf-oauth-token"]');
154
  if (metaToken) {
155
  const token = metaToken.getAttribute('content');
156
  if (token) {
157
- console.log('Found token in meta tag:', token.substring(0, 10) + '...');
158
  return token;
159
  }
160
  }
161
 
162
- // Try multiple possible token storage locations
163
  const possibleKeys = [
164
  'hf_access_token',
165
  'hf_token',
@@ -171,56 +144,34 @@
171
  for (const key of possibleKeys) {
172
  const token = localStorage.getItem(key);
173
  if (token) {
174
- console.log(`Found token in localStorage['${key}']:`, token.substring(0, 10) + '...');
175
  return token;
176
  }
177
  }
178
 
179
- // Also check sessionStorage
180
  for (const key of possibleKeys) {
181
  const token = sessionStorage.getItem(key);
182
  if (token) {
183
- console.log(`Found token in sessionStorage['${key}']:`, token.substring(0, 10) + '...');
184
  return token;
185
  }
186
  }
187
 
188
- // Check if there's a token in cookies (for Spaces)
189
  const cookies = document.cookie.split(';');
190
  for (const cookie of cookies) {
191
  const [name, value] = cookie.trim().split('=');
192
  if (name && (name.includes('token') || name.includes('hf') || name.includes('oauth'))) {
193
- console.log(`Found potential token in cookie '${name}':`, value ? value.substring(0, 10) + '...' : 'empty');
194
  return decodeURIComponent(value);
195
  }
196
  }
197
 
198
- // Try to get it from fetch headers if available in the environment
199
  try {
200
  const authHeader = document.querySelector('script[data-hf-token]');
201
  if (authHeader) {
202
  const token = authHeader.getAttribute('data-hf-token');
203
  if (token) {
204
- console.log('Found token in script data attribute:', token.substring(0, 10) + '...');
205
  return token;
206
  }
207
  }
208
- } catch (e) {
209
- // Ignore errors
210
- }
211
-
212
- console.log('No OAuth token found in any storage location');
213
- console.log('Available localStorage keys:', Object.keys(localStorage));
214
- console.log('Available sessionStorage keys:', Object.keys(sessionStorage));
215
- console.log('Available cookies:', document.cookie);
216
- console.log('Available global objects:', {
217
- window: typeof window,
218
- gradio: typeof window?.gradio,
219
- hf: typeof window?.hf,
220
- huggingface: typeof window?.huggingface
221
- });
222
- console.log('URL search params:', new URLSearchParams(window.location.search).toString());
223
- console.log('All meta tags:', Array.from(document.getElementsByTagName('meta')).map(m => ({name: m.name, content: m.content?.substring(0, 20) + '...'})));
224
 
225
  return null;
226
  }
@@ -238,7 +189,6 @@
238
  function handleAudioLoad() {
239
  if (audioElement) {
240
  duration = audioElement.duration;
241
- // Auto-play when audio loads
242
  audioElement.play();
243
  }
244
  }
@@ -273,28 +223,23 @@
273
  }
274
 
275
  function shareAudio() {
276
- // Share functionality would go here
277
- console.log('Share audio');
278
  }
279
 
280
  function playSampleVoice(voice, event) {
281
- event.stopPropagation(); // Prevent voice selection when clicking play
282
 
283
  if (playingSampleVoice === voice.name) {
284
- // Stop playing
285
  if (sampleAudioElement) {
286
  sampleAudioElement.pause();
287
  sampleAudioElement.currentTime = 0;
288
  }
289
  playingSampleVoice = null;
290
  } else {
291
- // Play new voice sample
292
  if (sampleAudioElement) {
293
  sampleAudioElement.pause();
294
  }
295
  playingSampleVoice = voice.name;
296
 
297
- // Use voice-specific sample if available, otherwise use default
298
  const sampleUrl = voice.sample || '/samples/harvard.wav';
299
 
300
  if (!sampleAudioElement) {
@@ -307,7 +252,6 @@
307
  }
308
 
309
  sampleAudioElement.play().catch(err => {
310
- console.error('Error playing sample:', err);
311
  playingSampleVoice = null;
312
  });
313
  }
@@ -339,9 +283,6 @@
339
  }
340
 
341
  function generateSetupCode() {
342
- const token = getAccessToken();
343
- const tokenDisplay = token ? 'YOUR_HF_TOKEN' : 'YOUR_HF_TOKEN';
344
-
345
  return `# Install required packages
346
  # pip install huggingface-hub
347
 
@@ -352,23 +293,19 @@ import io
352
  # Initialize the client
353
  client = InferenceClient(
354
  provider="fal-ai",
355
- api_key="${tokenDisplay}", # Get your token from https://huggingface.co/settings/tokens
356
  )`;
357
  }
358
 
359
  function generateTTSCode() {
360
- const truncatedText = text.length > 100 ? text.substring(0, 100) + '...' : text;
361
-
362
  return `# Text to convert to speech
363
  text = """${text}"""
364
 
365
  # Voice and model settings
366
  model = "ResembleAI/chatterbox"
367
  voice = "${selectedVoice.toLowerCase()}"
368
- speed = ${speed}
369
- stability = ${stability}
370
- similarity = ${similarity}
371
- style_exaggeration = ${styleExaggeration}
372
 
373
  # Generate speech
374
  print("Generating speech...")
@@ -406,24 +343,37 @@ print(f"✓ Audio saved to {output_filename}")
406
  });
407
  }
408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  function copyAllCode() {
410
  const allCode = codeCells.map(cell => `# ${cell.title}\n${cell.code}`).join('\n\n');
411
  copyToClipboard(allCode, 'All code copied!');
412
  }
413
 
414
- // Initialize with setup code
415
  $: if (codeCells.length === 0 && viewMode === 'code') {
416
  addCodeCell('Setup and Import', generateSetupCode());
417
  }
418
 
419
- // Track when user changes text
420
  let previousText = text;
421
  $: if (text !== previousText && codeCells.length > 0) {
422
  previousText = text;
423
- // Don't add a cell for every keystroke, user will click generate
424
  }
425
 
426
- // Clear code cells when switching back to UI
427
  $: if (viewMode === 'ui') {
428
  codeCells = [];
429
  }
@@ -433,25 +383,7 @@ print(f"✓ Audio saved to {output_filename}")
433
  <div class="flex flex-col h-full" on:click={handleClickOutside}>
434
  <!-- Header -->
435
  <header class="border-b border-gray-200 bg-white">
436
- <div class="flex items-center justify-between px-4 py-2">
437
- <div class="flex items-center gap-3">
438
- <!-- Mode toggle -->
439
- <div class="flex items-center bg-gray-100 rounded-md p-0.5">
440
- <button
441
- class="px-3 py-1 text-sm font-medium rounded transition-colors {mode === 'api' ? 'bg-white shadow-sm' : 'text-gray-600'}"
442
- on:click={() => mode = 'api'}
443
- >
444
- API
445
- </button>
446
- <button
447
- class="px-3 py-1 text-sm font-medium rounded transition-colors {mode === 'local' ? 'bg-white shadow-sm' : 'text-gray-600'}"
448
- on:click={() => mode = 'local'}
449
- >
450
- Local
451
- </button>
452
- </div>
453
- </div>
454
-
455
  <div class="flex items-center gap-2">
456
  <!-- View mode toggle -->
457
  <div class="flex items-center bg-gray-100 rounded-md p-0.5">
@@ -467,7 +399,7 @@ print(f"✓ Audio saved to {output_filename}")
467
  on:click={() => viewMode = 'code'}
468
  >
469
  <Code size={14} />
470
- API Recorder
471
  {#if codeButtonFlash}
472
  <span class="flash-sweep"></span>
473
  {/if}
@@ -696,27 +628,27 @@ print(f"✓ Audio saved to {output_filename}")
696
  <h3 class="font-medium text-gray-900">Voice</h3>
697
  </div>
698
 
699
- <div class="space-y-1">
700
  {#each voices as voice}
701
  <button
702
- class="w-full flex items-center justify-between p-3 rounded-md hover:bg-gray-50 transition-colors text-left group
703
- {voice.name === selectedVoice ? 'bg-gray-100' : ''}"
704
  on:click={() => selectedVoice = voice.name}
705
  >
706
- <div class="flex items-center gap-3">
707
  <div class="w-10 h-10 bg-gradient-to-br from-amber-400 to-orange-500 rounded-full flex items-center justify-center text-white text-sm font-semibold flex-shrink-0">
708
  {voice.name[0]}
709
  </div>
710
- <div class="flex-1">
711
- <div class="text-sm font-medium text-gray-900">{voice.name}</div>
712
- <div class="text-xs text-gray-500 mt-0.5">
713
  {voice.description}
714
  </div>
715
  </div>
716
  </div>
717
  <button
718
  on:click={(e) => playSampleVoice(voice, e)}
719
- class="p-1.5 rounded-full hover:bg-gray-200 transition-colors flex-shrink-0"
720
  title="Play sample"
721
  >
722
  {#if playingSampleVoice === voice.name}
@@ -730,91 +662,65 @@ print(f"✓ Audio saved to {output_filename}")
730
 
731
  <!-- Clone voice option -->
732
  <button
733
- class="w-full flex items-center justify-between p-2 rounded-md opacity-50 cursor-not-allowed text-left"
734
  disabled
735
  >
736
- <div class="flex items-center gap-2">
737
- <div class="w-8 h-8 bg-gray-400 rounded-full flex items-center justify-center text-white text-xs font-medium">
738
  +
739
  </div>
740
- <span class="text-sm font-medium text-gray-600">Clone your voice</span>
741
- </div>
742
- <div class="text-xs text-gray-400">
743
- (coming soon)
 
 
744
  </div>
745
  </button>
746
  </div>
747
  </div>
748
 
749
  <div class="space-y-4 pt-4 border-t border-gray-200">
750
- <!-- Speed control -->
751
- <div>
752
- <div class="flex justify-between mb-1">
753
- <label class="text-sm font-medium text-gray-700">Speed</label>
754
- <span class="text-sm text-gray-500">{speed.toFixed(1)}x</span>
755
- </div>
756
- <input
757
- type="range"
758
- bind:value={speed}
759
- min="0.5"
760
- max="2"
761
- step="0.1"
762
- class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
763
- />
764
- <div class="flex justify-between text-xs text-gray-400 mt-1">
765
- <span>0.5x</span>
766
- <span>2.0x</span>
767
- </div>
768
- </div>
769
-
770
- <!-- Stability control -->
771
  <div>
772
  <div class="flex justify-between mb-1">
773
- <label class="text-sm font-medium text-gray-700">Stability</label>
774
- <span class="text-sm text-gray-500">{(stability * 100).toFixed(0)}%</span>
775
  </div>
776
  <input
 
777
  type="range"
778
- bind:value={stability}
779
  min="0"
780
  max="1"
781
  step="0.01"
782
  class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
783
  />
 
 
 
 
784
  </div>
785
 
786
- <!-- Similarity control -->
787
  <div>
788
  <div class="flex justify-between mb-1">
789
- <label class="text-sm font-medium text-gray-700">Similarity</label>
790
- <span class="text-sm text-gray-500">{(similarity * 100).toFixed(0)}%</span>
791
  </div>
792
  <input
 
793
  type="range"
794
- bind:value={similarity}
795
  min="0"
796
  max="1"
797
  step="0.01"
798
  class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
799
  />
800
- </div>
801
-
802
- <!-- Style control -->
803
- <div>
804
- <div class="flex justify-between mb-1">
805
- <label class="text-sm font-medium text-gray-700">Style</label>
806
- <span class="text-sm text-gray-500">
807
- {styleExaggeration === 0 ? 'None' : 'Exaggerated'}
808
- </span>
809
  </div>
810
- <input
811
- type="range"
812
- bind:value={styleExaggeration}
813
- min="0"
814
- max="1"
815
- step="1"
816
- class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
817
- />
818
  </div>
819
  </div>
820
  </div>
@@ -823,21 +729,43 @@ print(f"✓ Audio saved to {output_filename}")
823
  <!-- Code view -->
824
  <div class="flex-1 bg-gray-50 overflow-y-auto">
825
  <div class="max-w-4xl mx-auto p-8">
826
- <!-- Header with copy all button -->
827
- <div class="flex items-center justify-between mb-6">
828
  <div>
829
  <h2 class="text-2xl font-semibold text-gray-900">Integration Code</h2>
830
  <p class="text-sm text-gray-600 mt-1">Python code to reproduce your actions via the API</p>
831
  </div>
832
- {#if codeCells.length > 0}
833
- <button
834
- on:click={copyAllCode}
835
- class="flex items-center gap-2 px-4 py-2 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors"
836
- >
837
- <Copy size={16} />
838
- Copy All
839
- </button>
840
- {/if}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
841
  </div>
842
 
843
  <!-- Code cells -->
@@ -889,6 +817,60 @@ print(f"✓ Audio saved to {output_filename}")
889
  {copyNotification}
890
  </div>
891
  {/if}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
892
  </div>
893
 
894
  <style>
@@ -948,38 +930,4 @@ print(f"✓ Audio saved to {output_filename}")
948
  }
949
  }
950
 
951
- /* Prism.js syntax highlighting styles */
952
- .prism-code .token.comment {
953
- color: #6b7280; /* gray-500 */
954
- font-style: italic;
955
- }
956
-
957
- .prism-code .token.string {
958
- color: #059669; /* emerald-600 */
959
- }
960
-
961
- .prism-code .token.keyword {
962
- color: #2563eb; /* blue-600 */
963
- font-weight: 600;
964
- }
965
-
966
- .prism-code .token.function {
967
- color: #d97706; /* amber-600 */
968
- }
969
-
970
- .prism-code .token.number {
971
- color: #7c3aed; /* violet-600 */
972
- }
973
-
974
- .prism-code .token.operator {
975
- color: #374151; /* gray-700 */
976
- }
977
-
978
- .prism-code .token.punctuation {
979
- color: #6b7280; /* gray-500 */
980
- }
981
-
982
- .prism-code .token.class-name {
983
- color: #dc2626; /* red-600 */
984
- }
985
  </style>
 
1
  <script>
2
+ import { Play, Download, Loader2, AlertCircle, ChevronDown, Copy, RefreshCw, Share, MoreHorizontal, Settings, Sliders, Pause, SkipBack, SkipForward, Layout, Code, X } from 'lucide-svelte';
3
 
4
  let text = `In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.`;
5
  let selectedVoice = 'Lily';
6
  let selectedModel = 'Chatterbox';
7
+ let mode = 'api';
8
+ let viewMode = 'ui';
9
  let modelDropdownOpen = false;
10
  let isGenerating = false;
11
+ let codeCells = [];
12
  let audioUrl = null;
13
+ let copyNotification = null;
14
+ let codeButtonFlash = false;
15
+ let exaggeration = 0.25;
16
+ let temperature = 0.7;
 
 
17
  let showSettings = true;
18
  let isPlaying = false;
19
  let currentTime = 0;
 
22
  let audioElement = null;
23
  let sampleAudioElement = null;
24
  let playingSampleVoice = null;
25
+ let showErrorModal = false;
26
+ let errorMessage = '';
27
+ let errorDetails = '';
28
 
29
  const models = [
30
  { id: 'chatterbox', name: 'Chatterbox', badge: 'recommended' },
 
32
  ];
33
 
34
  const voices = [
35
+ { id: 'lily', name: 'Lily', description: 'Warm, conversational voice from a female in her 30s', sample: '/voices/lily.mp3' },
36
+ { id: 'andrew', name: 'Andrew', description: 'Older British man who speaks clearly and kindly', sample: '/voices/andrew.mp3' },
37
+ { id: 'fairy', name: 'Fairy', description: 'High and airy female voice that bursts with excitement', sample: '/voices/fairy.mp3' },
38
+ { id: 'pirate', name: 'Pirate', description: 'Young pirate that speaks gruffly and passionately', sample: '/voices/pirate.mp3' },
39
  ];
40
 
41
  async function generateSpeech() {
 
42
  if (!text.trim()) return;
43
 
 
44
  const accessToken = getAccessToken();
45
  if (!accessToken) {
 
46
  window.dispatchEvent(new CustomEvent('show-signin-popover'));
47
  return;
48
  }
49
 
 
50
  isGenerating = true;
51
  audioUrl = null;
52
  currentTime = 0;
53
 
 
54
  if (codeCells.length === 0) {
55
  addCodeCell('Setup and Import', generateSetupCode());
56
  }
57
  addCodeCell('Generate Speech', generateTTSCode());
58
 
 
59
  if (viewMode === 'ui') {
60
  codeButtonFlash = true;
61
  setTimeout(() => {
 
64
  }
65
  isPlaying = false;
66
 
 
67
  audioTitle = text.length > 30 ? text.substring(0, 30) + '...' : text;
68
 
69
  try {
 
70
  const accessToken = getAccessToken();
 
71
 
72
  const requestBody = {
73
  text: text,
 
76
  mode: mode,
77
  access_token: accessToken,
78
  parameters: {
79
+ exaggeration: exaggeration,
80
+ temperature: temperature
 
 
81
  }
82
  };
83
 
 
 
84
  const response = await fetch('/api/tts/generate', {
85
  method: 'POST',
86
  headers: {
 
89
  body: JSON.stringify(requestBody)
90
  });
91
 
 
 
92
  if (!response.ok) {
93
  const errorText = await response.text();
 
94
  throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
95
  }
96
 
97
  const result = await response.json();
 
98
 
99
  if (result.success && result.audio_url) {
100
  audioUrl = result.audio_url;
 
101
  addCodeCell('Save Audio Output', generateSaveCode());
102
 
 
103
  if (viewMode === 'ui') {
104
  codeButtonFlash = true;
105
  setTimeout(() => {
 
107
  }, 2500);
108
  }
109
  } else {
 
110
  const errorMessage = result.error || 'Unknown error occurred';
111
+ showError('Generation Failed', errorMessage);
112
  audioUrl = null;
113
  }
114
 
115
  } catch (error) {
116
+ showError('Network Error', 'Failed to connect to the server. Please check your connection and try again.');
 
117
  audioUrl = null;
118
  } finally {
119
  isGenerating = false;
 
121
  }
122
 
123
  function getAccessToken() {
 
 
 
124
  if (typeof window !== 'undefined' && window.gradio && window.gradio.auth_token) {
 
125
  return window.gradio.auth_token;
126
  }
127
 
 
128
  const metaToken = document.querySelector('meta[name="hf-oauth-token"]');
129
  if (metaToken) {
130
  const token = metaToken.getAttribute('content');
131
  if (token) {
 
132
  return token;
133
  }
134
  }
135
 
 
136
  const possibleKeys = [
137
  'hf_access_token',
138
  'hf_token',
 
144
  for (const key of possibleKeys) {
145
  const token = localStorage.getItem(key);
146
  if (token) {
 
147
  return token;
148
  }
149
  }
150
 
 
151
  for (const key of possibleKeys) {
152
  const token = sessionStorage.getItem(key);
153
  if (token) {
 
154
  return token;
155
  }
156
  }
157
 
 
158
  const cookies = document.cookie.split(';');
159
  for (const cookie of cookies) {
160
  const [name, value] = cookie.trim().split('=');
161
  if (name && (name.includes('token') || name.includes('hf') || name.includes('oauth'))) {
 
162
  return decodeURIComponent(value);
163
  }
164
  }
165
 
 
166
  try {
167
  const authHeader = document.querySelector('script[data-hf-token]');
168
  if (authHeader) {
169
  const token = authHeader.getAttribute('data-hf-token');
170
  if (token) {
 
171
  return token;
172
  }
173
  }
174
+ } catch (e) {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
 
176
  return null;
177
  }
 
189
  function handleAudioLoad() {
190
  if (audioElement) {
191
  duration = audioElement.duration;
 
192
  audioElement.play();
193
  }
194
  }
 
223
  }
224
 
225
  function shareAudio() {
 
 
226
  }
227
 
228
  function playSampleVoice(voice, event) {
229
+ event.stopPropagation();
230
 
231
  if (playingSampleVoice === voice.name) {
 
232
  if (sampleAudioElement) {
233
  sampleAudioElement.pause();
234
  sampleAudioElement.currentTime = 0;
235
  }
236
  playingSampleVoice = null;
237
  } else {
 
238
  if (sampleAudioElement) {
239
  sampleAudioElement.pause();
240
  }
241
  playingSampleVoice = voice.name;
242
 
 
243
  const sampleUrl = voice.sample || '/samples/harvard.wav';
244
 
245
  if (!sampleAudioElement) {
 
252
  }
253
 
254
  sampleAudioElement.play().catch(err => {
 
255
  playingSampleVoice = null;
256
  });
257
  }
 
283
  }
284
 
285
  function generateSetupCode() {
 
 
 
286
  return `# Install required packages
287
  # pip install huggingface-hub
288
 
 
293
  # Initialize the client
294
  client = InferenceClient(
295
  provider="fal-ai",
296
+ api_key="YOUR_HF_TOKEN", # Get your token from https://huggingface.co/settings/tokens
297
  )`;
298
  }
299
 
300
  function generateTTSCode() {
 
 
301
  return `# Text to convert to speech
302
  text = """${text}"""
303
 
304
  # Voice and model settings
305
  model = "ResembleAI/chatterbox"
306
  voice = "${selectedVoice.toLowerCase()}"
307
+ exaggeration = ${exaggeration}
308
+ temperature = ${temperature}
 
 
309
 
310
  # Generate speech
311
  print("Generating speech...")
 
343
  });
344
  }
345
 
346
+ function showError(message, details = '') {
347
+ errorMessage = message;
348
+ errorDetails = details;
349
+ showErrorModal = true;
350
+ }
351
+
352
+ function closeErrorModal() {
353
+ showErrorModal = false;
354
+ errorMessage = '';
355
+ errorDetails = '';
356
+ }
357
+
358
+ function copyErrorMessage() {
359
+ const fullError = errorDetails ? `${errorMessage}\n\nDetails:\n${errorDetails}` : errorMessage;
360
+ copyToClipboard(fullError, 'Error message copied!');
361
+ }
362
+
363
  function copyAllCode() {
364
  const allCode = codeCells.map(cell => `# ${cell.title}\n${cell.code}`).join('\n\n');
365
  copyToClipboard(allCode, 'All code copied!');
366
  }
367
 
 
368
  $: if (codeCells.length === 0 && viewMode === 'code') {
369
  addCodeCell('Setup and Import', generateSetupCode());
370
  }
371
 
 
372
  let previousText = text;
373
  $: if (text !== previousText && codeCells.length > 0) {
374
  previousText = text;
 
375
  }
376
 
 
377
  $: if (viewMode === 'ui') {
378
  codeCells = [];
379
  }
 
383
  <div class="flex flex-col h-full" on:click={handleClickOutside}>
384
  <!-- Header -->
385
  <header class="border-b border-gray-200 bg-white">
386
+ <div class="flex items-center justify-end px-4 py-2">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
387
  <div class="flex items-center gap-2">
388
  <!-- View mode toggle -->
389
  <div class="flex items-center bg-gray-100 rounded-md p-0.5">
 
399
  on:click={() => viewMode = 'code'}
400
  >
401
  <Code size={14} />
402
+ Code Recorder
403
  {#if codeButtonFlash}
404
  <span class="flash-sweep"></span>
405
  {/if}
 
628
  <h3 class="font-medium text-gray-900">Voice</h3>
629
  </div>
630
 
631
+ <div class="space-y-2">
632
  {#each voices as voice}
633
  <button
634
+ class="w-full flex items-center justify-between p-2 rounded-lg hover:bg-gray-50 transition-colors text-left group border border-transparent
635
+ {voice.name === selectedVoice ? 'bg-gray-100 border-gray-200' : ''}"
636
  on:click={() => selectedVoice = voice.name}
637
  >
638
+ <div class="flex items-center gap-3 flex-1 min-w-0">
639
  <div class="w-10 h-10 bg-gradient-to-br from-amber-400 to-orange-500 rounded-full flex items-center justify-center text-white text-sm font-semibold flex-shrink-0">
640
  {voice.name[0]}
641
  </div>
642
+ <div class="flex-1 min-w-0">
643
+ <div class="text-sm font-medium text-gray-900 mb-1">{voice.name}</div>
644
+ <div class="text-xs text-gray-500 leading-relaxed">
645
  {voice.description}
646
  </div>
647
  </div>
648
  </div>
649
  <button
650
  on:click={(e) => playSampleVoice(voice, e)}
651
+ class="p-2 rounded-full hover:bg-gray-200 transition-colors flex-shrink-0 ml-2"
652
  title="Play sample"
653
  >
654
  {#if playingSampleVoice === voice.name}
 
662
 
663
  <!-- Clone voice option -->
664
  <button
665
+ class="w-full flex items-center justify-between p-2 rounded-lg opacity-50 cursor-not-allowed text-left border border-transparent"
666
  disabled
667
  >
668
+ <div class="flex items-center gap-3 flex-1 min-w-0">
669
+ <div class="w-10 h-10 bg-gray-400 rounded-full flex items-center justify-center text-white text-sm font-medium flex-shrink-0">
670
  +
671
  </div>
672
+ <div class="flex-1 min-w-0">
673
+ <div class="text-sm font-medium text-gray-600 mb-1">Clone your voice</div>
674
+ <div class="text-xs text-gray-400">
675
+ (coming soon)
676
+ </div>
677
+ </div>
678
  </div>
679
  </button>
680
  </div>
681
  </div>
682
 
683
  <div class="space-y-4 pt-4 border-t border-gray-200">
684
+ <!-- Exaggeration control -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
685
  <div>
686
  <div class="flex justify-between mb-1">
687
+ <label for="exaggeration-slider" class="text-sm font-medium text-gray-700">Exaggeration</label>
688
+ <span class="text-sm text-gray-500">{exaggeration.toFixed(2)}</span>
689
  </div>
690
  <input
691
+ id="exaggeration-slider"
692
  type="range"
693
+ bind:value={exaggeration}
694
  min="0"
695
  max="1"
696
  step="0.01"
697
  class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
698
  />
699
+ <div class="flex justify-between text-xs text-gray-400 mt-1">
700
+ <span>None</span>
701
+ <span>Exaggerated</span>
702
+ </div>
703
  </div>
704
 
705
+ <!-- Stability control -->
706
  <div>
707
  <div class="flex justify-between mb-1">
708
+ <label for="temperature-slider" class="text-sm font-medium text-gray-700">Stability</label>
709
+ <span class="text-sm text-gray-500">{temperature.toFixed(2)}</span>
710
  </div>
711
  <input
712
+ id="temperature-slider"
713
  type="range"
714
+ bind:value={temperature}
715
  min="0"
716
  max="1"
717
  step="0.01"
718
  class="w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"
719
  />
720
+ <div class="flex justify-between text-xs text-gray-400 mt-1">
721
+ <span>More stable</span>
722
+ <span>More variable</span>
 
 
 
 
 
 
723
  </div>
 
 
 
 
 
 
 
 
724
  </div>
725
  </div>
726
  </div>
 
729
  <!-- Code view -->
730
  <div class="flex-1 bg-gray-50 overflow-y-auto">
731
  <div class="max-w-4xl mx-auto p-8">
732
+ <!-- Header -->
733
+ <div class="mb-6">
734
  <div>
735
  <h2 class="text-2xl font-semibold text-gray-900">Integration Code</h2>
736
  <p class="text-sm text-gray-600 mt-1">Python code to reproduce your actions via the API</p>
737
  </div>
738
+
739
+ <!-- Toggle and Copy All button row -->
740
+ <div class="flex items-center justify-between mt-4">
741
+ <!-- API/Local Mode Toggle -->
742
+ <div class="flex items-center bg-gray-100 rounded-md p-0.5">
743
+ <button
744
+ class="px-3 py-1 text-sm font-medium rounded transition-colors {mode === 'api' ? 'bg-white shadow-sm' : 'text-gray-600'}"
745
+ on:click={() => mode = 'api'}
746
+ >
747
+ API
748
+ </button>
749
+ <button
750
+ class="px-3 py-1 text-sm font-medium rounded transition-colors {mode === 'local' ? 'bg-white shadow-sm' : 'text-gray-600'}"
751
+ on:click={() => mode = 'local'}
752
+ >
753
+ Local
754
+ </button>
755
+ </div>
756
+
757
+ {#if codeCells.length > 0}
758
+ <button
759
+ on:click={copyAllCode}
760
+ class="flex items-center bg-gray-100 rounded-md p-0.5"
761
+ >
762
+ <span class="px-3 py-1 text-sm font-medium text-gray-600 flex items-center gap-2">
763
+ <Copy size={16} />
764
+ Copy All
765
+ </span>
766
+ </button>
767
+ {/if}
768
+ </div>
769
  </div>
770
 
771
  <!-- Code cells -->
 
817
  {copyNotification}
818
  </div>
819
  {/if}
820
+
821
+ <!-- Error Modal -->
822
+ {#if showErrorModal}
823
+ <div class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4">
824
+ <div class="bg-white rounded-xl shadow-2xl max-w-2xl w-full max-h-[80vh] flex flex-col">
825
+ <!-- Header -->
826
+ <div class="flex items-center justify-between p-6 border-b border-gray-200 bg-red-50 flex-shrink-0">
827
+ <div class="flex items-center gap-3 min-w-0">
828
+ <div class="w-10 h-10 bg-red-100 rounded-full flex items-center justify-center flex-shrink-0">
829
+ <AlertCircle size={20} class="text-red-600" />
830
+ </div>
831
+ <div class="min-w-0">
832
+ <h3 class="text-lg font-semibold text-gray-900 truncate">{errorMessage}</h3>
833
+ <p class="text-sm text-gray-600">An error occurred while processing your request</p>
834
+ </div>
835
+ </div>
836
+ <button
837
+ on:click={closeErrorModal}
838
+ class="p-2 hover:bg-red-100 rounded-full transition-colors flex-shrink-0"
839
+ title="Close"
840
+ >
841
+ <X size={20} class="text-gray-500" />
842
+ </button>
843
+ </div>
844
+
845
+ <!-- Content -->
846
+ <div class="p-6 overflow-y-auto flex-1 min-h-0">
847
+ {#if errorDetails}
848
+ <div class="bg-gray-50 rounded-lg p-4 border">
849
+ <h4 class="text-sm font-medium text-gray-900 mb-2">Error Details:</h4>
850
+ <pre class="text-xs text-gray-700 whitespace-pre-wrap font-mono leading-relaxed break-words">{errorDetails}</pre>
851
+ </div>
852
+ {/if}
853
+ </div>
854
+
855
+ <!-- Footer -->
856
+ <div class="flex items-center justify-end gap-3 p-6 border-t border-gray-200 bg-gray-50 flex-shrink-0">
857
+ <button
858
+ on:click={copyErrorMessage}
859
+ class="flex items-center gap-2 px-4 py-2 text-gray-700 hover:bg-gray-200 rounded-lg transition-colors"
860
+ >
861
+ <Copy size={16} />
862
+ Copy Error
863
+ </button>
864
+ <button
865
+ on:click={closeErrorModal}
866
+ class="px-6 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700 transition-colors"
867
+ >
868
+ Close
869
+ </button>
870
+ </div>
871
+ </div>
872
+ </div>
873
+ {/if}
874
  </div>
875
 
876
  <style>
 
930
  }
931
  }
932
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
933
  </style>
frontend/static/voices/andrew.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ee4aaa04267d4c20f84a28281cc3a7850b4bd9fe659a137f4747a29cd2b2a70
3
+ size 289690
frontend/static/voices/fairy.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2b30f8ef6e243d7eac70d88a45a562b103e34d18c9e4419c94798dd431223e1d
3
+ size 405673
frontend/static/voices/pirate.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c189f3801ee4616a8130fe64bb63cd36f00eeaf5791b2d904141ae8c574790c
3
+ size 401912
frontend/svelte.config.js CHANGED
@@ -1,7 +1,6 @@
1
  import adapter from '@sveltejs/adapter-static';
2
  import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3
 
4
- /** @type {import('@sveltejs/kit').Config} */
5
  const config = {
6
  preprocess: vitePreprocess(),
7
  kit: {
 
1
  import adapter from '@sveltejs/adapter-static';
2
  import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3
 
 
4
  const config = {
5
  preprocess: vitePreprocess(),
6
  kit: {
frontend/tailwind.config.js CHANGED
@@ -1,44 +1,7 @@
1
- /** @type {import('tailwindcss').Config} */
2
  export default {
3
  content: ['./src/**/*.{html,js,svelte,ts}'],
4
  theme: {
5
- extend: {
6
- colors: {
7
- border: "hsl(var(--border))",
8
- input: "hsl(var(--input))",
9
- ring: "hsl(var(--ring))",
10
- background: "hsl(var(--background))",
11
- foreground: "hsl(var(--foreground))",
12
- primary: {
13
- DEFAULT: "hsl(var(--primary))",
14
- foreground: "hsl(var(--primary-foreground))",
15
- },
16
- secondary: {
17
- DEFAULT: "hsl(var(--secondary))",
18
- foreground: "hsl(var(--secondary-foreground))",
19
- },
20
- destructive: {
21
- DEFAULT: "hsl(var(--destructive))",
22
- foreground: "hsl(var(--destructive-foreground))",
23
- },
24
- muted: {
25
- DEFAULT: "hsl(var(--muted))",
26
- foreground: "hsl(var(--muted-foreground))",
27
- },
28
- accent: {
29
- DEFAULT: "hsl(var(--accent))",
30
- foreground: "hsl(var(--accent-foreground))",
31
- },
32
- popover: {
33
- DEFAULT: "hsl(var(--popover))",
34
- foreground: "hsl(var(--popover-foreground))",
35
- },
36
- card: {
37
- DEFAULT: "hsl(var(--card))",
38
- foreground: "hsl(var(--card-foreground))",
39
- },
40
- },
41
- },
42
  },
43
  plugins: [],
44
  }
 
 
1
  export default {
2
  content: ['./src/**/*.{html,js,svelte,ts}'],
3
  theme: {
4
+ extend: {},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  },
6
  plugins: [],
7
  }
hfstudio/server.py CHANGED
@@ -5,9 +5,6 @@ from fastapi.staticfiles import StaticFiles
5
  from pydantic import BaseModel
6
  from typing import Optional, Dict, Any
7
  import base64
8
- import io
9
- import numpy as np
10
- import soundfile as sf
11
  import httpx
12
  import os
13
  from pathlib import Path
@@ -15,38 +12,29 @@ from huggingface_hub import InferenceClient, get_token, whoami
15
 
16
  app = FastAPI(title="HFStudio API", version="0.1.0")
17
 
18
- # Get the static files directory
19
  static_dir = Path(__file__).parent / "static"
20
-
21
- # Mount static files
22
  if static_dir.exists():
23
  app.mount("/static", StaticFiles(directory=str(static_dir)), name="static")
24
  app.mount("/_app", StaticFiles(directory=str(static_dir / "_app")), name="app")
25
  app.mount("/assets", StaticFiles(directory=str(static_dir / "assets")), name="assets")
26
  app.mount("/samples", StaticFiles(directory=str(static_dir / "samples")), name="samples")
27
 
28
- # Configure CORS
29
  app.add_middleware(
30
  CORSMiddleware,
31
- allow_origins=[
32
- "http://localhost:7860",
33
- "http://localhost:11111",
34
- "http://localhost:11112", # Add the current frontend port
35
- "http://localhost:3000",
36
- "*" # Allow all origins for Spaces deployment
37
- ],
38
  allow_credentials=True,
39
  allow_methods=["*"],
40
  allow_headers=["*"],
41
  )
42
 
43
- # Models
44
  class TTSRequest(BaseModel):
 
 
45
  text: str
46
  voice_id: str = "default"
47
  model_id: str = "coqui-tts"
48
  parameters: Dict[str, Any] = {}
49
- mode: str = "api" # "api" or "local"
50
  access_token: Optional[str] = None
51
 
52
  class TTSResponse(BaseModel):
@@ -65,8 +53,8 @@ class Voice(BaseModel):
65
  class Model(BaseModel):
66
  id: str
67
  name: str
68
- type: str # "local" or "api"
69
- status: str # "available", "downloadable", "api-only"
70
 
71
  class OAuthTokenRequest(BaseModel):
72
  code: str
@@ -76,10 +64,8 @@ class OAuthTokenResponse(BaseModel):
76
  token_type: str
77
  scope: str
78
 
79
- # Routes
80
  @app.get("/")
81
  async def root():
82
- """Serve the SvelteKit single-page application"""
83
  index_path = static_dir / "index.html"
84
  if index_path.exists():
85
  return FileResponse(str(index_path), media_type="text/html")
@@ -96,8 +82,6 @@ async def get_status():
96
 
97
  @app.get("/api/auth/oauth-config")
98
  async def get_oauth_config():
99
- """Get OAuth configuration for the frontend"""
100
- # Get scopes from environment variable or use default
101
  scopes = os.getenv("OAUTH_SCOPES", "read-repos write-repos manage-repos inference-api")
102
 
103
  return {
@@ -108,18 +92,14 @@ async def get_oauth_config():
108
 
109
  @app.get("/api/auth/local-token")
110
  async def get_local_token():
111
- """Get local HF token if available (for local development)"""
112
  try:
113
- # Check if we're running on Spaces
114
  if os.getenv("SPACE_HOST"):
115
  return {"available": False, "reason": "running_on_spaces"}
116
 
117
- # Try to get local token
118
  token = get_token()
119
  if not token:
120
  return {"available": False, "reason": "no_local_token"}
121
 
122
- # Try to validate token by getting user info, but handle rate limiting gracefully
123
  try:
124
  user_info = whoami(token=token)
125
  if user_info.get("type") != "user":
@@ -135,8 +115,6 @@ async def get_local_token():
135
  }
136
  }
137
  except Exception as api_error:
138
- # If API validation fails (e.g., rate limiting), still return the token
139
- # The frontend can validate it when needed
140
  if "429" in str(api_error) or "rate limit" in str(api_error).lower():
141
  return {
142
  "available": True,
@@ -176,62 +154,50 @@ async def get_models():
176
  @app.post("/api/tts/generate")
177
  async def generate_tts(request: TTSRequest):
178
  try:
179
- print(f"Received TTS request: mode={request.mode}, has_token={bool(request.access_token)}")
180
- if request.access_token:
181
- print(f"Token preview: {request.access_token[:10]}...")
182
-
183
- # Check if we have an access token for API mode
184
  if request.mode == "api" and request.access_token:
185
- print("Using Chatterbox API...")
186
  try:
187
- # Use Chatterbox API via HuggingFace InferenceClient
188
  client = InferenceClient(
189
  provider="fal-ai",
190
  api_key=request.access_token,
191
  )
192
 
193
- print(f"Calling text_to_speech with text: '{request.text[:50]}...'")
194
- print(f"Using token: {request.access_token}")
195
- print(f"Model: ResembleAI/chatterbox")
196
- print(f"Provider: fal-ai")
 
 
 
197
 
198
- # Print the equivalent Python command for testing
199
- print("=" * 80)
200
- print("EQUIVALENT PYTHON CODE:")
201
- print("You can test this locally with:")
202
- print(f"""
203
- from huggingface_hub import InferenceClient
204
-
205
- client = InferenceClient(
206
- provider="fal-ai",
207
- api_key="{request.access_token}",
208
- )
209
-
210
- audio_bytes = client.text_to_speech(
211
- "{request.text}",
212
- model="ResembleAI/chatterbox",
213
- )
214
-
215
- print(f"Success! Generated {{len(audio_bytes)}} bytes of audio")
216
- """.strip())
217
- print("=" * 80)
218
 
219
- # Generate audio using Chatterbox
220
  audio_bytes = client.text_to_speech(
221
  request.text,
222
  model="ResembleAI/chatterbox",
 
223
  )
224
 
225
- print(f"Received audio bytes: {len(audio_bytes)} bytes")
226
-
227
- # Convert audio bytes to base64 for data URL
228
  audio_base64 = base64.b64encode(audio_bytes).decode('utf-8')
229
  audio_url = f"data:audio/wav;base64,{audio_base64}"
230
 
231
- # Estimate duration (rough calculation)
232
- duration = len(request.text) * 0.05 # ~0.05 seconds per character
233
 
234
- print("Successfully generated audio via Chatterbox API")
235
  return TTSResponse(
236
  audio_url=audio_url,
237
  duration=duration,
@@ -239,9 +205,7 @@ print(f"Success! Generated {{len(audio_bytes)}} bytes of audio")
239
  )
240
  except Exception as api_error:
241
  error_str = str(api_error)
242
- print(f"Chatterbox API error: {error_str}")
243
 
244
- # Provide specific error messages based on the error type
245
  if "403 Forbidden" in error_str and "permissions" in error_str:
246
  return TTSResponse(
247
  success=False,
@@ -258,7 +222,6 @@ print(f"Success! Generated {{len(audio_bytes)}} bytes of audio")
258
  error=f"Chatterbox API error: {error_str}"
259
  )
260
 
261
- # No token provided
262
  if request.mode == "api":
263
  return TTSResponse(
264
  success=False,
@@ -274,32 +237,24 @@ print(f"Success! Generated {{len(audio_bytes)}} bytes of audio")
274
 
275
  @app.post("/api/auth/token")
276
  async def exchange_oauth_token(request: OAuthTokenRequest, http_request: Request):
277
- """Exchange OAuth authorization code for access token"""
278
  try:
279
- # HuggingFace OAuth token endpoint
280
  token_url = "https://huggingface.co/oauth/token"
281
 
282
- # OAuth app credentials - use environment variables on Spaces, fallback to hardcoded for local dev
283
  client_id = os.getenv("OAUTH_CLIENT_ID", "cdf32a17-e40f-4a84-b683-f66aa1105793")
284
  client_secret = os.getenv("OAUTH_CLIENT_SECRET", "f590cb2d-6eac-4cef-a0cb-d0116825295c")
285
 
286
- # Determine redirect URI based on environment
287
  if os.getenv("SPACE_HOST"):
288
- # On Spaces, use the Space URL
289
- space_host = os.getenv("SPACE_HOST").split(",")[0] # Handle custom domains
290
  redirect_uri = f"https://{space_host}/auth/callback"
291
  else:
292
- # Local development - try to determine from referer header
293
  referer = http_request.headers.get("referer", "")
294
  if referer:
295
  from urllib.parse import urlparse
296
  parsed = urlparse(referer)
297
  redirect_uri = f"{parsed.scheme}://{parsed.netloc}/auth/callback"
298
  else:
299
- # Final fallback for development
300
  redirect_uri = "http://localhost:7860/auth/callback"
301
 
302
- # Prepare token exchange request
303
  token_data = {
304
  "client_id": client_id,
305
  "client_secret": client_secret,
@@ -308,7 +263,6 @@ async def exchange_oauth_token(request: OAuthTokenRequest, http_request: Request
308
  "redirect_uri": redirect_uri,
309
  }
310
 
311
- # Exchange code for token
312
  async with httpx.AsyncClient() as client:
313
  response = await client.post(
314
  token_url,
@@ -337,7 +291,6 @@ async def exchange_oauth_token(request: OAuthTokenRequest, http_request: Request
337
 
338
  @app.get("/auth/callback")
339
  async def oauth_callback(code: str = None, state: str = None, request: Request = None):
340
- """Handle OAuth callback and redirect to frontend with token"""
341
  if not code:
342
  return HTMLResponse("""
343
  <html>
@@ -351,19 +304,15 @@ async def oauth_callback(code: str = None, state: str = None, request: Request =
351
  """, status_code=400)
352
 
353
  try:
354
- # Exchange code for token using the same logic as the API endpoint
355
  token_url = "https://huggingface.co/oauth/token"
356
 
357
  client_id = os.getenv("OAUTH_CLIENT_ID", "cdf32a17-e40f-4a84-b683-f66aa1105793")
358
  client_secret = os.getenv("OAUTH_CLIENT_SECRET", "f590cb2d-6eac-4cef-a0cb-d0116825295c")
359
 
360
- # Determine redirect URI based on environment
361
  if os.getenv("SPACE_HOST"):
362
- # On Spaces, use the Space URL
363
- space_host = os.getenv("SPACE_HOST").split(",")[0] # Handle custom domains
364
  redirect_uri = f"https://{space_host}/auth/callback"
365
  else:
366
- # Local development
367
  redirect_uri = "http://localhost:7860/auth/callback"
368
 
369
  token_data = {
@@ -385,7 +334,6 @@ async def oauth_callback(code: str = None, state: str = None, request: Request =
385
  token_response = response.json()
386
  access_token = token_response["access_token"]
387
 
388
- # Return HTML page that stores token and closes popup/redirects
389
  return HTMLResponse(f"""
390
  <html>
391
  <head><title>OAuth Success</title></head>
@@ -423,20 +371,15 @@ async def oauth_callback(code: str = None, state: str = None, request: Request =
423
  </html>
424
  """, status_code=500)
425
 
426
- # Catch-all route to serve the SvelteKit app (excluding API routes)
427
  @app.get("/{path:path}")
428
  async def serve_spa(path: str):
429
- """Serve the SvelteKit single-page application for non-API routes"""
430
- # Skip API routes
431
  if path.startswith("api/") or path.startswith("docs") or path.startswith("openapi.json"):
432
  raise HTTPException(status_code=404, detail="Not found")
433
 
434
- # For any non-API route, serve the index.html
435
  index_path = static_dir / "index.html"
436
  if index_path.exists():
437
  return FileResponse(str(index_path), media_type="text/html")
438
  else:
439
- # Fallback if no built frontend
440
  return HTMLResponse("""
441
  <html>
442
  <head><title>HFStudio</title></head>
 
5
  from pydantic import BaseModel
6
  from typing import Optional, Dict, Any
7
  import base64
 
 
 
8
  import httpx
9
  import os
10
  from pathlib import Path
 
12
 
13
  app = FastAPI(title="HFStudio API", version="0.1.0")
14
 
 
15
  static_dir = Path(__file__).parent / "static"
 
 
16
  if static_dir.exists():
17
  app.mount("/static", StaticFiles(directory=str(static_dir)), name="static")
18
  app.mount("/_app", StaticFiles(directory=str(static_dir / "_app")), name="app")
19
  app.mount("/assets", StaticFiles(directory=str(static_dir / "assets")), name="assets")
20
  app.mount("/samples", StaticFiles(directory=str(static_dir / "samples")), name="samples")
21
 
 
22
  app.add_middleware(
23
  CORSMiddleware,
24
+ allow_origins=["*"],
 
 
 
 
 
 
25
  allow_credentials=True,
26
  allow_methods=["*"],
27
  allow_headers=["*"],
28
  )
29
 
 
30
  class TTSRequest(BaseModel):
31
+ model_config = {"protected_namespaces": ()}
32
+
33
  text: str
34
  voice_id: str = "default"
35
  model_id: str = "coqui-tts"
36
  parameters: Dict[str, Any] = {}
37
+ mode: str = "api"
38
  access_token: Optional[str] = None
39
 
40
  class TTSResponse(BaseModel):
 
53
  class Model(BaseModel):
54
  id: str
55
  name: str
56
+ type: str
57
+ status: str
58
 
59
  class OAuthTokenRequest(BaseModel):
60
  code: str
 
64
  token_type: str
65
  scope: str
66
 
 
67
  @app.get("/")
68
  async def root():
 
69
  index_path = static_dir / "index.html"
70
  if index_path.exists():
71
  return FileResponse(str(index_path), media_type="text/html")
 
82
 
83
  @app.get("/api/auth/oauth-config")
84
  async def get_oauth_config():
 
 
85
  scopes = os.getenv("OAUTH_SCOPES", "read-repos write-repos manage-repos inference-api")
86
 
87
  return {
 
92
 
93
  @app.get("/api/auth/local-token")
94
  async def get_local_token():
 
95
  try:
 
96
  if os.getenv("SPACE_HOST"):
97
  return {"available": False, "reason": "running_on_spaces"}
98
 
 
99
  token = get_token()
100
  if not token:
101
  return {"available": False, "reason": "no_local_token"}
102
 
 
103
  try:
104
  user_info = whoami(token=token)
105
  if user_info.get("type") != "user":
 
115
  }
116
  }
117
  except Exception as api_error:
 
 
118
  if "429" in str(api_error) or "rate limit" in str(api_error).lower():
119
  return {
120
  "available": True,
 
154
  @app.post("/api/tts/generate")
155
  async def generate_tts(request: TTSRequest):
156
  try:
 
 
 
 
 
157
  if request.mode == "api" and request.access_token:
 
158
  try:
 
159
  client = InferenceClient(
160
  provider="fal-ai",
161
  api_key=request.access_token,
162
  )
163
 
164
+ # Build extra_body with the parameters
165
+ extra_body = {}
166
+ if request.parameters:
167
+ if "exaggeration" in request.parameters:
168
+ extra_body["exaggeration"] = request.parameters["exaggeration"]
169
+ if "temperature" in request.parameters:
170
+ extra_body["temperature"] = request.parameters["temperature"]
171
 
172
+ # Add audio_url for voice reference
173
+ voice_urls = {
174
+ "lily": "https://huggingface.co/spaces/abidlabs/hfstudio/resolve/main/frontend/static/voices/lily.mp3",
175
+ "andrew": "https://huggingface.co/spaces/abidlabs/hfstudio/resolve/main/frontend/static/voices/andrew.mp3",
176
+ "fairy": "https://huggingface.co/spaces/abidlabs/hfstudio/resolve/main/frontend/static/voices/fairy.mp3",
177
+ "pirate": "https://huggingface.co/spaces/abidlabs/hfstudio/resolve/main/frontend/static/voices/pirate.mp3"
178
+ }
179
+
180
+ if request.voice_id.lower() in voice_urls:
181
+ extra_body["audio_url"] = voice_urls[request.voice_id.lower()]
182
+
183
+ # Debug: Print the exact request being made
184
+ print(f"DEBUG: Making TTS request:")
185
+ print(f" Text: {request.text[:50]}...")
186
+ print(f" Model: ResembleAI/chatterbox")
187
+ print(f" Voice ID: {request.voice_id}")
188
+ print(f" Extra body: {extra_body}")
 
 
 
189
 
 
190
  audio_bytes = client.text_to_speech(
191
  request.text,
192
  model="ResembleAI/chatterbox",
193
+ extra_body=extra_body if extra_body else None,
194
  )
195
 
 
 
 
196
  audio_base64 = base64.b64encode(audio_bytes).decode('utf-8')
197
  audio_url = f"data:audio/wav;base64,{audio_base64}"
198
 
199
+ duration = len(request.text) * 0.05
 
200
 
 
201
  return TTSResponse(
202
  audio_url=audio_url,
203
  duration=duration,
 
205
  )
206
  except Exception as api_error:
207
  error_str = str(api_error)
 
208
 
 
209
  if "403 Forbidden" in error_str and "permissions" in error_str:
210
  return TTSResponse(
211
  success=False,
 
222
  error=f"Chatterbox API error: {error_str}"
223
  )
224
 
 
225
  if request.mode == "api":
226
  return TTSResponse(
227
  success=False,
 
237
 
238
  @app.post("/api/auth/token")
239
  async def exchange_oauth_token(request: OAuthTokenRequest, http_request: Request):
 
240
  try:
 
241
  token_url = "https://huggingface.co/oauth/token"
242
 
 
243
  client_id = os.getenv("OAUTH_CLIENT_ID", "cdf32a17-e40f-4a84-b683-f66aa1105793")
244
  client_secret = os.getenv("OAUTH_CLIENT_SECRET", "f590cb2d-6eac-4cef-a0cb-d0116825295c")
245
 
 
246
  if os.getenv("SPACE_HOST"):
247
+ space_host = os.getenv("SPACE_HOST").split(",")[0]
 
248
  redirect_uri = f"https://{space_host}/auth/callback"
249
  else:
 
250
  referer = http_request.headers.get("referer", "")
251
  if referer:
252
  from urllib.parse import urlparse
253
  parsed = urlparse(referer)
254
  redirect_uri = f"{parsed.scheme}://{parsed.netloc}/auth/callback"
255
  else:
 
256
  redirect_uri = "http://localhost:7860/auth/callback"
257
 
 
258
  token_data = {
259
  "client_id": client_id,
260
  "client_secret": client_secret,
 
263
  "redirect_uri": redirect_uri,
264
  }
265
 
 
266
  async with httpx.AsyncClient() as client:
267
  response = await client.post(
268
  token_url,
 
291
 
292
  @app.get("/auth/callback")
293
  async def oauth_callback(code: str = None, state: str = None, request: Request = None):
 
294
  if not code:
295
  return HTMLResponse("""
296
  <html>
 
304
  """, status_code=400)
305
 
306
  try:
 
307
  token_url = "https://huggingface.co/oauth/token"
308
 
309
  client_id = os.getenv("OAUTH_CLIENT_ID", "cdf32a17-e40f-4a84-b683-f66aa1105793")
310
  client_secret = os.getenv("OAUTH_CLIENT_SECRET", "f590cb2d-6eac-4cef-a0cb-d0116825295c")
311
 
 
312
  if os.getenv("SPACE_HOST"):
313
+ space_host = os.getenv("SPACE_HOST").split(",")[0]
 
314
  redirect_uri = f"https://{space_host}/auth/callback"
315
  else:
 
316
  redirect_uri = "http://localhost:7860/auth/callback"
317
 
318
  token_data = {
 
334
  token_response = response.json()
335
  access_token = token_response["access_token"]
336
 
 
337
  return HTMLResponse(f"""
338
  <html>
339
  <head><title>OAuth Success</title></head>
 
371
  </html>
372
  """, status_code=500)
373
 
 
374
  @app.get("/{path:path}")
375
  async def serve_spa(path: str):
 
 
376
  if path.startswith("api/") or path.startswith("docs") or path.startswith("openapi.json"):
377
  raise HTTPException(status_code=404, detail="Not found")
378
 
 
379
  index_path = static_dir / "index.html"
380
  if index_path.exists():
381
  return FileResponse(str(index_path), media_type="text/html")
382
  else:
 
383
  return HTMLResponse("""
384
  <html>
385
  <head><title>HFStudio</title></head>
hfstudio/static/_app/immutable/assets/0.Ggx0bHAf.css ADDED
@@ -0,0 +1 @@
 
 
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-56{left:14rem}.right-0{right:0}.right-4{right:1rem}.right-80{right:20rem}.top-full{top:100%}.z-10{z-index:10}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.contents{display:contents}.hidden{display:none}.h-0{height:0px}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:0px}.w-0{width:0px}.w-10{width:2.5rem}.w-12{width:3rem}.w-2{width:.5rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-8{width:2rem}.w-80{width:20rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-150{--tw-scale-x: 1.5;--tw-scale-y: 1.5;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-r-4{border-right-width:4px}.border-t{border-top-width:1px}.border-t-4{border-top-width:4px}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-r-transparent{border-right-color:transparent}.border-t-blue-600{--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.bg-right{background-position:right}.bg-no-repeat{background-repeat:no-repeat}.p-0\.5{padding:.125rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-24{padding-bottom:6rem}.pr-10{padding-right:2.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.slider-hf::-webkit-slider-thumb{height:1rem;width:1rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:9999px;background:linear-gradient(45deg,#ffd21e,#ff9d00);box-shadow:0 1px 3px #0000001a}.slider-hf::-moz-range-thumb{height:1rem;width:1rem;cursor:pointer;border-radius:9999px;border-width:0px;background:linear-gradient(45deg,#ffd21e,#ff9d00);box-shadow:0 1px 3px #0000001a}.pause-filled{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px}.pause-filled:before,.pause-filled:after{content:"";width:2px;height:10px;background-color:currentColor;border-radius:1px}.pause-filled:before{margin-right:2px}.pause-filled:after{margin-left:2px}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-600:hover{--tw-bg-opacity: 1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:from-amber-500:hover{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-orange-600:hover{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-amber-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(251 191 36 / var(--tw-ring-opacity, 1))}.focus\:ring-orange-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(249 115 22 / var(--tw-ring-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}
hfstudio/static/_app/immutable/assets/2.NHOETQX0.css ADDED
@@ -0,0 +1 @@
 
 
1
+ @keyframes svelte-zv1zz2-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in.svelte-zv1zz2{animation:svelte-zv1zz2-fade-in .3s ease-out}@keyframes svelte-zv1zz2-sweep{0%{left:-100%}20%{left:-100%}80%{left:100%}to{left:100%}}.flash-sweep.svelte-zv1zz2{position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent 0%,rgba(251,191,36,.5) 25%,rgba(249,115,22,.8) 50%,rgba(251,191,36,.5) 75%,transparent 100%);animation:svelte-zv1zz2-sweep 2s ease-in-out;pointer-events:none}.code-flash.svelte-zv1zz2{animation:svelte-zv1zz2-pulse .5s ease-out}@keyframes svelte-zv1zz2-pulse{0%{box-shadow:0 0 #fbbf2400}50%{box-shadow:0 0 0 6px #fbbf2466}to{box-shadow:0 0 #fbbf2400}}
hfstudio/static/_app/immutable/chunks/Bqgpa-5T.js ADDED
@@ -0,0 +1 @@
 
 
1
+ var F=Object.defineProperty;var W=(t,n,e)=>n in t?F(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e;var N=(t,n,e)=>W(t,typeof n!="symbol"?n+"":n,e);function w(){}function G(t,n){for(const e in n)t[e]=n[e];return t}function B(t){return t()}function O(){return Object.create(null)}function $(t){t.forEach(B)}function D(t){return typeof t=="function"}function ht(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let b;function mt(t,n){return t===n?!0:(b||(b=document.createElement("a")),b.href=n,t===b.href)}function J(t){return Object.keys(t).length===0}function K(t,...n){if(t==null){for(const r of n)r(void 0);return w}const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function pt(t,n,e){t.$$.on_destroy.push(K(n,e))}function yt(t,n,e,r){if(t){const i=T(t,n,e,r);return t[0](i)}}function T(t,n,e,r){return t[1]&&r?G(e.ctx.slice(),t[1](r(n))):e.ctx}function gt(t,n,e,r){if(t[2]&&r){const i=t[2](r(e));if(n.dirty===void 0)return i;if(typeof i=="object"){const l=[],c=Math.max(n.dirty.length,i.length);for(let o=0;o<c;o+=1)l[o]=n.dirty[o]|i[o];return l}return n.dirty|i}return n.dirty}function $t(t,n,e,r,i,l){if(i){const c=T(n,e,r,l);t.p(c,i)}}function xt(t){if(t.ctx.length>32){const n=[],e=t.ctx.length/32;for(let r=0;r<e;r++)n[r]=-1;return n}return-1}function bt(t){const n={};for(const e in t)e[0]!=="$"&&(n[e]=t[e]);return n}function vt(t,n){const e={};n=new Set(n);for(const r in t)!n.has(r)&&r[0]!=="$"&&(e[r]=t[r]);return e}let E=!1;function Q(){E=!0}function R(){E=!1}function V(t,n,e,r){for(;t<n;){const i=t+(n-t>>1);e(i)<=r?t=i+1:n=i}return t}function X(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const u=[];for(let s=0;s<n.length;s++){const f=n[s];f.claim_order!==void 0&&u.push(f)}n=u}const e=new Int32Array(n.length+1),r=new Int32Array(n.length);e[0]=-1;let i=0;for(let u=0;u<n.length;u++){const s=n[u].claim_order,f=(i>0&&n[e[i]].claim_order<=s?i+1:V(1,i,x=>n[e[x]].claim_order,s))-1;r[u]=e[f]+1;const a=f+1;e[a]=u,i=Math.max(a,i)}const l=[],c=[];let o=n.length-1;for(let u=e[i]+1;u!=0;u=r[u-1]){for(l.push(n[u-1]);o>=u;o--)c.push(n[o]);o--}for(;o>=0;o--)c.push(n[o]);l.reverse(),c.sort((u,s)=>u.claim_order-s.claim_order);for(let u=0,s=0;u<c.length;u++){for(;s<l.length&&c[u].claim_order>=l[s].claim_order;)s++;const f=s<l.length?l[s]:null;t.insertBefore(c[u],f)}}function Y(t,n){if(E){for(X(t),(t.actual_end_child===void 0||t.actual_end_child!==null&&t.actual_end_child.parentNode!==t)&&(t.actual_end_child=t.firstChild);t.actual_end_child!==null&&t.actual_end_child.claim_order===void 0;)t.actual_end_child=t.actual_end_child.nextSibling;n!==t.actual_end_child?(n.claim_order!==void 0||n.parentNode!==t)&&t.insertBefore(n,t.actual_end_child):t.actual_end_child=n.nextSibling}else(n.parentNode!==t||n.nextSibling!==null)&&t.appendChild(n)}function wt(t,n,e){E&&!e?Y(t,n):(n.parentNode!==t||n.nextSibling!=e)&&t.insertBefore(n,e||null)}function Z(t){t.parentNode&&t.parentNode.removeChild(t)}function Et(t,n){for(let e=0;e<t.length;e+=1)t[e]&&t[e].d(n)}function tt(t){return document.createElement(t)}function nt(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function j(t){return document.createTextNode(t)}function Nt(){return j(" ")}function At(){return j("")}function Ct(t,n,e,r){return t.addEventListener(n,e,r),()=>t.removeEventListener(n,e,r)}function et(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function St(t,n){for(const e in n)et(t,e,n[e])}function jt(t){return t.dataset.svelteH}function kt(t){return t===""?null:+t}function rt(t){return Array.from(t.childNodes)}function it(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function H(t,n,e,r,i=!1){it(t);const l=(()=>{for(let c=t.claim_info.last_index;c<t.length;c++){const o=t[c];if(n(o)){const u=e(o);return u===void 0?t.splice(c,1):t[c]=u,i||(t.claim_info.last_index=c),o}}for(let c=t.claim_info.last_index-1;c>=0;c--){const o=t[c];if(n(o)){const u=e(o);return u===void 0?t.splice(c,1):t[c]=u,i?u===void 0&&t.claim_info.last_index--:t.claim_info.last_index=c,o}}return r()})();return l.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,l}function I(t,n,e,r){return H(t,i=>i.nodeName===n,i=>{const l=[];for(let c=0;c<i.attributes.length;c++){const o=i.attributes[c];e[o.name]||l.push(o.name)}l.forEach(c=>i.removeAttribute(c))},()=>r(n))}function Mt(t,n,e){return I(t,n,e,tt)}function Ot(t,n,e){return I(t,n,e,nt)}function ct(t,n){return H(t,e=>e.nodeType===3,e=>{const r=""+n;if(e.data.startsWith(r)){if(e.data.length!==r.length)return e.splitText(r.length)}else e.data=r},()=>j(n),!0)}function Pt(t){return ct(t," ")}function qt(t,n){n=""+n,t.data!==n&&(t.data=n)}function Bt(t,n){t.value=n??""}function Dt(t,n,e,r){e==null?t.style.removeProperty(n):t.style.setProperty(n,e,"")}function ut(t,n,{bubbles:e=!1,cancelable:r=!1}={}){return new CustomEvent(t,{detail:n,bubbles:e,cancelable:r})}function Tt(t,n){return new t(n)}let g;function y(t){g=t}function _(){if(!g)throw new Error("Function called outside component initialization");return g}function Ht(t){_().$$.before_update.push(t)}function It(t){_().$$.on_mount.push(t)}function Lt(t){_().$$.after_update.push(t)}function Ut(t){_().$$.on_destroy.push(t)}function zt(){const t=_();return(n,e,{cancelable:r=!1}={})=>{const i=t.$$.callbacks[n];if(i){const l=ut(n,e,{cancelable:r});return i.slice().forEach(c=>{c.call(t,l)}),!l.defaultPrevented}return!0}}function Ft(t,n){return _().$$.context.set(t,n),n}function Wt(t){return _().$$.context.get(t)}function Gt(){return _().$$.context}function Jt(t){return _().$$.context.has(t)}const m=[],P=[];let p=[];const q=[],L=Promise.resolve();let C=!1;function U(){C||(C=!0,L.then(z))}function Kt(){return U(),L}function S(t){p.push(t)}const A=new Set;let h=0;function z(){if(h!==0)return;const t=g;do{try{for(;h<m.length;){const n=m[h];h++,y(n),st(n.$$)}}catch(n){throw m.length=0,h=0,n}for(y(null),m.length=0,h=0;P.length;)P.pop()();for(let n=0;n<p.length;n+=1){const e=p[n];A.has(e)||(A.add(e),e())}p.length=0}while(m.length);for(;q.length;)q.pop()();C=!1,A.clear(),y(t)}function st(t){if(t.fragment!==null){t.update(),$(t.before_update);const n=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,n),t.after_update.forEach(S)}}function ot(t){const n=[],e=[];p.forEach(r=>t.indexOf(r)===-1?n.push(r):e.push(r)),e.forEach(r=>r()),p=n}const v=new Set;let d;function Qt(){d={r:0,c:[],p:d}}function Rt(){d.r||$(d.c),d=d.p}function lt(t,n){t&&t.i&&(v.delete(t),t.i(n))}function Vt(t,n,e,r){if(t&&t.o){if(v.has(t))return;v.add(t),d.c.push(()=>{v.delete(t),r&&(e&&t.d(1),r())}),t.o(n)}else r&&r()}function Xt(t){t&&t.c()}function Yt(t,n){t&&t.l(n)}function at(t,n,e){const{fragment:r,after_update:i}=t.$$;r&&r.m(n,e),S(()=>{const l=t.$$.on_mount.map(B).filter(D);t.$$.on_destroy?t.$$.on_destroy.push(...l):$(l),t.$$.on_mount=[]}),i.forEach(S)}function ft(t,n){const e=t.$$;e.fragment!==null&&(ot(e.after_update),$(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function _t(t,n){t.$$.dirty[0]===-1&&(m.push(t),U(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<<n%31}function Zt(t,n,e,r,i,l,c=null,o=[-1]){const u=g;y(t);const s=t.$$={fragment:null,ctx:[],props:l,update:w,not_equal:i,bound:O(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(n.context||(u?u.$$.context:[])),callbacks:O(),dirty:o,skip_bound:!1,root:n.target||u.$$.root};c&&c(s.root);let f=!1;if(s.ctx=e?e(t,n.props||{},(a,x,...k)=>{const M=k.length?k[0]:x;return s.ctx&&i(s.ctx[a],s.ctx[a]=M)&&(!s.skip_bound&&s.bound[a]&&s.bound[a](M),f&&_t(t,a)),x}):[],s.update(),f=!0,$(s.before_update),s.fragment=r?r(s.ctx):!1,n.target){if(n.hydrate){Q();const a=rt(n.target);s.fragment&&s.fragment.l(a),a.forEach(Z)}else s.fragment&&s.fragment.c();n.intro&&lt(t.$$.fragment),at(t,n.target,n.anchor),R(),z()}y(u)}class tn{constructor(){N(this,"$$");N(this,"$$set")}$destroy(){ft(this,1),this.$destroy=w}$on(n,e){if(!D(e))return w;const r=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return r.push(e),()=>{const i=r.indexOf(e);i!==-1&&r.splice(i,1)}}$set(n){this.$$set&&!J(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{Jt as $,w as A,pt as B,Qt as C,Rt as D,At as E,Lt as F,Kt as G,Tt as H,ft as I,Xt as J,at as K,Yt as L,Dt as M,P as N,G as O,Et as P,St as Q,Ot as R,tn as S,nt as T,vt as U,bt as V,kt as W,Ht as X,zt as Y,Gt as Z,Wt as _,lt as a,Ut as a0,Ft as a1,et as b,yt as c,Z as d,gt as e,wt as f,xt as g,Y as h,Zt as i,mt as j,Mt as k,Ct as l,rt as m,jt as n,Pt as o,tt as p,Nt as q,$ as r,ht as s,Vt as t,$t as u,It as v,Bt as w,qt as x,ct as y,j as z};
hfstudio/static/_app/immutable/chunks/Bs9I3-rU.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ var St=Object.defineProperty;var kt=(e,t,n)=>t in e?St(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var R=(e,t,n)=>kt(e,typeof t!="symbol"?t+"":t,n);import{S as Et,F as At,X as Rt,Y as Tt,Z as It,_ as Ut,$ as Lt,a0 as $t,v as ve,a1 as xt,G as be,A as ge,s as Ct}from"./Bqgpa-5T.js";class Ze extends Et{constructor(n){if(!n||!n.target&&!n.$$inline)throw new Error("'target' is a required option");super();R(this,"$$prop_def");R(this,"$$events_def");R(this,"$$slot_def")}$destroy(){super.$destroy(),this.$destroy=()=>{console.warn("Component was already destroyed")}}$capture_state(){}$inject_state(){}}class Pt extends Ze{}const Ot=Object.freeze(Object.defineProperty({__proto__:null,SvelteComponent:Ze,SvelteComponentTyped:Pt,afterUpdate:At,beforeUpdate:Rt,createEventDispatcher:Tt,getAllContexts:It,getContext:Ut,hasContext:Lt,onDestroy:$t,onMount:ve,setContext:xt,tick:be},Symbol.toStringTag,{value:"Module"}));class ie{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Re{constructor(t,n){this.status=t,this.location=n}}class Te extends Error{constructor(t,n,r){super(r),this.status=t,this.text=n}}new URL("sveltekit-internal://");function jt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Nt(e){return e.split("%25").map(decodeURI).join("%25")}function Dt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function me({href:e}){return e.split("#")[0]}function Ft(e,t,n,r=!1){const a=new URL(e);Object.defineProperty(a,"searchParams",{value:new Proxy(a.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return l=>(n(l),i[o](l));t();const c=Reflect.get(i,o);return typeof c=="function"?c.bind(i):c}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];r&&s.push("hash");for(const i of s)Object.defineProperty(a,i,{get(){return t(),e[i]},enumerable:!0,configurable:!0});return a}function Bt(...e){let t=5381;for(const n of e)if(typeof n=="string"){let r=n.length;for(;r;)t=t*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)t=t*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;const Mt=new TextDecoder;function Vt(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}const qt=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&Y.delete(Ie(e)),qt(e,t));const Y=new Map;function Gt(e,t){const n=Ie(e,t),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:a,...s}=JSON.parse(r.textContent);const i=r.getAttribute("data-ttl");return i&&Y.set(n,{body:a,init:s,ttl:1e3*Number(i)}),r.getAttribute("data-b64")!==null&&(a=Vt(a)),Promise.resolve(new Response(a,s))}return window.fetch(e,t)}function Yt(e,t,n){if(Y.size>0){const r=Ie(e,n),a=Y.get(r);if(a){if(performance.now()<a.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(a.body,a.init);Y.delete(r)}}return window.fetch(t,n)}function Ie(e,t){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t!=null&&t.headers||t!=null&&t.body){const a=[];t.headers&&a.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&a.push(t.body),r+=`[data-hash="${Bt(...a)}"]`}return r}const Ht=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Kt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Wt(e).map(r=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return t.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(s)return t.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const i=r.split(/\[(.+?)\](?!\])/);return"/"+i.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return _e(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return _e(String.fromCharCode(...c.slice(2).split("-").map(u=>parseInt(u,16))));const d=Ht.exec(c),[,h,y,f,p]=d;return t.push({name:f,matcher:p,optional:!!h,rest:!!y,chained:y?l===1&&i[0]==="":!1}),y?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return _e(c)}).join("")}).join("")}/?$`),params:t}}function zt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Wt(e){return e.slice(1).split("/").filter(zt)}function Jt(e,t,n){const r={},a=e.slice(1),s=a.filter(o=>o!==void 0);let i=0;for(let o=0;o<t.length;o+=1){const c=t[o];let l=a[o-i];if(c.chained&&c.rest&&i&&(l=a.slice(o-i,o+1).filter(d=>d).join("/"),i=0),l===void 0){c.rest&&(r[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){r[c.name]=l;const d=t[o+1],h=a[o+1];d&&!d.rest&&d.optional&&h&&c.chained&&(i=0),!d&&!h&&Object.keys(r).length===s.length&&(i=0);continue}if(c.optional&&c.chained){i++;continue}return}if(!i)return r}function _e(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Xt({nodes:e,server_loads:t,dictionary:n,matchers:r}){const a=new Set(t);return Object.entries(n).map(([o,[c,l,d]])=>{const{pattern:h,params:y}=Kt(o),f={id:o,exec:p=>{const u=h.exec(p);if(u)return Jt(u,y,r)},errors:[1,...d||[]].map(p=>e[p]),layouts:[0,...l||[]].map(i),leaf:s(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function s(o){const c=o<0;return c&&(o=~o),[c,e[o]]}function i(o){return o===void 0?o:[a.has(o),e[o]]}}function Qe(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function Be(e,t,n=JSON.stringify){const r=n(t);try{sessionStorage[e]=r}catch{}}const D=[];function Ue(e,t=ge){let n;const r=new Set;function a(o){if(Ct(e,o)&&(e=o,n)){const c=!D.length;for(const l of r)l[1](),D.push(l,e);if(c){for(let l=0;l<D.length;l+=2)D[l][0](D[l+1]);D.length=0}}}function s(o){a(o(e))}function i(o,c=ge){const l=[o,c];return r.add(l),r.size===1&&(n=t(a,s)||ge),o(e),()=>{r.delete(l),r.size===0&&n&&(n(),n=null)}}return{set:a,update:s,subscribe:i}}var Je;const $=((Je=globalThis.__sveltekit_17nj3h5)==null?void 0:Je.base)??"";var Xe;const Zt=((Xe=globalThis.__sveltekit_17nj3h5)==null?void 0:Xe.assets)??$??"",Qt="1760988467880",et="sveltekit:snapshot",tt="sveltekit:scroll",nt="sveltekit:states",en="sveltekit:pageurl",B="sveltekit:history",z="sveltekit:navigation",O={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},ce=location.origin;function at(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function le(){return{x:pageXOffset,y:pageYOffset}}function F(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const Me={...O,"":O.hover};function rt(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function ot(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=rt(e)}}function Se(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";r.hash=`#${o}${r.hash}`}}catch{}const a=e instanceof SVGAElement?e.target.baseVal:e.target,s=!r||!!a||fe(r,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),i=(r==null?void 0:r.origin)===ce&&e.hasAttribute("download");return{url:r,external:s,target:a,download:i}}function Q(e){let t=null,n=null,r=null,a=null,s=null,i=null,o=e;for(;o&&o!==document.documentElement;)r===null&&(r=F(o,"preload-code")),a===null&&(a=F(o,"preload-data")),t===null&&(t=F(o,"keepfocus")),n===null&&(n=F(o,"noscroll")),s===null&&(s=F(o,"reload")),i===null&&(i=F(o,"replacestate")),o=rt(o);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:Me[r??"off"],preload_data:Me[a??"off"],keepfocus:c(t),noscroll:c(n),reload:c(s),replace_state:c(i)}}function Ve(e){const t=Ue(e);let n=!0;function r(){n=!0,t.update(i=>i)}function a(i){n=!1,t.set(i)}function s(i){let o;return t.subscribe(c=>{(o===void 0||n&&c!==o)&&i(o=c)})}return{notify:r,set:a,subscribe:s}}const st={v:()=>{}};function tn(){const{set:e,subscribe:t}=Ue(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${Zt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const i=(await a.json()).version!==Qt;return i&&(e(!0),st.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:t,check:r}}function fe(e,t,n){return e.origin!==ce||!e.pathname.startsWith(t)?!0:n?!(e.pathname===t+"/"||e.pathname===t+"/index.html"||e.protocol==="file:"&&e.pathname.replace(/\/[^/]+\.html?$/,"")===t):!1}function qn(e){}function nn(e){const t=rn(e),n=new ArrayBuffer(t.length),r=new DataView(n);for(let a=0;a<n.byteLength;a++)r.setUint8(a,t.charCodeAt(a));return n}const an="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function rn(e){e.length%4===0&&(e=e.replace(/==?$/,""));let t="",n=0,r=0;for(let a=0;a<e.length;a++)n<<=6,n|=an.indexOf(e[a]),r+=6,r===24&&(t+=String.fromCharCode((n&16711680)>>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=r=0);return r===12?(n>>=4,t+=String.fromCharCode(n)):r===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const on=-1,sn=-2,cn=-3,ln=-4,fn=-5,un=-6;function dn(e,t){if(typeof e=="number")return a(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,r=Array(n.length);function a(s,i=!1){if(s===on)return;if(s===cn)return NaN;if(s===ln)return 1/0;if(s===fn)return-1/0;if(s===un)return-0;if(i||typeof s!="number")throw new Error("Invalid input");if(s in r)return r[s];const o=n[s];if(!o||typeof o!="object")r[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const c=o[0],l=t==null?void 0:t[c];if(l)return r[s]=l(a(o[1]));switch(c){case"Date":r[s]=new Date(o[1]);break;case"Set":const d=new Set;r[s]=d;for(let f=1;f<o.length;f+=1)d.add(a(o[f]));break;case"Map":const h=new Map;r[s]=h;for(let f=1;f<o.length;f+=2)h.set(a(o[f]),a(o[f+1]));break;case"RegExp":r[s]=new RegExp(o[1],o[2]);break;case"Object":r[s]=Object(o[1]);break;case"BigInt":r[s]=BigInt(o[1]);break;case"null":const y=Object.create(null);r[s]=y;for(let f=1;f<o.length;f+=2)y[o[f]]=a(o[f+1]);break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":{const f=globalThis[c],p=new f(a(o[1]));r[s]=o[2]!==void 0?p.subarray(o[2],o[3]):p;break}case"ArrayBuffer":{const f=o[1],p=nn(f);r[s]=p;break}case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{const f=c.slice(9);r[s]=Temporal[f].from(o[1]);break}case"URL":{const f=new URL(o[1]);r[s]=f;break}case"URLSearchParams":{const f=new URLSearchParams(o[1]);r[s]=f;break}default:throw new Error(`Unknown type ${c}`)}}else{const c=new Array(o.length);r[s]=c;for(let l=0;l<o.length;l+=1){const d=o[l];d!==sn&&(c[l]=a(d))}}else{const c={};r[s]=c;for(const l in o){if(l==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");const d=o[l];c[l]=a(d)}}return r[s]}return a(0)}const it=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...it];const hn=new Set([...it]);[...hn];function pn(e){return e.filter(t=>t!=null)}const gn="x-sveltekit-invalidated",mn="x-sveltekit-trailing-slash";function ee(e){return e instanceof ie||e instanceof Te?e.status:500}function _n(e){return e instanceof Te?e.text:"Internal Error"}let T,W,we;const wn=ve.toString().includes("$$")||/function \w+\(\) \{\}/.test(ve.toString());wn?(T={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},W={current:null},we={current:!1}):(T=new class{constructor(){R(this,"data",$state.raw({}));R(this,"form",$state.raw(null));R(this,"error",$state.raw(null));R(this,"params",$state.raw({}));R(this,"route",$state.raw({id:null}));R(this,"state",$state.raw({}));R(this,"status",$state.raw(-1));R(this,"url",$state.raw(new URL("https://example.com")))}},W=new class{constructor(){R(this,"current",$state.raw(null))}},we=new class{constructor(){R(this,"current",$state.raw(!1))}},st.v=()=>we.current=!0);function yn(e){Object.assign(T,e)}const vn="/__data.json",bn=".html__data.json";function Sn(e){return e.endsWith(".html")?e.replace(/\.html$/,bn):e.replace(/\/$/,"")+vn}const qe={spanContext(){return kn},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},kn={traceId:"",spanId:"",traceFlags:0},{tick:En}=Ot,An=new Set(["icon","shortcut icon","apple-touch-icon"]),N=Qe(tt)??{},J=Qe(et)??{},C={url:Ve({}),page:Ve({}),navigating:Ue(null),updated:tn()};function Le(e){N[e]=le()}function Rn(e,t){let n=e+1;for(;N[n];)delete N[n],n+=1;for(n=t+1;J[n];)delete J[n],n+=1}function q(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function ct(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration($||"/");e&&await e.update()}}function Ge(){}let $e,ke,te,x,Ee,k;const ne=[],ae=[];let U=null;const Z=new Map,lt=new Set,Tn=new Set,H=new Set;let b={branch:[],error:null,url:null},xe=!1,re=!1,Ye=!0,X=!1,G=!1,ft=!1,Ce=!1,ut,A,L,j;const K=new Set,He=new Map;async function Kn(e,t,n){var s,i,o,c,l;(s=globalThis.__sveltekit_17nj3h5)!=null&&s.data&&globalThis.__sveltekit_17nj3h5.data,document.URL!==location.href&&(location.href=location.href),k=e,await((o=(i=e.hooks).init)==null?void 0:o.call(i)),$e=Xt(e),x=document.documentElement,Ee=t,ke=e.nodes[0],te=e.nodes[1],ke(),te(),A=(c=history.state)==null?void 0:c[B],L=(l=history.state)==null?void 0:l[z],A||(A=L=Date.now(),history.replaceState({...history.state,[B]:A,[z]:L},""));const r=N[A];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await Dn(Ee,n)):(await M({type:"enter",url:at(k.hash?Bn(new URL(location.href)):location.href),replace_state:!0}),a()),Nn()}function In(){ne.length=0,Ce=!1}function dt(e){ae.some(t=>t==null?void 0:t.snapshot)&&(J[e]=ae.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function ht(e){var t;(t=J[e])==null||t.forEach((n,r)=>{var a,s;(s=(a=ae[r])==null?void 0:a.snapshot)==null||s.restore(n)})}function Ke(){Le(A),Be(tt,N),dt(L),Be(et,J)}async function Un(e,t,n,r){let a;t.invalidateAll&&(U=null),await M({type:"goto",url:at(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{t.invalidateAll&&(Ce=!0,a=[...He.keys()]),t.invalidate&&t.invalidate.forEach(jn)}}),t.invalidateAll&&be().then(be).then(()=>{He.forEach(({resource:s},i)=>{var o;a!=null&&a.includes(i)&&((o=s.refresh)==null||o.call(s))})})}async function Ln(e){if(e.id!==(U==null?void 0:U.id)){const t={};K.add(t),U={id:e.id,token:t,promise:mt({...e,preload:t}).then(n=>(K.delete(t),n.type==="loaded"&&n.state.error&&(U=null),n))}}return U.promise}async function ye(e){var n;const t=(n=await de(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].map(r=>r==null?void 0:r[1]()))}function pt(e,t,n){var a;b=e.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(T,e.props.page),ut=new k.root({target:t,props:{...e.props,stores:C,components:ae},hydrate:n,sync:!1}),ht(L),n){const s={from:null,to:{params:b.params,route:{id:((a=b.route)==null?void 0:a.id)??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(i=>i(s))}re=!0}function oe({url:e,params:t,branch:n,status:r,error:a,route:s,form:i}){let o="never";if($&&(e.pathname===$||e.pathname===$+"/"))o="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(o=f.slash);e.pathname=jt(e.pathname,o),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:a,route:s},props:{constructors:pn(n).map(f=>f.node.component),page:Ne(T)}};i!==void 0&&(c.props.form=i);let l={},d=!T,h=0;for(let f=0;f<Math.max(n.length,b.branch.length);f+=1){const p=n[f],u=b.branch[f];(p==null?void 0:p.data)!==(u==null?void 0:u.data)&&(d=!0),p&&(l={...l,...p.data},d&&(c.props[`data_${h}`]=l),h+=1)}return(!b.url||e.href!==b.url.href||b.error!==a||i!==void 0&&i!==T.form||d)&&(c.props.page={error:a,params:t,route:{id:(s==null?void 0:s.id)??null},state:{},status:r,url:new URL(e),form:i??null,data:d?l:T.data}),c}async function Pe({loader:e,parent:t,url:n,params:r,route:a,server_data_node:s}){var d,h,y;let i=null,o=!0;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if((d=l.universal)!=null&&d.load){let f=function(...u){for(const g of u){const{href:_}=new URL(g,n);c.dependencies.add(_)}};const p={tracing:{enabled:!1,root:qe,current:qe},route:new Proxy(a,{get:(u,g)=>(o&&(c.route=!0),u[g])}),params:new Proxy(r,{get:(u,g)=>(o&&c.params.add(g),u[g])}),data:(s==null?void 0:s.data)??null,url:Ft(n,()=>{o&&(c.url=!0)},u=>{o&&c.search_params.add(u)},k.hash),async fetch(u,g){u instanceof Request&&(g={body:u.method==="GET"||u.method==="HEAD"?void 0:await u.blob(),cache:u.cache,credentials:u.credentials,headers:[...u.headers].length>0?u==null?void 0:u.headers:void 0,integrity:u.integrity,keepalive:u.keepalive,method:u.method,mode:u.mode,redirect:u.redirect,referrer:u.referrer,referrerPolicy:u.referrerPolicy,signal:u.signal,...g});const{resolved:_,promise:I}=gt(u,g,n);return o&&f(_.href),I},setHeaders:()=>{},depends:f,parent(){return o&&(c.parent=!0),t()},untrack(u){o=!1;try{return u()}finally{o=!0}}};i=await l.universal.load.call(null,p)??null}return{node:l,loader:e,server:s,universal:(h=l.universal)!=null&&h.load?{type:"data",data:i,uses:c}:null,data:i??(s==null?void 0:s.data)??null,slash:((y=l.universal)==null?void 0:y.trailingSlash)??(s==null?void 0:s.slash)}}function gt(e,t,n){let r=e instanceof Request?e.url:e;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=re?Yt(r,a.href,t):Gt(r,t);return{resolved:a,promise:s}}function ze(e,t,n,r,a,s){if(Ce)return!0;if(!a)return!1;if(a.parent&&e||a.route&&t||a.url&&n)return!0;for(const i of a.search_params)if(r.has(i))return!0;for(const i of a.params)if(s[i]!==b.params[i])return!0;for(const i of a.dependencies)if(ne.some(o=>o(new URL(i))))return!0;return!1}function Oe(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function $n(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const r of n){const a=e.searchParams.getAll(r),s=t.searchParams.getAll(r);a.every(i=>s.includes(i))&&s.every(i=>a.includes(i))&&n.delete(r)}return n}function We({error:e,url:t,route:n,params:r}){return{type:"loaded",state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Ne(T),constructors:[]}}}async function mt({id:e,invalidating:t,url:n,params:r,route:a,preload:s}){if((U==null?void 0:U.id)===e)return K.delete(U.token),U.promise;const{errors:i,layouts:o,leaf:c}=a,l=[...o,c];i.forEach(w=>w==null?void 0:w().catch(()=>{})),l.forEach(w=>w==null?void 0:w[1]().catch(()=>{}));let d=null;const h=b.url?e!==se(b.url):!1,y=b.route?a.id!==b.route.id:!1,f=$n(b.url,n);let p=!1;const u=l.map((w,m)=>{var P;const v=b.branch[m],S=!!(w!=null&&w[0])&&((v==null?void 0:v.loader)!==w[1]||ze(p,y,h,f,(P=v.server)==null?void 0:P.uses,r));return S&&(p=!0),S});if(u.some(Boolean)){try{d=await yt(n,u)}catch(w){const m=await V(w,{url:n,params:r,route:{id:e}});return K.has(s)?We({error:m,url:n,params:r,route:a}):ue({status:ee(w),error:m,url:n,route:a})}if(d.type==="redirect")return d}const g=d==null?void 0:d.nodes;let _=!1;const I=l.map(async(w,m)=>{var he;if(!w)return;const v=b.branch[m],S=g==null?void 0:g[m];if((!S||S.type==="skip")&&w[1]===(v==null?void 0:v.loader)&&!ze(_,y,h,f,(he=v.universal)==null?void 0:he.uses,r))return v;if(_=!0,(S==null?void 0:S.type)==="error")throw S;return Pe({loader:w[1],url:n,params:r,route:a,parent:async()=>{var Fe;const De={};for(let pe=0;pe<m;pe+=1)Object.assign(De,(Fe=await I[pe])==null?void 0:Fe.data);return De},server_data_node:Oe(S===void 0&&w[0]?{type:"skip"}:S??null,w[0]?v==null?void 0:v.server:void 0)})});for(const w of I)w.catch(()=>{});const E=[];for(let w=0;w<l.length;w+=1)if(l[w])try{E.push(await I[w])}catch(m){if(m instanceof Re)return{type:"redirect",location:m.location};if(K.has(s))return We({error:await V(m,{params:r,url:n,route:{id:a.id}}),url:n,params:r,route:a});let v=ee(m),S;if(g!=null&&g.includes(m))v=m.status??v,S=m.error;else if(m instanceof ie)S=m.body;else{if(await C.updated.check())return await ct(),await q(n);S=await V(m,{params:r,url:n,route:{id:a.id}})}const P=await xn(w,E,i);return P?oe({url:n,params:r,branch:E.slice(0,P.idx).concat(P.node),status:v,error:S,route:a}):await wt(n,{id:a.id},S,v)}else E.push(void 0);return oe({url:n,params:r,branch:E,status:200,error:null,route:a,form:t?void 0:null})}async function xn(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)r-=1;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function ue({status:e,error:t,url:n,route:r}){const a={};let s=null;if(k.server_loads[0]===0)try{const o=await yt(n,[!0]);if(o.type!=="data"||o.nodes[0]&&o.nodes[0].type!=="data")throw 0;s=o.nodes[0]??null}catch{(n.origin!==ce||n.pathname!==location.pathname||xe)&&await q(n)}try{const o=await Pe({loader:ke,url:n,params:a,route:r,parent:()=>Promise.resolve({}),server_data_node:Oe(s)}),c={node:await te(),loader:te,universal:null,server:null,data:null};return oe({url:n,params:a,branch:[o,c],status:e,error:t,route:null})}catch(o){if(o instanceof Re)return Un(new URL(o.location,location.href),{},0);throw o}}async function Cn(e){const t=e.href;if(Z.has(t))return Z.get(t);let n;try{const r=(async()=>{let a=await k.hooks.reroute({url:new URL(e),fetch:async(s,i)=>gt(s,i,e).promise})??e;if(typeof a=="string"){const s=new URL(e);k.hash?s.hash=a:s.pathname=a,a=s}return a})();Z.set(t,r),n=await r}catch{Z.delete(t);return}return n}async function de(e,t){if(e&&!fe(e,$,k.hash)){const n=await Cn(e);if(!n)return;const r=Pn(n);for(const a of $e){const s=a.exec(r);if(s)return{id:se(e),invalidating:t,route:a,params:Dt(s),url:e}}}}function Pn(e){return Nt(k.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice($.length))||"/"}function se(e){return(k.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function _t({url:e,type:t,intent:n,delta:r,event:a}){let s=!1;const i=je(b,n,e,t);r!==void 0&&(i.navigation.delta=r),a!==void 0&&(i.navigation.event=a);const o={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return X||lt.forEach(c=>c(o)),s?null:i}async function M({type:e,url:t,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i={},redirect_count:o=0,nav_token:c={},accept:l=Ge,block:d=Ge,event:h}){const y=j;j=c;const f=await de(t,!1),p=e==="enter"?je(b,f,t,e):_t({url:t,type:e,delta:n==null?void 0:n.delta,intent:f,event:h});if(!p){d(),j===c&&(j=y);return}const u=A,g=L;l(),X=!0,re&&p.navigation.type!=="enter"&&C.navigating.set(W.current=p.navigation);let _=f&&await mt(f);if(!_){if(fe(t,$,k.hash))return await q(t,s);_=await wt(t,{id:null},await V(new Te(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,s)}if(t=(f==null?void 0:f.url)||t,j!==c)return p.reject(new Error("navigation aborted")),!1;if(_.type==="redirect"){if(o<20){await M({type:e,url:new URL(_.location,t),popped:n,keepfocus:r,noscroll:a,replace_state:s,state:i,redirect_count:o+1,nav_token:c}),p.fulfil(void 0);return}_=await ue({status:500,error:await V(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else _.props.page.status>=400&&await C.updated.check()&&(await ct(),await q(t,s));if(In(),Le(u),dt(g),_.props.page.url.pathname!==t.pathname&&(t.pathname=_.props.page.url.pathname),i=n?n.state:i,!n){const m=s?0:1,v={[B]:A+=m,[z]:L+=m,[nt]:i};(s?history.replaceState:history.pushState).call(history,v,"",t),s||Rn(A,L)}if(U=null,_.props.page.state=i,re){const m=(await Promise.all(Array.from(Tn,v=>v(p.navigation)))).filter(v=>typeof v=="function");if(m.length>0){let v=function(){m.forEach(S=>{H.delete(S)})};m.push(v),m.forEach(S=>{H.add(S)})}b=_.state,_.props.page&&(_.props.page.url=t),ut.$set(_.props),yn(_.props.page),ft=!0}else pt(_,Ee,!1);const{activeElement:I}=document;await En();let E=n?n.scroll:a?le():null;if(Ye){const m=t.hash&&document.getElementById(bt(t));if(E)scrollTo(E.x,E.y);else if(m){m.scrollIntoView();const{top:v,left:S}=m.getBoundingClientRect();E={x:pageXOffset+S,y:pageYOffset+v}}else scrollTo(0,0)}const w=document.activeElement!==I&&document.activeElement!==document.body;!r&&!w&&Fn(t,E),Ye=!0,_.props.page&&Object.assign(T,_.props.page),X=!1,e==="popstate"&&ht(L),p.fulfil(void 0),H.forEach(m=>m(p.navigation)),C.navigating.set(W.current=null)}async function wt(e,t,n,r,a){return e.origin===ce&&e.pathname===location.pathname&&!xe?await ue({status:r,error:n,url:e,route:t}):await q(e,a)}function On(){let e,t,n;x.addEventListener("mousemove",o=>{const c=o.target;clearTimeout(e),e=setTimeout(()=>{s(c,O.hover)},20)});function r(o){o.defaultPrevented||s(o.composedPath()[0],O.tap)}x.addEventListener("mousedown",r),x.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(o=>{for(const c of o)c.isIntersecting&&(ye(new URL(c.target.href)),a.unobserve(c.target))},{threshold:0});async function s(o,c){const l=ot(o,x),d=l===t&&c>=n;if(!l||d)return;const{url:h,external:y,download:f}=Se(l,$,k.hash);if(y||f)return;const p=Q(l),u=h&&se(b.url)===se(h);if(!(p.reload||u))if(c<=p.preload_data){t=l,n=O.tap;const g=await de(h,!1);if(!g)return;Ln(g)}else c<=p.preload_code&&(t=l,n=c,ye(h))}function i(){a.disconnect();for(const o of x.querySelectorAll("a")){const{url:c,external:l,download:d}=Se(o,$,k.hash);if(l||d)continue;const h=Q(o);h.reload||(h.preload_code===O.viewport&&a.observe(o),h.preload_code===O.eager&&ye(c))}}H.add(i),i()}function V(e,t){if(e instanceof ie)return e.body;const n=ee(e),r=_n(e);return k.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function jn(e){if(typeof e=="function")ne.push(e);else{const{href:t}=new URL(e,location.href);ne.push(n=>n.href===t)}}function Nn(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let r=!1;if(Ke(),!X){const a=je(b,void 0,null,"leave"),s={...a.navigation,cancel:()=>{r=!0,a.reject(new Error("navigation cancelled"))}};lt.forEach(i=>i(s))}r?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&Ke()}),(t=navigator.connection)!=null&&t.saveData||On(),x.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const r=ot(n.composedPath()[0],x);if(!r)return;const{url:a,external:s,target:i,download:o}=Se(r,$,k.hash);if(!a)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const c=Q(r);if(!(r instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||o)return;const[d,h]=(k.hash?a.hash.replace(/^#/,""):a.href).split("#"),y=d===me(location);if(s||c.reload&&(!y||!h)){_t({url:a,type:"link",event:n})?X=!0:n.preventDefault();return}if(h!==void 0&&y){const[,f]=b.url.href.split("#");if(f===h){if(n.preventDefault(),h===""||h==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const p=r.ownerDocument.getElementById(decodeURIComponent(h));p&&(p.scrollIntoView(),p.focus())}return}if(G=!0,Le(A),e(a),!c.replace_state)return;G=!1}n.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await M({type:"link",url:a,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??a.href===location.href,event:n})}),x.addEventListener("submit",n=>{if(n.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(n.target),a=n.submitter;if(((a==null?void 0:a.formTarget)||r.target)==="_blank"||((a==null?void 0:a.formMethod)||r.method)!=="get")return;const o=new URL((a==null?void 0:a.hasAttribute("formaction"))&&(a==null?void 0:a.formAction)||r.action);if(fe(o,$,!1))return;const c=n.target,l=Q(c);if(l.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(c,a);o.search=new URLSearchParams(d).toString(),M({type:"form",url:o,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??o.href===location.href,event:n})}),addEventListener("popstate",async n=>{var r;if(!Ae){if((r=n.state)!=null&&r[B]){const a=n.state[B];if(j={},a===A)return;const s=N[a],i=n.state[nt]??{},o=new URL(n.state[en]??location.href),c=n.state[z],l=b.url?me(location)===me(b.url):!1;if(c===L&&(ft||l)){i!==T.state&&(T.state=i),e(o),N[A]=le(),s&&scrollTo(s.x,s.y),A=a;return}const h=a-A;await M({type:"popstate",url:o,popped:{state:i,scroll:s,delta:h},accept:()=>{A=a,L=c},block:()=>{history.go(-h)},nav_token:j,event:n})}else if(!G){const a=new URL(location.href);e(a),k.hash&&location.reload()}}}),addEventListener("hashchange",()=>{G&&(G=!1,history.replaceState({...history.state,[B]:++A,[z]:L},"",location.href))});for(const n of document.querySelectorAll("link"))An.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&C.navigating.set(W.current=null)});function e(n){b.url=T.url=n,C.page.set(Ne(T)),C.page.notify()}}async function Dn(e,{status:t=200,error:n,node_ids:r,params:a,route:s,server_route:i,data:o,form:c}){xe=!0;const l=new URL(location.href);let d;({params:a={},route:s={id:null}}=await de(l,!1)||{}),d=$e.find(({id:f})=>f===s.id);let h,y=!0;try{const f=r.map(async(u,g)=>{const _=o[g];return _!=null&&_.uses&&(_.uses=vt(_.uses)),Pe({loader:k.nodes[u],url:l,params:a,route:s,parent:async()=>{const I={};for(let E=0;E<g;E+=1)Object.assign(I,(await f[E]).data);return I},server_data_node:Oe(_)})}),p=await Promise.all(f);if(d){const u=d.layouts;for(let g=0;g<u.length;g++)u[g]||p.splice(g,0,void 0)}h=oe({url:l,params:a,branch:p,status:t,error:n,form:c,route:d??null})}catch(f){if(f instanceof Re){await q(new URL(f.location,location.href));return}h=await ue({status:ee(f),error:await V(f,{url:l,params:a,route:s}),url:l,route:s}),e.textContent="",y=!1}h.props.page&&(h.props.page.state={}),pt(h,e,y)}async function yt(e,t){var s;const n=new URL(e);n.pathname=Sn(e.pathname),e.pathname.endsWith("/")&&n.searchParams.append(mn,"1"),n.searchParams.append(gn,t.map(i=>i?"1":"0").join(""));const r=window.fetch,a=await r(n.href,{});if(!a.ok){let i;throw(s=a.headers.get("content-type"))!=null&&s.includes("application/json")?i=await a.json():a.status===404?i="Not Found":a.status===500&&(i="Internal Error"),new ie(a.status,i)}return new Promise(async i=>{var h;const o=new Map,c=a.body.getReader();function l(y){return dn(y,{...k.decoders,Promise:f=>new Promise((p,u)=>{o.set(f,{fulfil:p,reject:u})})})}let d="";for(;;){const{done:y,value:f}=await c.read();if(y&&!d)break;for(d+=!f&&d?`
2
+ `:Mt.decode(f,{stream:!0});;){const p=d.indexOf(`
3
+ `);if(p===-1)break;const u=JSON.parse(d.slice(0,p));if(d=d.slice(p+1),u.type==="redirect")return i(u);if(u.type==="data")(h=u.nodes)==null||h.forEach(g=>{(g==null?void 0:g.type)==="data"&&(g.uses=vt(g.uses),g.data=l(g.data))}),i(u);else if(u.type==="chunk"){const{id:g,data:_,error:I}=u,E=o.get(g);o.delete(g),I?E.reject(l(I)):E.fulfil(l(_))}}}})}function vt(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Ae=!1;function Fn(e,t=null){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const r=bt(e);if(r&&document.getElementById(r)){const{x:s,y:i}=t??le();setTimeout(()=>{const o=history.state;Ae=!0,location.replace(`#${r}`),k.hash&&location.replace(e.hash),history.replaceState(o,"",e.hash),scrollTo(s,i),Ae=!1})}else{const s=document.body,i=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),i!==null?s.setAttribute("tabindex",i):s.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const s=[];for(let i=0;i<a.rangeCount;i+=1)s.push(a.getRangeAt(i));setTimeout(()=>{if(a.rangeCount===s.length){for(let i=0;i<a.rangeCount;i+=1){const o=s[i],c=a.getRangeAt(i);if(o.commonAncestorContainer!==c.commonAncestorContainer||o.startContainer!==c.startContainer||o.endContainer!==c.endContainer||o.startOffset!==c.startOffset||o.endOffset!==c.endOffset)return}a.removeAllRanges()}})}}}function je(e,t,n,r){var c,l;let a,s;const i=new Promise((d,h)=>{a=d,s=h});return i.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((l=t==null?void 0:t.route)==null?void 0:l.id)??null},url:n},willUnload:!t,type:r,complete:i},fulfil:a,reject:s}}function Ne(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Bn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function bt(e){let t;if(k.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Kn as a,qn as l,C as s};
hfstudio/static/_app/immutable/entry/app.DZ7KK-ry.js ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.C0_hCSUc.js","../chunks/Bqgpa-5T.js","../chunks/IHki7fMi.js","../assets/0.Ggx0bHAf.css","../nodes/1.DqNvkuKf.js","../chunks/Bs9I3-rU.js","../nodes/2.Cu9jABEo.js","../assets/2.NHOETQX0.css"])))=>i.map(i=>d[i]);
2
+ import{S as V,i as j,s as B,d,t as h,a as g,C as S,D as O,f as v,o as U,E as w,q as z,F,v as G,G as H,H as y,I as P,J as R,K as L,L as I,b as A,M as p,k as J,m as K,p as W,N as C,x as Q,y as X,z as Y}from"../chunks/Bqgpa-5T.js";import"../chunks/IHki7fMi.js";const Z="modulepreload",M=function(o,e){return new URL(o,e).href},N={},D=function(e,n,i){let r=Promise.resolve();if(n&&n.length>0){const t=document.getElementsByTagName("link"),s=document.querySelector("meta[property=csp-nonce]"),a=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));r=Promise.allSettled(n.map(f=>{if(f=M(f,i),f in N)return;N[f]=!0;const l=f.endsWith(".css"),_=l?'[rel="stylesheet"]':"";if(!!i)for(let k=t.length-1;k>=0;k--){const E=t[k];if(E.href===f&&(!l||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${f}"]${_}`))return;const m=document.createElement("link");if(m.rel=l?"stylesheet":Z,l||(m.as="script"),m.crossOrigin="",m.href=f,a&&m.setAttribute("nonce",a),document.head.appendChild(m),l)return new Promise((k,E)=>{m.addEventListener("load",k),m.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${f}`)))})}))}function u(t){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=t,window.dispatchEvent(s),!s.defaultPrevented)throw t}return r.then(t=>{for(const s of t||[])s.status==="rejected"&&u(s.reason);return e().catch(u)})},ae={};function $(o){let e,n,i;var r=o[2][0];function u(t,s){return{props:{data:t[4],form:t[3],params:t[1].params}}}return r&&(e=y(r,u(o)),o[12](e)),{c(){e&&R(e.$$.fragment),n=w()},l(t){e&&I(e.$$.fragment,t),n=w()},m(t,s){e&&L(e,t,s),v(t,n,s),i=!0},p(t,s){if(s&4&&r!==(r=t[2][0])){if(e){S();const a=e;h(a.$$.fragment,1,0,()=>{P(a,1)}),O()}r?(e=y(r,u(t)),t[12](e),R(e.$$.fragment),g(e.$$.fragment,1),L(e,n.parentNode,n)):e=null}else if(r){const a={};s&16&&(a.data=t[4]),s&8&&(a.form=t[3]),s&2&&(a.params=t[1].params),e.$set(a)}},i(t){i||(e&&g(e.$$.fragment,t),i=!0)},o(t){e&&h(e.$$.fragment,t),i=!1},d(t){t&&d(n),o[12](null),e&&P(e,t)}}}function x(o){let e,n,i;var r=o[2][0];function u(t,s){return{props:{data:t[4],params:t[1].params,$$slots:{default:[ee]},$$scope:{ctx:t}}}}return r&&(e=y(r,u(o)),o[11](e)),{c(){e&&R(e.$$.fragment),n=w()},l(t){e&&I(e.$$.fragment,t),n=w()},m(t,s){e&&L(e,t,s),v(t,n,s),i=!0},p(t,s){if(s&4&&r!==(r=t[2][0])){if(e){S();const a=e;h(a.$$.fragment,1,0,()=>{P(a,1)}),O()}r?(e=y(r,u(t)),t[11](e),R(e.$$.fragment),g(e.$$.fragment,1),L(e,n.parentNode,n)):e=null}else if(r){const a={};s&16&&(a.data=t[4]),s&2&&(a.params=t[1].params),s&8239&&(a.$$scope={dirty:s,ctx:t}),e.$set(a)}},i(t){i||(e&&g(e.$$.fragment,t),i=!0)},o(t){e&&h(e.$$.fragment,t),i=!1},d(t){t&&d(n),o[11](null),e&&P(e,t)}}}function ee(o){let e,n,i;var r=o[2][1];function u(t,s){return{props:{data:t[5],form:t[3],params:t[1].params}}}return r&&(e=y(r,u(o)),o[10](e)),{c(){e&&R(e.$$.fragment),n=w()},l(t){e&&I(e.$$.fragment,t),n=w()},m(t,s){e&&L(e,t,s),v(t,n,s),i=!0},p(t,s){if(s&4&&r!==(r=t[2][1])){if(e){S();const a=e;h(a.$$.fragment,1,0,()=>{P(a,1)}),O()}r?(e=y(r,u(t)),t[10](e),R(e.$$.fragment),g(e.$$.fragment,1),L(e,n.parentNode,n)):e=null}else if(r){const a={};s&32&&(a.data=t[5]),s&8&&(a.form=t[3]),s&2&&(a.params=t[1].params),e.$set(a)}},i(t){i||(e&&g(e.$$.fragment,t),i=!0)},o(t){e&&h(e.$$.fragment,t),i=!1},d(t){t&&d(n),o[10](null),e&&P(e,t)}}}function q(o){let e,n=o[7]&&T(o);return{c(){e=W("div"),n&&n.c(),this.h()},l(i){e=J(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var r=K(e);n&&n.l(r),r.forEach(d),this.h()},h(){A(e,"id","svelte-announcer"),A(e,"aria-live","assertive"),A(e,"aria-atomic","true"),p(e,"position","absolute"),p(e,"left","0"),p(e,"top","0"),p(e,"clip","rect(0 0 0 0)"),p(e,"clip-path","inset(50%)"),p(e,"overflow","hidden"),p(e,"white-space","nowrap"),p(e,"width","1px"),p(e,"height","1px")},m(i,r){v(i,e,r),n&&n.m(e,null)},p(i,r){i[7]?n?n.p(i,r):(n=T(i),n.c(),n.m(e,null)):n&&(n.d(1),n=null)},d(i){i&&d(e),n&&n.d()}}}function T(o){let e;return{c(){e=Y(o[8])},l(n){e=X(n,o[8])},m(n,i){v(n,e,i)},p(n,i){i&256&&Q(e,n[8])},d(n){n&&d(e)}}}function te(o){let e,n,i,r,u;const t=[x,$],s=[];function a(l,_){return l[2][1]?0:1}e=a(o),n=s[e]=t[e](o);let f=o[6]&&q(o);return{c(){n.c(),i=z(),f&&f.c(),r=w()},l(l){n.l(l),i=U(l),f&&f.l(l),r=w()},m(l,_){s[e].m(l,_),v(l,i,_),f&&f.m(l,_),v(l,r,_),u=!0},p(l,[_]){let b=e;e=a(l),e===b?s[e].p(l,_):(S(),h(s[b],1,1,()=>{s[b]=null}),O(),n=s[e],n?n.p(l,_):(n=s[e]=t[e](l),n.c()),g(n,1),n.m(i.parentNode,i)),l[6]?f?f.p(l,_):(f=q(l),f.c(),f.m(r.parentNode,r)):f&&(f.d(1),f=null)},i(l){u||(g(n),u=!0)},o(l){h(n),u=!1},d(l){l&&(d(i),d(r)),s[e].d(l),f&&f.d(l)}}}function ne(o,e,n){let{stores:i}=e,{page:r}=e,{constructors:u}=e,{components:t=[]}=e,{form:s}=e,{data_0:a=null}=e,{data_1:f=null}=e;F(i.page.notify);let l=!1,_=!1,b=null;G(()=>{const c=i.page.subscribe(()=>{l&&(n(7,_=!0),H().then(()=>{n(8,b=document.title||"untitled page")}))});return n(6,l=!0),c});function m(c){C[c?"unshift":"push"](()=>{t[1]=c,n(0,t)})}function k(c){C[c?"unshift":"push"](()=>{t[0]=c,n(0,t)})}function E(c){C[c?"unshift":"push"](()=>{t[0]=c,n(0,t)})}return o.$$set=c=>{"stores"in c&&n(9,i=c.stores),"page"in c&&n(1,r=c.page),"constructors"in c&&n(2,u=c.constructors),"components"in c&&n(0,t=c.components),"form"in c&&n(3,s=c.form),"data_0"in c&&n(4,a=c.data_0),"data_1"in c&&n(5,f=c.data_1)},o.$$.update=()=>{o.$$.dirty&514&&i.page.set(r)},[t,r,u,s,a,f,l,_,b,i,m,k,E]}class le extends V{constructor(e){super(),j(this,e,ne,te,B,{stores:9,page:1,constructors:2,components:0,form:3,data_0:4,data_1:5})}}const fe=[()=>D(()=>import("../nodes/0.C0_hCSUc.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),()=>D(()=>import("../nodes/1.DqNvkuKf.js"),__vite__mapDeps([4,1,2,5]),import.meta.url),()=>D(()=>import("../nodes/2.Cu9jABEo.js"),__vite__mapDeps([6,1,2,7]),import.meta.url)],ce=[],ue={"/":[2]},se={handleError:({error:o})=>{console.error(o)},reroute:()=>{},transport:{}},ie=Object.fromEntries(Object.entries(se.transport).map(([o,e])=>[o,e.decode])),_e=!1,me=(o,e)=>ie[o](e);export{me as decode,ie as decoders,ue as dictionary,_e as hash,se as hooks,ae as matchers,fe as nodes,le as root,ce as server_loads};
hfstudio/static/_app/immutable/entry/start.C4-zG_GX.js ADDED
@@ -0,0 +1 @@
 
 
1
+ import{l as o,a as r}from"../chunks/Bs9I3-rU.js";export{o as load_css,r as start};
hfstudio/static/_app/immutable/nodes/0.C0_hCSUc.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ import{S as Ie,i as Le,s as He,c as Ee,d as _,r as Ce,t as Se,a as Me,b as o,u as Ae,g as Ne,e as Pe,f as Z,h as n,l as se,j as Ue,k as r,m as P,n as H,o as v,p as i,q as x,v as Be,w as xe,x as me,y as ne,z as le,A as De}from"../chunks/Bqgpa-5T.js";import"../chunks/IHki7fMi.js";function je(a){let t,e="Sign In";return{c(){t=i("span"),t.textContent=e},l(s){t=r(s,"SPAN",{"data-svelte-h":!0}),H(t)!=="svelte-6n3gky"&&(t.textContent=e)},m(s,c){Z(s,t,c)},p:De,d(s){s&&_(t)}}}function Ve(a){let t,e,s;return{c(){t=i("span"),e=le("Sign Out, "),s=le(a[2])},l(c){t=r(c,"SPAN",{});var b=P(t);e=ne(b,"Sign Out, "),s=ne(b,a[2]),b.forEach(_)},m(c,b){Z(c,t,b),n(t,e),n(t,s)},p(c,b){b&4&&me(s,c[2])},d(c){c&&_(t)}}}function Oe(a){let t,e,s=a[1]?"logged in":"not logged in",c,b;return{c(){t=i("span"),e=le("Checking... ("),c=le(s),b=le(")")},l(l){t=r(l,"SPAN",{});var u=P(t);e=ne(u,"Checking... ("),c=ne(u,s),b=ne(u,")"),u.forEach(_)},m(l,u){Z(l,t,u),n(t,e),n(t,c),n(t,b)},p(l,u){u&2&&s!==(s=l[1]?"logged in":"not logged in")&&me(c,s)},d(l){l&&_(t)}}}function we(a){let t,e='<div class="bg-blue-600 text-white text-sm rounded-lg p-3 shadow-lg relative"><div class="flex items-start gap-2"><svg class="w-4 h-4 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg> <div><p class="font-medium">Sign in required</p> <p class="text-blue-100 text-xs mt-1">You need to sign in to use HuggingFace Inference Providers for text-to-speech generation.</p></div></div> <div class="absolute top-full left-1/2 transform -translate-x-1/2"><div class="w-0 h-0 border-l-4 border-r-4 border-t-4 border-l-transparent border-r-transparent border-t-blue-600"></div></div></div>';return{c(){t=i("div"),t.innerHTML=e,this.h()},l(s){t=r(s,"DIV",{class:!0,"data-svelte-h":!0}),H(t)!=="svelte-drpr74"&&(t.innerHTML=e),this.h()},h(){o(t,"class","absolute bottom-full left-0 right-0 mb-2 z-50")},m(s,c){Z(s,t,c)},d(s){s&&_(t)}}}function ke(a){let t,e,s,c="Sign In with HuggingFace Token",b,l,u,G="<strong>Manual Token Entry:</strong> Please enter your HuggingFace token.",I,h,U=`1. Go to <a href="https://huggingface.co/settings/tokens" target="_blank" class="underline text-blue-600">HuggingFace Settings</a><br/>
2
+ 2. Create a new token with &quot;Inference API&quot; permissions<br/>
3
+ 3. Copy and paste it below`,Y,z,w,E,W="HuggingFace Token",J,m,K,Q,y,j,d="Cancel",f,k,R="Sign In",O,oe,T=a[6]&&ye(),g=a[5]&&Te(a);return{c(){t=i("div"),e=i("div"),s=i("h2"),s.textContent=c,b=x(),l=i("div"),u=i("p"),u.innerHTML=G,I=x(),h=i("p"),h.innerHTML=U,Y=x(),T&&T.c(),z=x(),w=i("div"),E=i("label"),E.textContent=W,J=x(),m=i("input"),K=x(),g&&g.c(),Q=x(),y=i("div"),j=i("button"),j.textContent=d,f=x(),k=i("button"),k.textContent=R,this.h()},l(A){t=r(A,"DIV",{class:!0});var F=P(t);e=r(F,"DIV",{class:!0});var L=P(e);s=r(L,"H2",{class:!0,"data-svelte-h":!0}),H(s)!=="svelte-1t0ehet"&&(s.textContent=c),b=v(L),l=r(L,"DIV",{class:!0});var C=P(l);u=r(C,"P",{class:!0,"data-svelte-h":!0}),H(u)!=="svelte-344vn4"&&(u.innerHTML=G),I=v(C),h=r(C,"P",{class:!0,"data-svelte-h":!0}),H(h)!=="svelte-1ffvpx3"&&(h.innerHTML=U),Y=v(C),T&&T.l(C),C.forEach(_),z=v(L),w=r(L,"DIV",{class:!0});var B=P(w);E=r(B,"LABEL",{for:!0,class:!0,"data-svelte-h":!0}),H(E)!=="svelte-vtbmxo"&&(E.textContent=W),J=v(B),m=r(B,"INPUT",{id:!0,type:!0,placeholder:!0,class:!0}),K=v(B),g&&g.l(B),B.forEach(_),Q=v(L),y=r(L,"DIV",{class:!0});var $=P(y);j=r($,"BUTTON",{class:!0,"data-svelte-h":!0}),H(j)!=="svelte-csk0rj"&&(j.textContent=d),f=v($),k=r($,"BUTTON",{class:!0,"data-svelte-h":!0}),H(k)!=="svelte-1nxas5u"&&(k.textContent=R),$.forEach(_),L.forEach(_),F.forEach(_),this.h()},h(){o(s,"class","text-xl font-semibold mb-4"),o(u,"class","text-blue-800 mb-2"),o(h,"class","text-blue-700"),o(l,"class","mb-4 p-3 bg-blue-50 rounded-md text-sm"),o(E,"for","token"),o(E,"class","block text-sm font-medium text-gray-700 mb-2"),o(m,"id","token"),o(m,"type","password"),o(m,"placeholder","hf_..."),o(m,"class","w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500 focus:border-transparent"),o(w,"class","mb-4"),o(j,"class","px-4 py-2 text-gray-600 hover:text-gray-800 transition-colors"),o(k,"class","px-4 py-2 bg-orange-500 text-white rounded-md hover:bg-orange-600 transition-colors"),o(y,"class","flex justify-end gap-3"),o(e,"class","bg-white rounded-lg p-6 max-w-md w-full mx-4 shadow-xl"),o(t,"class","fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50")},m(A,F){Z(A,t,F),n(t,e),n(e,s),n(e,b),n(e,l),n(l,u),n(l,I),n(l,h),n(l,Y),T&&T.m(l,null),n(e,z),n(e,w),n(w,E),n(w,J),n(w,m),xe(m,a[4]),n(w,K),g&&g.m(w,null),n(e,Q),n(e,y),n(y,j),n(y,f),n(y,k),O||(oe=[se(m,"input",a[15]),se(m,"keydown",a[16]),se(j,"click",a[10]),se(k,"click",a[11])],O=!0)},p(A,F){A[6]?T||(T=ye(),T.c(),T.m(l,null)):T&&(T.d(1),T=null),F&16&&m.value!==A[4]&&xe(m,A[4]),A[5]?g?g.p(A,F):(g=Te(A),g.c(),g.m(w,null)):g&&(g.d(1),g=null)},d(A){A&&_(t),T&&T.d(),g&&g.d(),O=!1,Ce(oe)}}}function ye(a){let t,e="<strong>Tip:</strong> You can also run <code>huggingface-cli login</code> in your terminal to automatically use your local token.";return{c(){t=i("p"),t.innerHTML=e,this.h()},l(s){t=r(s,"P",{class:!0,"data-svelte-h":!0}),H(t)!=="svelte-1gg2uwy"&&(t.innerHTML=e),this.h()},h(){o(t,"class","text-blue-600 mt-2")},m(s,c){Z(s,t,c)},d(s){s&&_(t)}}}function Te(a){let t,e;return{c(){t=i("p"),e=le(a[5]),this.h()},l(s){t=r(s,"P",{class:!0});var c=P(t);e=ne(c,a[5]),c.forEach(_),this.h()},h(){o(t,"class","text-red-600 text-sm mt-1")},m(s,c){Z(s,t,c),n(t,e)},p(s,c){c&32&&me(e,s[5])},d(s){s&&_(t)}}}function ze(a){let t,e,s,c='<div class="flex items-center gap-3"><img src="/assets/hf-studio-logo.png" alt="HF Logo" class="w-8 h-8"/> <h1 class="text-xl font-semibold">HFStudio<sup class="text-xs text-gray-500 ml-1">BETA</sup></h1></div>',b,l,u,G="Tasks",I,h,U,Y="🎙️",z,w,E="Text to Speech",W,J,m,K="<span>🎵</span> <span>Voice Cloning</span>",Q,y,j="<span>🎧</span> <span>Speech to Text</span>",d,f,k="<span>🎼</span> <span>Sound Effects</span>",R,O,oe="<span>🎸</span> <span>Music Generation</span>",T,g,A="<span>🔊</span> <span>Audio Enhancement</span>",F,L,C,B,$,ue,fe,de,ee,pe,X,he,_e;function be(p,M){return p[7]?Oe:p[1]?Ve:je}let ae=be(a),q=ae(a),N=a[8]&&!a[1]&&we();const ge=a[13].default,V=Ee(ge,a,a[12],null);let S=a[3]&&ke(a);return{c(){t=i("div"),e=i("aside"),s=i("div"),s.innerHTML=c,b=x(),l=i("nav"),u=i("div"),u.textContent=G,I=x(),h=i("button"),U=i("span"),U.textContent=Y,z=x(),w=i("span"),w.textContent=E,J=x(),m=i("button"),m.innerHTML=K,Q=x(),y=i("button"),y.innerHTML=j,d=x(),f=i("button"),f.innerHTML=k,R=x(),O=i("button"),O.innerHTML=oe,T=x(),g=i("button"),g.innerHTML=A,F=x(),L=i("div"),C=i("button"),B=i("img"),ue=x(),q.c(),fe=x(),N&&N.c(),de=x(),ee=i("main"),V&&V.c(),pe=x(),S&&S.c(),this.h()},l(p){t=r(p,"DIV",{class:!0});var M=P(t);e=r(M,"ASIDE",{class:!0});var te=P(e);s=r(te,"DIV",{class:!0,"data-svelte-h":!0}),H(s)!=="svelte-1vahj38"&&(s.innerHTML=c),b=v(te),l=r(te,"NAV",{class:!0});var D=P(l);u=r(D,"DIV",{class:!0,"data-svelte-h":!0}),H(u)!=="svelte-1x5465q"&&(u.textContent=G),I=v(D),h=r(D,"BUTTON",{class:!0});var re=P(h);U=r(re,"SPAN",{"data-svelte-h":!0}),H(U)!=="svelte-1yx42xi"&&(U.textContent=Y),z=v(re),w=r(re,"SPAN",{"data-svelte-h":!0}),H(w)!=="svelte-2j89jk"&&(w.textContent=E),re.forEach(_),J=v(D),m=r(D,"BUTTON",{class:!0,"data-svelte-h":!0}),H(m)!=="svelte-10dl8nf"&&(m.innerHTML=K),Q=v(D),y=r(D,"BUTTON",{class:!0,"data-svelte-h":!0}),H(y)!=="svelte-wf0x5d"&&(y.innerHTML=j),d=v(D),f=r(D,"BUTTON",{class:!0,"data-svelte-h":!0}),H(f)!=="svelte-x7bha3"&&(f.innerHTML=k),R=v(D),O=r(D,"BUTTON",{class:!0,"data-svelte-h":!0}),H(O)!=="svelte-1tyblmt"&&(O.innerHTML=oe),T=v(D),g=r(D,"BUTTON",{class:!0,"data-svelte-h":!0}),H(g)!=="svelte-1emrjb3"&&(g.innerHTML=A),D.forEach(_),F=v(te),L=r(te,"DIV",{class:!0});var ie=P(L);C=r(ie,"BUTTON",{class:!0});var ce=P(C);B=r(ce,"IMG",{src:!0,alt:!0,class:!0}),ue=v(ce),q.l(ce),ce.forEach(_),fe=v(ie),N&&N.l(ie),ie.forEach(_),te.forEach(_),de=v(M),ee=r(M,"MAIN",{class:!0});var ve=P(ee);V&&V.l(ve),ve.forEach(_),pe=v(M),S&&S.l(M),M.forEach(_),this.h()},h(){o(s,"class","p-4 border-b border-gray-200"),o(u,"class","mt-2 mb-1 px-2 text-xs font-medium text-gray-500 uppercase"),o(h,"class",W="w-full flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-gray-100 transition-colors text-left "+(a[0]==="tts"?"bg-gray-100":"")),o(m,"class","w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-left opacity-40 cursor-not-allowed"),m.disabled=!0,o(y,"class","w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-left opacity-40 cursor-not-allowed"),y.disabled=!0,o(f,"class","w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-left opacity-40 cursor-not-allowed"),f.disabled=!0,o(O,"class","w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-left opacity-40 cursor-not-allowed"),O.disabled=!0,o(g,"class","w-full flex items-center gap-2 px-2 py-1.5 rounded-md text-left opacity-40 cursor-not-allowed"),g.disabled=!0,o(l,"class","p-2 text-sm flex-1"),Ue(B.src,$="/assets/hf-logo.png")||o(B,"src",$),o(B,"alt","HF Logo"),o(B,"class","w-5 h-5"),C.disabled=a[7],o(C,"class","w-full px-6 py-3 bg-black text-white rounded-lg font-medium hover:bg-gray-800 transition-colors shadow-sm flex items-center justify-center gap-2 text-sm disabled:opacity-50 disabled:cursor-not-allowed"),o(L,"class","p-2 relative"),o(e,"class","w-56 border-r border-gray-200 bg-white flex-shrink-0 flex flex-col h-full "),o(ee,"class","flex-1 overflow-auto"),o(t,"class","flex h-screen bg-white")},m(p,M){Z(p,t,M),n(t,e),n(e,s),n(e,b),n(e,l),n(l,u),n(l,I),n(l,h),n(h,U),n(h,z),n(h,w),n(l,J),n(l,m),n(l,Q),n(l,y),n(l,d),n(l,f),n(l,R),n(l,O),n(l,T),n(l,g),n(e,F),n(e,L),n(L,C),n(C,B),n(C,ue),q.m(C,null),n(L,fe),N&&N.m(L,null),n(t,de),n(t,ee),V&&V.m(ee,null),n(t,pe),S&&S.m(t,null),X=!0,he||(_e=[se(h,"click",a[14]),se(C,"click",a[9])],he=!0)},p(p,[M]){(!X||M&1&&W!==(W="w-full flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-gray-100 transition-colors text-left "+(p[0]==="tts"?"bg-gray-100":"")))&&o(h,"class",W),ae===(ae=be(p))&&q?q.p(p,M):(q.d(1),q=ae(p),q&&(q.c(),q.m(C,null))),(!X||M&128)&&(C.disabled=p[7]),p[8]&&!p[1]?N||(N=we(),N.c(),N.m(L,null)):N&&(N.d(1),N=null),V&&V.p&&(!X||M&4096)&&Ae(V,ge,p,p[12],X?Pe(ge,p[12],M,null):Ne(p[12]),null),p[3]?S?S.p(p,M):(S=ke(p),S.c(),S.m(t,null)):S&&(S.d(1),S=null)},i(p){X||(Me(V,p),X=!0)},o(p){Se(V,p),X=!1},d(p){p&&_(t),q.d(),N&&N.d(),V&&V.d(p),S&&S.d(),he=!1,Ce(_e)}}}function Fe(a,t,e){let{$$slots:s={},$$scope:c}=t,b="tts",l=!1,u="",G=!1,I="",h="",U=!1,Y=!0,z=!1;Be(()=>{window.addEventListener("show-signin-popover",()=>{e(8,z=!0),setTimeout(()=>{e(8,z=!1)},4e3)}),w(),E(),document.addEventListener("visibilitychange",()=>{document.hidden||E()}),window.addEventListener("storage",E);const d=setInterval(E,1e3);return()=>{window.removeEventListener("storage",E),clearInterval(d)}});async function w(){try{const f=await(await fetch("/api/auth/local-token")).json();f.available?(e(6,U=!0),localStorage.setItem("hf_access_token",f.token),f.user_info&&f.user_info.name!=="Local User"?(e(1,l=!0),e(2,u=f.user_info.name.split(" ")[0])):(e(1,l=!0),e(2,u="Local User"))):e(6,U=!1)}catch{e(6,U=!1)}finally{e(7,Y=!1)}}function E(){const d=localStorage.getItem("hf_access_token");d&&!l?W(d):d||(e(1,l=!1),e(2,u=""))}async function W(d){try{const f=await fetch("https://huggingface.co/api/whoami-v2",{headers:{Authorization:`Bearer ${d}`}});if(f.ok){const k=await f.json();e(1,l=!0);const R=k.name||k.fullname||k.login||k.username||"User";e(2,u=R.split(" ")[0])}else localStorage.removeItem("hf_access_token"),e(1,l=!1),e(2,u="")}catch{localStorage.removeItem("hf_access_token"),e(1,l=!1),e(2,u="")}}async function J(){if(l)localStorage.removeItem("hf_access_token"),sessionStorage.removeItem("oauth_state"),e(1,l=!1),e(2,u="");else if(window.location.hostname.includes("hf.space")||window.location.hostname.includes("huggingface.co"))try{const f=await(await fetch("/api/auth/oauth-config")).json(),k=f.scopes||"read-repos write-repos manage-repos inference-api",R=`https://huggingface.co/oauth/authorize?client_id=${f.client_id}&redirect_uri=${encodeURIComponent(window.location.origin+"/auth/callback")}&scope=${encodeURIComponent(k)}&response_type=code&state=${Date.now()}`;window.location.href=R}catch{e(3,G=!0),e(4,I=""),e(5,h="")}else e(3,G=!0),e(4,I=""),e(5,h="")}function m(){e(3,G=!1),e(4,I=""),e(5,h="")}async function K(){if(!I.trim()){e(5,h="Please enter a token");return}if(!I.startsWith("hf_")){e(5,h='Token should start with "hf_"');return}try{const d=await fetch("https://huggingface.co/api/whoami-v2",{headers:{Authorization:`Bearer ${I.trim()}`}});if(d.ok){const f=await d.json();localStorage.setItem("hf_access_token",I.trim()),e(1,l=!0);const k=f.name||f.fullname||f.login||f.username||"User";e(2,u=k.split(" ")[0]),m()}else e(5,h=`Invalid token (${d.status}). Please check your token and try again.`)}catch{e(5,h="Error validating token. Please try again.")}}const Q=()=>e(0,b="tts");function y(){I=this.value,e(4,I)}const j=d=>d.key==="Enter"&&K();return a.$$set=d=>{"$$scope"in d&&e(12,c=d.$$scope)},[b,l,u,G,I,h,U,Y,z,J,m,K,c,s,Q,y,j]}class Re extends Ie{constructor(t){super(),Le(this,t,Fe,ze,He,{})}}export{Re as component};
hfstudio/static/_app/immutable/nodes/1.DqNvkuKf.js ADDED
@@ -0,0 +1 @@
 
 
1
+ import{S as x,i as S,s as q,A as _,d as u,x as d,f as m,h as f,k as g,m as h,y as v,o as y,p as $,z as E,q as k,B as z}from"../chunks/Bqgpa-5T.js";import"../chunks/IHki7fMi.js";import{s as A}from"../chunks/Bs9I3-rU.js";const B=()=>{const s=A;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},C={subscribe(s){return B().page.subscribe(s)}};function H(s){var b;let t,r=s[0].status+"",o,n,i,p=((b=s[0].error)==null?void 0:b.message)+"",l;return{c(){t=$("h1"),o=E(r),n=k(),i=$("p"),l=E(p)},l(e){t=g(e,"H1",{});var a=h(t);o=v(a,r),a.forEach(u),n=y(e),i=g(e,"P",{});var c=h(i);l=v(c,p),c.forEach(u)},m(e,a){m(e,t,a),f(t,o),m(e,n,a),m(e,i,a),f(i,l)},p(e,[a]){var c;a&1&&r!==(r=e[0].status+"")&&d(o,r),a&1&&p!==(p=((c=e[0].error)==null?void 0:c.message)+"")&&d(l,p)},i:_,o:_,d(e){e&&(u(t),u(n),u(i))}}}function P(s,t,r){let o;return z(s,C,n=>r(0,o=n)),[o]}let F=class extends x{constructor(t){super(),S(this,t,P,H,q,{})}};export{F as component};
hfstudio/static/_app/immutable/nodes/2.Cu9jABEo.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import{r as Dt,a as $,t as w,S as je,i as Be,s as xe,c as Ge,O as B,d as u,P as jt,u as Re,g as Fe,e as Ke,Q as Bt,f as te,h as a,R as Dl,m as h,E as It,T as Vl,U as Qt,V as ae,I as J,K as X,L as Y,J as Q,b as c,D as st,l as oe,k as d,y as q,o as x,p as m,z as G,q as z,C as rt,w as Mt,x as Oe,n as qe,N as Sl,W as Zt,M as Ot,A as _t,j as el}from"../chunks/Bqgpa-5T.js";import"../chunks/IHki7fMi.js";function gt(r){return(r==null?void 0:r.length)!==void 0?r:Array.from(r)}function xl(r,e){w(r,1,1,()=>{e.delete(r.key)})}function zl(r,e,s,t,l,n,o,i,f,_,S,V){let g=r.length,v=n.length,b=g;const U={};for(;b--;)U[r[b].key]=b;const N=[],A=new Map,O=new Map,L=[];for(b=v;b--;){const k=V(l,n,b),H=s(k);let I=o.get(H);I?L.push(()=>I.p(k,e)):(I=_(H,k),I.c()),A.set(H,N[b]=I),H in U&&O.set(H,Math.abs(b-U[H]))}const T=new Set,P=new Set;function W(k){$(k,1),k.m(i,S),o.set(k.key,k),S=k.first,v--}for(;g&&v;){const k=N[v-1],H=r[g-1],I=k.key,K=H.key;k===H?(S=k.first,g--,v--):A.has(K)?!o.has(I)||T.has(I)?W(k):P.has(K)?g--:O.get(I)>O.get(K)?(P.add(I),W(k)):(T.add(K),g--):(f(H,o),g--)}for(;g--;){const k=r[g];A.has(k.key)||f(k,o)}for(;v;)W(N[v-1]);return Dt(L),N}function Le(r,e){const s={},t={},l={$$scope:1};let n=r.length;for(;n--;){const o=r[n],i=e[n];if(i){for(const f in o)f in i||(t[f]=1);for(const f in i)l[f]||(s[f]=i[f],l[f]=1);r[n]=i}else for(const f in o)l[f]=1}for(const o in t)o in s||(s[o]=void 0);return s}function Xe(r){return typeof r=="object"&&r!==null?r:{}}/**
2
+ * @license lucide-svelte v0.303.0 - ISC
3
+
4
+ This source code is licensed under the ISC license.
5
+ See the LICENSE file in the root directory of this source tree.
6
+ */const tl={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};function ll(r,e,s){const t=r.slice();return t[10]=e[s][0],t[11]=e[s][1],t}function Wt(r){let e,s=[r[11]],t={};for(let l=0;l<s.length;l+=1)t=B(t,s[l]);return{c(){e=Vl(r[10]),this.h()},l(l){e=Dl(l,r[10],{}),h(e).forEach(u),this.h()},h(){Bt(e,t)},m(l,n){te(l,e,n)},p(l,n){Bt(e,t=Le(s,[n&32&&l[11]]))},d(l){l&&u(e)}}}function nl(r){let e=r[10],s,t=r[10]&&Wt(r);return{c(){t&&t.c(),s=It()},l(l){t&&t.l(l),s=It()},m(l,n){t&&t.m(l,n),te(l,s,n)},p(l,n){l[10]?e?xe(e,l[10])?(t.d(1),t=Wt(l),e=l[10],t.c(),t.m(s.parentNode,s)):t.p(l,n):(t=Wt(l),e=l[10],t.c(),t.m(s.parentNode,s)):e&&(t.d(1),t=null,e=l[10])},d(l){l&&u(s),t&&t.d(l)}}}function Al(r){let e,s,t,l,n,o=gt(r[5]),i=[];for(let g=0;g<o.length;g+=1)i[g]=nl(ll(r,o,g));const f=r[9].default,_=Ge(f,r,r[8],null);let S=[tl,r[6],{width:r[2]},{height:r[2]},{stroke:r[1]},{"stroke-width":t=r[4]?Number(r[3])*24/Number(r[2]):r[3]},{class:l=`lucide-icon lucide lucide-${r[0]} ${r[7].class??""}`}],V={};for(let g=0;g<S.length;g+=1)V=B(V,S[g]);return{c(){e=Vl("svg");for(let g=0;g<i.length;g+=1)i[g].c();s=It(),_&&_.c(),this.h()},l(g){e=Dl(g,"svg",{width:!0,height:!0,stroke:!0,"stroke-width":!0,class:!0});var v=h(e);for(let b=0;b<i.length;b+=1)i[b].l(v);s=It(),_&&_.l(v),v.forEach(u),this.h()},h(){Bt(e,V)},m(g,v){te(g,e,v);for(let b=0;b<i.length;b+=1)i[b]&&i[b].m(e,null);a(e,s),_&&_.m(e,null),n=!0},p(g,[v]){if(v&32){o=gt(g[5]);let b;for(b=0;b<o.length;b+=1){const U=ll(g,o,b);i[b]?i[b].p(U,v):(i[b]=nl(U),i[b].c(),i[b].m(e,s))}for(;b<i.length;b+=1)i[b].d(1);i.length=o.length}_&&_.p&&(!n||v&256)&&Re(_,f,g,g[8],n?Ke(f,g[8],v,null):Fe(g[8]),null),Bt(e,V=Le(S,[tl,v&64&&g[6],(!n||v&4)&&{width:g[2]},(!n||v&4)&&{height:g[2]},(!n||v&2)&&{stroke:g[1]},(!n||v&28&&t!==(t=g[4]?Number(g[3])*24/Number(g[2]):g[3]))&&{"stroke-width":t},(!n||v&129&&l!==(l=`lucide-icon lucide lucide-${g[0]} ${g[7].class??""}`))&&{class:l}]))},i(g){n||($(_,g),n=!0)},o(g){w(_,g),n=!1},d(g){g&&u(e),jt(i,g),_&&_.d(g)}}}function Pl(r,e,s){const t=["name","color","size","strokeWidth","absoluteStrokeWidth","iconNode"];let l=Qt(e,t),{$$slots:n={},$$scope:o}=e,{name:i}=e,{color:f="currentColor"}=e,{size:_=24}=e,{strokeWidth:S=2}=e,{absoluteStrokeWidth:V=!1}=e,{iconNode:g}=e;return r.$$set=v=>{s(7,e=B(B({},e),ae(v))),s(6,l=Qt(e,t)),"name"in v&&s(0,i=v.name),"color"in v&&s(1,f=v.color),"size"in v&&s(2,_=v.size),"strokeWidth"in v&&s(3,S=v.strokeWidth),"absoluteStrokeWidth"in v&&s(4,V=v.absoluteStrokeWidth),"iconNode"in v&&s(5,g=v.iconNode),"$$scope"in v&&s(8,o=v.$$scope)},e=ae(e),[i,f,_,S,V,g,l,e,o,n]}class Ye extends je{constructor(e){super(),Be(this,e,Pl,Al,xe,{name:0,color:1,size:2,strokeWidth:3,absoluteStrokeWidth:4,iconNode:5})}}function Ml(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function Ul(r){let e,s;const t=[{name:"alert-circle"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Ml]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Ol(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Cl extends je{constructor(e){super(),Be(this,e,Ol,Ul,xe,{})}}function jl(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function Bl(r){let e,s;const t=[{name:"chevron-down"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[jl]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Ll(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["path",{d:"m6 9 6 6 6-6"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Hl extends je{constructor(e){super(),Be(this,e,Ll,Bl,xe,{})}}function Wl(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function ql(r){let e,s;const t=[{name:"code"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Wl]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Gl(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["polyline",{points:"16 18 22 12 16 6"}],["polyline",{points:"8 6 2 12 8 18"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Rl extends je{constructor(e){super(),Be(this,e,Gl,ql,xe,{})}}function Fl(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function Kl(r){let e,s;const t=[{name:"copy"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Fl]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Jl(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class qt extends je{constructor(e){super(),Be(this,e,Jl,Kl,xe,{})}}function Xl(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function Yl(r){let e,s;const t=[{name:"download"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Xl]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Ql(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["polyline",{points:"7 10 12 15 17 10"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class sl extends je{constructor(e){super(),Be(this,e,Ql,Yl,xe,{})}}function Zl(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function en(r){let e,s;const t=[{name:"loader-2"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Zl]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function tn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class ln extends je{constructor(e){super(),Be(this,e,tn,en,xe,{})}}function nn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function sn(r){let e,s;const t=[{name:"more-horizontal"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[nn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function rn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class on extends je{constructor(e){super(),Be(this,e,rn,sn,xe,{})}}function an(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function cn(r){let e,s;const t=[{name:"panels-top-left"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[an]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function fn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M3 9h18"}],["path",{d:"M9 21V9"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class un extends je{constructor(e){super(),Be(this,e,fn,cn,xe,{})}}function dn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function mn(r){let e,s;const t=[{name:"pause"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[dn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function hn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["rect",{width:"4",height:"16",x:"6",y:"4"}],["rect",{width:"4",height:"16",x:"14",y:"4"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class gn extends je{constructor(e){super(),Be(this,e,hn,mn,xe,{})}}function _n(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function pn(r){let e,s;const t=[{name:"play"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[_n]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function vn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["polygon",{points:"5 3 19 12 5 21 5 3"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Lt extends je{constructor(e){super(),Be(this,e,vn,pn,xe,{})}}function bn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function kn(r){let e,s;const t=[{name:"share"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[bn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function $n(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["path",{d:"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"}],["polyline",{points:"16 6 12 2 8 6"}],["line",{x1:"12",x2:"12",y1:"2",y2:"15"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class rl extends je{constructor(e){super(),Be(this,e,$n,kn,xe,{})}}function yn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function wn(r){let e,s;const t=[{name:"skip-back"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[yn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function En(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["polygon",{points:"19 20 9 12 19 4 19 20"}],["line",{x1:"5",x2:"5",y1:"19",y2:"5"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Nn extends je{constructor(e){super(),Be(this,e,En,wn,xe,{})}}function Tn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function In(r){let e,s;const t=[{name:"skip-forward"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Tn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function Dn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["polygon",{points:"5 4 15 12 5 20 5 4"}],["line",{x1:"19",x2:"19",y1:"5",y2:"19"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class Vn extends je{constructor(e){super(),Be(this,e,Dn,In,xe,{})}}function Cn(r){let e;const s=r[2].default,t=Ge(s,r,r[3],null);return{c(){t&&t.c()},l(l){t&&t.l(l)},m(l,n){t&&t.m(l,n),e=!0},p(l,n){t&&t.p&&(!e||n&8)&&Re(t,s,l,l[3],e?Ke(s,l[3],n,null):Fe(l[3]),null)},i(l){e||($(t,l),e=!0)},o(l){w(t,l),e=!1},d(l){t&&t.d(l)}}}function Sn(r){let e,s;const t=[{name:"x"},r[1],{iconNode:r[0]}];let l={$$slots:{default:[Cn]},$$scope:{ctx:r}};for(let n=0;n<t.length;n+=1)l=B(l,t[n]);return e=new Ye({props:l}),{c(){Q(e.$$.fragment)},l(n){Y(e.$$.fragment,n)},m(n,o){X(e,n,o),s=!0},p(n,[o]){const i=o&3?Le(t,[t[0],o&2&&Xe(n[1]),o&1&&{iconNode:n[0]}]):{};o&8&&(i.$$scope={dirty:o,ctx:n}),e.$set(i)},i(n){s||($(e.$$.fragment,n),s=!0)},o(n){w(e.$$.fragment,n),s=!1},d(n){J(e,n)}}}function xn(r,e,s){let{$$slots:t={},$$scope:l}=e;const n=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];return r.$$set=o=>{s(1,e=B(B({},e),ae(o))),"$$scope"in o&&s(3,l=o.$$scope)},e=ae(e),[n,e,t,l]}class zn extends je{constructor(e){super(),Be(this,e,xn,Sn,xe,{})}}function ol(r,e,s){const t=r.slice();return t[64]=e[s],t}function al(r,e,s){const t=r.slice();return t[56]=e[s],t}function il(r,e,s){const t=r.slice();return t[59]=e[s],t}function cl(r,e,s){const t=r.slice();return t[59]=e[s],t}function fl(r){let e;return{c(){e=m("span"),this.h()},l(s){e=d(s,"SPAN",{class:!0}),h(e).forEach(u),this.h()},h(){c(e,"class","flash-sweep svelte-zv1zz2")},m(s,t){te(s,e,t)},d(s){s&&u(e)}}}function An(r){let e,s,t,l,n='<h2 class="text-2xl font-semibold text-gray-900">Integration Code</h2> <p class="text-sm text-gray-600 mt-1">Python code to reproduce your actions via the API</p>',o,i,f,_,S,V,g,v,b,U,N,A,O,L,T,P,W,k=r[2].length>0&&ul(r);const H=[Un,Mn],I=[];function K(y,E){return y[2].length===0?0:1}return O=K(r),L=I[O]=H[O](r),{c(){e=m("div"),s=m("div"),t=m("div"),l=m("div"),l.innerHTML=n,o=z(),i=m("div"),f=m("div"),_=m("button"),S=G("API"),g=z(),v=m("button"),b=G("Local"),N=z(),k&&k.c(),A=z(),L.c(),this.h()},l(y){e=d(y,"DIV",{class:!0});var E=h(e);s=d(E,"DIV",{class:!0});var p=h(s);t=d(p,"DIV",{class:!0});var D=h(t);l=d(D,"DIV",{"data-svelte-h":!0}),qe(l)!=="svelte-jwt4ug"&&(l.innerHTML=n),o=x(D),i=d(D,"DIV",{class:!0});var C=h(i);f=d(C,"DIV",{class:!0});var R=h(f);_=d(R,"BUTTON",{class:!0});var le=h(_);S=q(le,"API"),le.forEach(u),g=x(R),v=d(R,"BUTTON",{class:!0});var ie=h(v);b=q(ie,"Local"),ie.forEach(u),R.forEach(u),N=x(C),k&&k.l(C),C.forEach(u),D.forEach(u),A=x(p),L.l(p),p.forEach(u),E.forEach(u),this.h()},h(){c(_,"class",V="px-3 py-1 text-sm font-medium rounded transition-colors "+(r[5]==="api"?"bg-white shadow-sm":"text-gray-600")),c(v,"class",U="px-3 py-1 text-sm font-medium rounded transition-colors "+(r[5]==="local"?"bg-white shadow-sm":"text-gray-600")),c(f,"class","flex items-center bg-gray-100 rounded-md p-0.5"),c(i,"class","flex items-center justify-between mt-4"),c(t,"class","mb-6"),c(s,"class","max-w-4xl mx-auto p-8"),c(e,"class","flex-1 bg-gray-50 overflow-y-auto")},m(y,E){te(y,e,E),a(e,s),a(s,t),a(t,l),a(t,o),a(t,i),a(i,f),a(f,_),a(_,S),a(f,g),a(f,v),a(v,b),a(i,N),k&&k.m(i,null),a(s,A),I[O].m(s,null),T=!0,P||(W=[oe(_,"click",r[48]),oe(v,"click",r[49])],P=!0)},p(y,E){(!T||E[0]&32&&V!==(V="px-3 py-1 text-sm font-medium rounded transition-colors "+(y[5]==="api"?"bg-white shadow-sm":"text-gray-600")))&&c(_,"class",V),(!T||E[0]&32&&U!==(U="px-3 py-1 text-sm font-medium rounded transition-colors "+(y[5]==="local"?"bg-white shadow-sm":"text-gray-600")))&&c(v,"class",U),y[2].length>0?k?(k.p(y,E),E[0]&4&&$(k,1)):(k=ul(y),k.c(),$(k,1),k.m(i,null)):k&&(rt(),w(k,1,1,()=>{k=null}),st());let p=O;O=K(y),O===p?I[O].p(y,E):(rt(),w(I[p],1,1,()=>{I[p]=null}),st(),L=I[O],L?L.p(y,E):(L=I[O]=H[O](y),L.c()),$(L,1),L.m(s,null))},i(y){T||($(k),$(L),T=!0)},o(y){w(k),w(L),T=!1},d(y){y&&u(e),k&&k.d(),I[O].d(),P=!1,Dt(W)}}}function Pn(r){let e,s,t,l,n,o,i,f,_,S=r[0].length+"",V,g,v,b,U,N,A,O,L,T,P,W,k="Model",H,I,K,y,E,p,D,C,R,le='<h3 class="font-medium text-gray-900">Voice</h3>',ie,ne,de,ce,ot='<div class="flex items-center gap-3 flex-1 min-w-0"><div class="w-10 h-10 bg-gray-400 rounded-full flex items-center justify-center text-white text-sm font-medium flex-shrink-0">+</div> <div class="flex-1 min-w-0"><div class="text-sm font-medium text-gray-600 mb-1">Clone your voice</div> <div class="text-xs text-gray-400">(coming soon)</div></div></div>',we,ke,ve,Ee,pe,Je="Exaggeration",Qe,nt,ze=r[11].toFixed(2)+"",Ne,Ce,ye,Ze,Se,Et="<span>None</span> <span>Exaggerated</span>",Ae,Te,Pe,He,F="Stability",ge,be,Ie=r[12].toFixed(2)+"",Me,et,De,Vt,Ve,at="<span>More stable</span> <span>More variable</span>",Ue,Ct,zt,fe=r[5]==="local"&&hl();const ft=[jn,On],it=[];function ut(M,Z){return M[7]?0:1}U=ut(r),N=it[U]=ft[U](r);let ue=r[8]&&gl(r),dt=gt(r[22]),se=[];for(let M=0;M<dt.length;M+=1)se[M]=vl(cl(r,dt,M));E=new Hl({props:{size:16,class:"text-gray-500"}});let $e=r[6]&&bl(r),mt=gt(r[23]),me=[];for(let M=0;M<mt.length;M+=1)me[M]=$l(al(r,mt,M));const pt=M=>w(me[M],1,1,()=>{me[M]=null});return{c(){e=m("div"),s=m("div"),fe&&fe.c(),t=z(),l=m("div"),n=m("textarea"),o=z(),i=m("div"),f=m("div"),_=m("span"),V=G(S),g=G(" / 5,000 characters"),v=z(),b=m("button"),N.c(),O=z(),ue&&ue.c(),L=z(),T=m("div"),P=m("div"),W=m("h3"),W.textContent=k,H=z(),I=m("button"),K=m("span");for(let M=0;M<se.length;M+=1)se[M].c();y=z(),Q(E.$$.fragment),p=z(),$e&&$e.c(),D=z(),C=m("div"),R=m("div"),R.innerHTML=le,ie=z(),ne=m("div");for(let M=0;M<me.length;M+=1)me[M].c();de=z(),ce=m("button"),ce.innerHTML=ot,we=z(),ke=m("div"),ve=m("div"),Ee=m("div"),pe=m("label"),pe.textContent=Je,Qe=z(),nt=m("span"),Ne=G(ze),Ce=z(),ye=m("input"),Ze=z(),Se=m("div"),Se.innerHTML=Et,Ae=z(),Te=m("div"),Pe=m("div"),He=m("label"),He.textContent=F,ge=z(),be=m("span"),Me=G(Ie),et=z(),De=m("input"),Vt=z(),Ve=m("div"),Ve.innerHTML=at,this.h()},l(M){e=d(M,"DIV",{class:!0});var Z=h(e);s=d(Z,"DIV",{class:!0});var re=h(s);fe&&fe.l(re),t=x(re),l=d(re,"DIV",{class:!0});var ee=h(l);n=d(ee,"TEXTAREA",{class:!0,placeholder:!0}),h(n).forEach(u),ee.forEach(u),o=x(re),i=d(re,"DIV",{class:!0});var he=h(i);f=d(he,"DIV",{class:!0});var j=h(f);_=d(j,"SPAN",{class:!0});var _e=h(_);V=q(_e,S),g=q(_e," / 5,000 characters"),_e.forEach(u),j.forEach(u),v=x(he),b=d(he,"BUTTON",{class:!0});var tt=h(b);N.l(tt),tt.forEach(u),he.forEach(u),O=x(re),ue&&ue.l(re),re.forEach(u),L=x(Z),T=d(Z,"DIV",{class:!0});var We=h(T);P=d(We,"DIV",{class:!0});var vt=h(P);W=d(vt,"H3",{class:!0,"data-svelte-h":!0}),qe(W)!=="svelte-b3hs3r"&&(W.textContent=k),H=x(vt),I=d(vt,"BUTTON",{class:!0});var Nt=h(I);K=d(Nt,"SPAN",{});var St=h(K);for(let ht=0;ht<se.length;ht+=1)se[ht].l(St);St.forEach(u),y=x(Nt),Y(E.$$.fragment,Nt),Nt.forEach(u),p=x(vt),$e&&$e.l(vt),vt.forEach(u),D=x(We),C=d(We,"DIV",{class:!0});var bt=h(C);R=d(bt,"DIV",{class:!0,"data-svelte-h":!0}),qe(R)!=="svelte-182x1ki"&&(R.innerHTML=le),ie=x(bt),ne=d(bt,"DIV",{class:!0});var kt=h(ne);for(let ht=0;ht<me.length;ht+=1)me[ht].l(kt);de=x(kt),ce=d(kt,"BUTTON",{class:!0,"data-svelte-h":!0}),qe(ce)!=="svelte-15dhhm1"&&(ce.innerHTML=ot),kt.forEach(u),bt.forEach(u),we=x(We),ke=d(We,"DIV",{class:!0});var $t=h(ke);ve=d($t,"DIV",{});var yt=h(ve);Ee=d(yt,"DIV",{class:!0});var ct=h(Ee);pe=d(ct,"LABEL",{for:!0,class:!0,"data-svelte-h":!0}),qe(pe)!=="svelte-1b3mj7t"&&(pe.textContent=Je),Qe=x(ct),nt=d(ct,"SPAN",{class:!0});var Ut=h(nt);Ne=q(Ut,ze),Ut.forEach(u),ct.forEach(u),Ce=x(yt),ye=d(yt,"INPUT",{id:!0,type:!0,min:!0,max:!0,step:!0,class:!0}),Ze=x(yt),Se=d(yt,"DIV",{class:!0,"data-svelte-h":!0}),qe(Se)!=="svelte-1nv1j90"&&(Se.innerHTML=Et),yt.forEach(u),Ae=x($t),Te=d($t,"DIV",{});var wt=h(Te);Pe=d(wt,"DIV",{class:!0});var xt=h(Pe);He=d(xt,"LABEL",{for:!0,class:!0,"data-svelte-h":!0}),qe(He)!=="svelte-ttm2j4"&&(He.textContent=F),ge=x(xt),be=d(xt,"SPAN",{class:!0});var lt=h(be);Me=q(lt,Ie),lt.forEach(u),xt.forEach(u),et=x(wt),De=d(wt,"INPUT",{id:!0,type:!0,min:!0,max:!0,step:!0,class:!0}),Vt=x(wt),Ve=d(wt,"DIV",{class:!0,"data-svelte-h":!0}),qe(Ve)!=="svelte-1ipakpw"&&(Ve.innerHTML=at),wt.forEach(u),$t.forEach(u),We.forEach(u),Z.forEach(u),this.h()},h(){c(n,"class","w-full h-full p-6 bg-white resize-none border-0 focus:outline-none text-gray-900 text-base leading-relaxed"),c(n,"placeholder","Welcome to our text to speech demo. This technology can transform any written content into natural sounding audio."),c(l,"class","flex-1 pb-24"),c(_,"class","text-sm text-gray-500"),c(f,"class","flex items-center justify-between mb-3"),b.disabled=A=r[7]||!r[0].trim(),c(b,"class","w-full px-6 py-3 bg-gradient-to-r from-amber-400 to-orange-500 text-white rounded-lg font-medium hover:from-amber-500 hover:to-orange-600 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2 shadow-sm"),c(i,"class","fixed bottom-0 left-56 right-80 p-4 bg-white border-t border-gray-200"),c(s,"class","flex-1 flex flex-col p-6"),c(W,"class","font-medium text-gray-900 mb-3"),c(I,"class","w-full p-3 border border-gray-200 rounded-lg bg-white text-sm focus:outline-none focus:ring-2 focus:ring-amber-400 focus:border-transparent appearance-none bg-no-repeat bg-right pr-10 shadow-sm text-left flex items-center justify-between"),c(P,"class","mb-6 relative model-dropdown"),c(R,"class","mb-3"),c(ce,"class","w-full flex items-center justify-between p-2 rounded-lg opacity-50 cursor-not-allowed text-left border border-transparent"),ce.disabled=!0,c(ne,"class","space-y-2"),c(C,"class","mb-6"),c(pe,"for","exaggeration-slider"),c(pe,"class","text-sm font-medium text-gray-700"),c(nt,"class","text-sm text-gray-500"),c(Ee,"class","flex justify-between mb-1"),c(ye,"id","exaggeration-slider"),c(ye,"type","range"),c(ye,"min","0"),c(ye,"max","1"),c(ye,"step","0.01"),c(ye,"class","w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"),c(Se,"class","flex justify-between text-xs text-gray-400 mt-1"),c(He,"for","temperature-slider"),c(He,"class","text-sm font-medium text-gray-700"),c(be,"class","text-sm text-gray-500"),c(Pe,"class","flex justify-between mb-1"),c(De,"id","temperature-slider"),c(De,"type","range"),c(De,"min","0"),c(De,"max","1"),c(De,"step","0.01"),c(De,"class","w-full h-1.5 bg-gray-200 rounded-lg appearance-none cursor-pointer slider-hf"),c(Ve,"class","flex justify-between text-xs text-gray-400 mt-1"),c(ke,"class","space-y-4 pt-4 border-t border-gray-200"),c(T,"class","w-80 border-l border-gray-200 bg-white p-4 overflow-y-auto"),c(e,"class","flex-1 flex")},m(M,Z){te(M,e,Z),a(e,s),fe&&fe.m(s,null),a(s,t),a(s,l),a(l,n),Mt(n,r[0]),a(s,o),a(s,i),a(i,f),a(f,_),a(_,V),a(_,g),a(i,v),a(i,b),it[U].m(b,null),a(s,O),ue&&ue.m(s,null),a(e,L),a(e,T),a(T,P),a(P,W),a(P,H),a(P,I),a(I,K);for(let re=0;re<se.length;re+=1)se[re]&&se[re].m(K,null);a(I,y),X(E,I,null),a(P,p),$e&&$e.m(P,null),a(T,D),a(T,C),a(C,R),a(C,ie),a(C,ne);for(let re=0;re<me.length;re+=1)me[re]&&me[re].m(ne,null);a(ne,de),a(ne,ce),a(T,we),a(T,ke),a(ke,ve),a(ve,Ee),a(Ee,pe),a(Ee,Qe),a(Ee,nt),a(nt,Ne),a(ve,Ce),a(ve,ye),Mt(ye,r[11]),a(ve,Ze),a(ve,Se),a(ke,Ae),a(ke,Te),a(Te,Pe),a(Pe,He),a(Pe,ge),a(Pe,be),a(be,Me),a(Te,et),a(Te,De),Mt(De,r[12]),a(Te,Vt),a(Te,Ve),Ue=!0,Ct||(zt=[oe(n,"input",r[40]),oe(b,"click",r[24]),oe(I,"click",r[42]),oe(ye,"change",r[46]),oe(ye,"input",r[46]),oe(De,"change",r[47]),oe(De,"input",r[47])],Ct=!0)},p(M,Z){M[5]==="local"?fe?Z[0]&32&&$(fe,1):(fe=hl(),fe.c(),$(fe,1),fe.m(s,t)):fe&&(rt(),w(fe,1,1,()=>{fe=null}),st()),Z[0]&1&&Mt(n,M[0]),(!Ue||Z[0]&1)&&S!==(S=M[0].length+"")&&Oe(V,S);let re=U;if(U=ut(M),U!==re&&(rt(),w(it[re],1,1,()=>{it[re]=null}),st(),N=it[U],N||(N=it[U]=ft[U](M),N.c()),$(N,1),N.m(b,null)),(!Ue||Z[0]&129&&A!==(A=M[7]||!M[0].trim()))&&(b.disabled=A),M[8]?ue?(ue.p(M,Z),Z[0]&256&&$(ue,1)):(ue=gl(M),ue.c(),$(ue,1),ue.m(s,null)):ue&&(rt(),w(ue,1,1,()=>{ue=null}),st()),Z[0]&4194320){dt=gt(M[22]);let ee;for(ee=0;ee<dt.length;ee+=1){const he=cl(M,dt,ee);se[ee]?se[ee].p(he,Z):(se[ee]=vl(he),se[ee].c(),se[ee].m(K,null))}for(;ee<se.length;ee+=1)se[ee].d(1);se.length=dt.length}if(M[6]?$e?$e.p(M,Z):($e=bl(M),$e.c(),$e.m(P,null)):$e&&($e.d(1),$e=null),Z[0]&8650760|Z[1]&1){mt=gt(M[23]);let ee;for(ee=0;ee<mt.length;ee+=1){const he=al(M,mt,ee);me[ee]?(me[ee].p(he,Z),$(me[ee],1)):(me[ee]=$l(he),me[ee].c(),$(me[ee],1),me[ee].m(ne,de))}for(rt(),ee=mt.length;ee<me.length;ee+=1)pt(ee);st()}(!Ue||Z[0]&2048)&&ze!==(ze=M[11].toFixed(2)+"")&&Oe(Ne,ze),Z[0]&2048&&Mt(ye,M[11]),(!Ue||Z[0]&4096)&&Ie!==(Ie=M[12].toFixed(2)+"")&&Oe(Me,Ie),Z[0]&4096&&Mt(De,M[12])},i(M){if(!Ue){$(fe),$(N),$(ue),$(E.$$.fragment,M);for(let Z=0;Z<mt.length;Z+=1)$(me[Z]);Ue=!0}},o(M){w(fe),w(N),w(ue),w(E.$$.fragment,M),me=me.filter(Boolean);for(let Z=0;Z<me.length;Z+=1)w(me[Z]);Ue=!1},d(M){M&&u(e),fe&&fe.d(),it[U].d(),ue&&ue.d(),jt(se,M),J(E),$e&&$e.d(),jt(me,M),Ct=!1,Dt(zt)}}}function ul(r){let e,s,t,l,n,o,i;return t=new qt({props:{size:16}}),{c(){e=m("button"),s=m("span"),Q(t.$$.fragment),l=G(`
7
+ Copy All`),this.h()},l(f){e=d(f,"BUTTON",{class:!0});var _=h(e);s=d(_,"SPAN",{class:!0});var S=h(s);Y(t.$$.fragment,S),l=q(S,`
8
+ Copy All`),S.forEach(u),_.forEach(u),this.h()},h(){c(s,"class","px-3 py-1 text-sm font-medium text-gray-600 flex items-center gap-2"),c(e,"class","flex items-center bg-gray-100 rounded-md p-0.5")},m(f,_){te(f,e,_),a(e,s),X(t,s,null),a(s,l),n=!0,o||(i=oe(e,"click",r[36]),o=!0)},p:_t,i(f){n||($(t.$$.fragment,f),n=!0)},o(f){w(t.$$.fragment,f),n=!1},d(f){f&&u(e),J(t),o=!1,i()}}}function Mn(r){let e,s=[],t=new Map,l,n=gt(r[2]);const o=i=>i[64].id;for(let i=0;i<n.length;i+=1){let f=ol(r,n,i),_=o(f);t.set(_,s[i]=ml(_,f))}return{c(){e=m("div");for(let i=0;i<s.length;i+=1)s[i].c();this.h()},l(i){e=d(i,"DIV",{class:!0});var f=h(e);for(let _=0;_<s.length;_+=1)s[_].l(f);f.forEach(u),this.h()},h(){c(e,"class","space-y-4")},m(i,f){te(i,e,f);for(let _=0;_<s.length;_+=1)s[_]&&s[_].m(e,null);l=!0},p(i,f){f[0]&4|f[1]&4&&(n=gt(i[2]),rt(),s=zl(s,f,o,1,i,n,t,e,xl,ml,null,ol),st())},i(i){if(!l){for(let f=0;f<n.length;f+=1)$(s[f]);l=!0}},o(i){for(let f=0;f<s.length;f+=1)w(s[f]);l=!1},d(i){i&&u(e);for(let f=0;f<s.length;f+=1)s[f].d()}}}function Un(r){let e,s='<p class="text-gray-500">Start using the UI to see generated code here</p>';return{c(){e=m("div"),e.innerHTML=s,this.h()},l(t){e=d(t,"DIV",{class:!0,"data-svelte-h":!0}),qe(e)!=="svelte-1dkp70o"&&(e.innerHTML=s),this.h()},h(){c(e,"class","bg-white rounded-lg border border-gray-200 p-8 text-center")},m(t,l){te(t,e,l)},p:_t,i:_t,o:_t,d(t){t&&u(e)}}}function dl(r){let e,s=r[64].output+"",t;return{c(){e=m("div"),t=G(s),this.h()},l(l){e=d(l,"DIV",{class:!0});var n=h(e);t=q(n,s),n.forEach(u),this.h()},h(){c(e,"class","px-4 py-2 bg-gray-900 text-green-400 font-mono text-xs border-t border-gray-200")},m(l,n){te(l,e,n),a(e,t)},p(l,n){n[0]&4&&s!==(s=l[64].output+"")&&Oe(t,s)},d(l){l&&u(e)}}}function ml(r,e){let s,t,l,n,o=e[64].title+"",i,f,_,S=e[64].timestamp+"",V,g,v,b,U,N,A,O,L=e[64].code+"",T,P,W,k,H,I;b=new qt({props:{size:14,class:"text-gray-600"}});function K(){return e[50](e[64])}let y=e[64].output&&dl(e);return{key:r,first:null,c(){s=m("div"),t=m("div"),l=m("div"),n=m("span"),i=G(o),f=z(),_=m("span"),V=G(S),g=z(),v=m("button"),Q(b.$$.fragment),U=z(),N=m("div"),A=m("pre"),O=m("code"),T=G(L),P=z(),y&&y.c(),W=z(),this.h()},l(E){s=d(E,"DIV",{class:!0});var p=h(s);t=d(p,"DIV",{class:!0});var D=h(t);l=d(D,"DIV",{class:!0});var C=h(l);n=d(C,"SPAN",{class:!0});var R=h(n);i=q(R,o),R.forEach(u),f=x(C),_=d(C,"SPAN",{class:!0});var le=h(_);V=q(le,S),le.forEach(u),C.forEach(u),g=x(D),v=d(D,"BUTTON",{class:!0,title:!0});var ie=h(v);Y(b.$$.fragment,ie),ie.forEach(u),D.forEach(u),U=x(p),N=d(p,"DIV",{class:!0});var ne=h(N);A=d(ne,"PRE",{class:!0});var de=h(A);O=d(de,"CODE",{class:!0});var ce=h(O);T=q(ce,L),ce.forEach(u),de.forEach(u),ne.forEach(u),P=x(p),y&&y.l(p),W=x(p),p.forEach(u),this.h()},h(){c(n,"class","text-sm font-medium text-gray-700"),c(_,"class","text-xs text-gray-500"),c(l,"class","flex items-center gap-3"),c(v,"class","p-1.5 hover:bg-gray-200 rounded transition-colors"),c(v,"title","Copy code"),c(t,"class","flex items-center justify-between px-4 py-2 bg-gray-50 border-b border-gray-200"),c(O,"class","language-python text-sm font-mono"),c(A,"class","p-4 overflow-x-auto bg-gray-50 text-gray-900"),c(N,"class","relative"),c(s,"class","bg-white rounded-lg border border-gray-200 overflow-hidden"),this.first=s},m(E,p){te(E,s,p),a(s,t),a(t,l),a(l,n),a(n,i),a(l,f),a(l,_),a(_,V),a(t,g),a(t,v),X(b,v,null),a(s,U),a(s,N),a(N,A),a(A,O),a(O,T),a(s,P),y&&y.m(s,null),a(s,W),k=!0,H||(I=oe(v,"click",K),H=!0)},p(E,p){e=E,(!k||p[0]&4)&&o!==(o=e[64].title+"")&&Oe(i,o),(!k||p[0]&4)&&S!==(S=e[64].timestamp+"")&&Oe(V,S),(!k||p[0]&4)&&L!==(L=e[64].code+"")&&Oe(T,L),e[64].output?y?y.p(e,p):(y=dl(e),y.c(),y.m(s,W)):y&&(y.d(1),y=null)},i(E){k||($(b.$$.fragment,E),k=!0)},o(E){w(b.$$.fragment,E),k=!1},d(E){E&&u(s),J(b),y&&y.d(),H=!1,I()}}}function hl(r){let e,s,t,l,n='<p class="font-medium text-blue-900">To run locally:</p> <code class="text-xs bg-blue-100 px-1.5 py-0.5 rounded">pip install hfstudio</code> <span class="text-blue-700">and run</span> <code class="text-xs bg-blue-100 px-1.5 py-0.5 rounded">hfstudio</code> <span class="text-blue-700">from your terminal</span>',o;return s=new Cl({props:{size:18,class:"text-blue-600 mt-0.5 flex-shrink-0"}}),{c(){e=m("div"),Q(s.$$.fragment),t=z(),l=m("div"),l.innerHTML=n,this.h()},l(i){e=d(i,"DIV",{class:!0});var f=h(e);Y(s.$$.fragment,f),t=x(f),l=d(f,"DIV",{class:!0,"data-svelte-h":!0}),qe(l)!=="svelte-p3cqs1"&&(l.innerHTML=n),f.forEach(u),this.h()},h(){c(l,"class","text-sm"),c(e,"class","mb-4 p-3 bg-blue-50 border border-blue-200 rounded-lg flex items-start gap-2")},m(i,f){te(i,e,f),X(s,e,null),a(e,t),a(e,l),o=!0},i(i){o||($(s.$$.fragment,i),o=!0)},o(i){w(s.$$.fragment,i),o=!1},d(i){i&&u(e),J(s)}}}function On(r){let e,s,t;return e=new Lt({props:{size:20}}),{c(){Q(e.$$.fragment),s=G(`
9
+ Generate speech`)},l(l){Y(e.$$.fragment,l),s=q(l,`
10
+ Generate speech`)},m(l,n){X(e,l,n),te(l,s,n),t=!0},i(l){t||($(e.$$.fragment,l),t=!0)},o(l){w(e.$$.fragment,l),t=!1},d(l){l&&u(s),J(e,l)}}}function jn(r){let e,s,t;return e=new ln({props:{size:20,class:"animate-spin"}}),{c(){Q(e.$$.fragment),s=G(`
11
+ Generating...`)},l(l){Y(e.$$.fragment,l),s=q(l,`
12
+ Generating...`)},m(l,n){X(e,l,n),te(l,s,n),t=!0},i(l){t||($(e.$$.fragment,l),t=!0)},o(l){w(e.$$.fragment,l),t=!1},d(l){l&&u(s),J(e,l)}}}function gl(r){let e,s,t,l,n,o,i,f,_,S,V,g,v,b,U,N,A,O="Share",L,T,P,W="Download",k,H,I,K,y,E,p,D,C,R,le=Tt(r[14])+"",ie,ne,de,ce,ot,we,ke=Tt(r[15])+"",ve,Ee,pe,Je,Qe,nt,ze,Ne,Ce,ye,Ze,Se,Et,Ae,Te,Pe=Tt(r[14])+"",He,F,ge,be,Ie,Me,et=Tt(r[15])+"",De,Vt,Ve,at,Ue,Ct,zt,fe,ft,it,ut,ue,dt,se,$e,mt;U=new rl({props:{size:14,class:"text-gray-600"}}),H=new sl({props:{size:14,class:"text-gray-600"}});const me=[Ln,Bn],pt=[];function M(j,_e){return j[13]?0:1}E=M(r),p=pt[E]=me[E](r),Qe=new Nn({props:{size:20,class:"text-gray-600"}});const Z=[Wn,Hn],re=[];function ee(j,_e){return j[13]?0:1}Ne=ee(r),Ce=re[Ne]=Z[Ne](r),Se=new Vn({props:{size:20,class:"text-gray-600"}}),Ue=new rl({props:{size:14}}),ft=new sl({props:{size:16,class:"text-gray-600"}}),ue=new on({props:{size:16,class:"text-gray-600"}});let he=r[8]&&_l(r);return{c(){e=m("div"),s=m("div"),t=m("div"),l=z(),n=m("div"),o=m("h3"),i=G(r[16]),f=z(),_=m("p"),S=G(r[3]),V=G(" • Created 1 second ago"),g=z(),v=m("div"),b=m("button"),Q(U.$$.fragment),N=z(),A=m("span"),A.textContent=O,L=z(),T=m("button"),P=m("span"),P.textContent=W,k=z(),Q(H.$$.fragment),I=z(),K=m("div"),y=m("button"),p.c(),D=z(),C=m("div"),R=m("span"),ie=G(le),ne=z(),de=m("div"),ce=m("div"),ot=z(),we=m("span"),ve=G(ke),Ee=z(),pe=m("div"),Je=m("button"),Q(Qe.$$.fragment),nt=z(),ze=m("button"),Ce.c(),ye=z(),Ze=m("button"),Q(Se.$$.fragment),Et=z(),Ae=m("div"),Te=m("span"),He=G(Pe),F=z(),ge=m("div"),be=m("div"),Ie=z(),Me=m("span"),De=G(et),Vt=z(),Ve=m("div"),at=m("button"),Q(Ue.$$.fragment),Ct=G(`
13
+ Share`),zt=z(),fe=m("button"),Q(ft.$$.fragment),it=z(),ut=m("button"),Q(ue.$$.fragment),dt=z(),he&&he.c(),this.h()},l(j){e=d(j,"DIV",{class:!0});var _e=h(e);s=d(_e,"DIV",{class:!0});var tt=h(s);t=d(tt,"DIV",{class:!0}),h(t).forEach(u),l=x(tt),n=d(tt,"DIV",{class:!0});var We=h(n);o=d(We,"H3",{class:!0});var vt=h(o);i=q(vt,r[16]),vt.forEach(u),f=x(We),_=d(We,"P",{class:!0});var Nt=h(_);S=q(Nt,r[3]),V=q(Nt," • Created 1 second ago"),Nt.forEach(u),We.forEach(u),g=x(tt),v=d(tt,"DIV",{class:!0});var St=h(v);b=d(St,"BUTTON",{class:!0});var bt=h(b);Y(U.$$.fragment,bt),N=x(bt),A=d(bt,"SPAN",{class:!0,"data-svelte-h":!0}),qe(A)!=="svelte-hbn8gl"&&(A.textContent=O),bt.forEach(u),L=x(St),T=d(St,"BUTTON",{class:!0});var kt=h(T);P=d(kt,"SPAN",{class:!0,"data-svelte-h":!0}),qe(P)!=="svelte-h01aeg"&&(P.textContent=W),k=x(kt),Y(H.$$.fragment,kt),kt.forEach(u),St.forEach(u),tt.forEach(u),I=x(_e),K=d(_e,"DIV",{class:!0});var $t=h(K);y=d($t,"BUTTON",{class:!0});var yt=h(y);p.l(yt),yt.forEach(u),D=x($t),C=d($t,"DIV",{class:!0});var ct=h(C);R=d(ct,"SPAN",{class:!0});var Ut=h(R);ie=q(Ut,le),Ut.forEach(u),ne=x(ct),de=d(ct,"DIV",{class:!0});var wt=h(de);ce=d(wt,"DIV",{class:!0,style:!0}),h(ce).forEach(u),wt.forEach(u),ot=x(ct),we=d(ct,"SPAN",{class:!0});var xt=h(we);ve=q(xt,ke),xt.forEach(u),ct.forEach(u),$t.forEach(u),Ee=x(_e),pe=d(_e,"DIV",{class:!0});var lt=h(pe);Je=d(lt,"BUTTON",{class:!0,title:!0});var ht=h(Je);Y(Qe.$$.fragment,ht),ht.forEach(u),nt=x(lt),ze=d(lt,"BUTTON",{class:!0});var Gt=h(ze);Ce.l(Gt),Gt.forEach(u),ye=x(lt),Ze=d(lt,"BUTTON",{class:!0,title:!0});var Rt=h(Ze);Y(Se.$$.fragment,Rt),Rt.forEach(u),Et=x(lt),Ae=d(lt,"DIV",{class:!0});var At=h(Ae);Te=d(At,"SPAN",{class:!0});var Ft=h(Te);He=q(Ft,Pe),Ft.forEach(u),F=x(At),ge=d(At,"DIV",{class:!0});var Kt=h(ge);be=d(Kt,"DIV",{class:!0,style:!0}),h(be).forEach(u),Kt.forEach(u),Ie=x(At),Me=d(At,"SPAN",{class:!0});var Jt=h(Me);De=q(Jt,et),Jt.forEach(u),At.forEach(u),Vt=x(lt),Ve=d(lt,"DIV",{class:!0});var Pt=h(Ve);at=d(Pt,"BUTTON",{class:!0});var Ht=h(at);Y(Ue.$$.fragment,Ht),Ct=q(Ht,`
14
+ Share`),Ht.forEach(u),zt=x(Pt),fe=d(Pt,"BUTTON",{class:!0,title:!0});var Xt=h(fe);Y(ft.$$.fragment,Xt),Xt.forEach(u),it=x(Pt),ut=d(Pt,"BUTTON",{class:!0,title:!0});var Yt=h(ut);Y(ue.$$.fragment,Yt),Yt.forEach(u),Pt.forEach(u),lt.forEach(u),dt=x(_e),he&&he.l(_e),_e.forEach(u),this.h()},h(){c(t,"class","w-2 h-2 bg-green-500 rounded-full"),c(o,"class","font-medium text-gray-900 text-sm"),c(_,"class","text-xs text-gray-500"),c(n,"class","flex-1"),c(A,"class","text-gray-700"),c(b,"class","flex items-center gap-1.5 px-3 py-1.5 text-sm border border-gray-200 rounded-md hover:bg-gray-50 transition-colors"),c(P,"class","text-gray-700"),c(T,"class","flex items-center gap-1.5 px-3 py-1.5 text-sm border border-gray-200 rounded-md hover:bg-gray-50 transition-colors"),c(v,"class","flex items-center gap-2"),c(s,"class","flex items-center gap-3 mb-4"),c(y,"class","w-8 h-8 bg-black rounded-full flex items-center justify-center hover:bg-gray-800 transition-colors"),c(R,"class","text-xs text-gray-500 font-mono"),c(ce,"class","h-full bg-gradient-to-r from-amber-400 to-orange-500 rounded-full transition-all"),Ot(ce,"width",r[14]/r[15]*100+"%"),c(de,"class","flex-1 h-1 bg-gray-200 rounded-full cursor-pointer"),c(we,"class","text-xs text-gray-500 font-mono"),c(C,"class","flex-1 flex items-center gap-2"),c(K,"class","flex items-center gap-3 mb-4"),c(Je,"class","p-2 hover:bg-gray-100 rounded-full"),c(Je,"title","Skip back"),c(ze,"class","w-12 h-12 bg-black rounded-full flex items-center justify-center hover:bg-gray-800 transition-colors"),c(Ze,"class","p-2 hover:bg-gray-100 rounded-full"),c(Ze,"title","Skip forward"),c(Te,"class","text-xs text-gray-500 font-mono"),c(be,"class","h-full bg-gradient-to-r from-amber-400 to-orange-500 rounded-full transition-all"),Ot(be,"width",r[14]/r[15]*100+"%"),c(ge,"class","flex-1 h-1 bg-gray-200 rounded-full"),c(Me,"class","text-xs text-gray-500 font-mono"),c(Ae,"class","flex-1 flex items-center gap-3"),c(at,"class","flex items-center gap-2 px-3 py-1.5 text-sm border border-gray-200 rounded-md hover:bg-gray-50"),c(fe,"class","p-2 hover:bg-gray-100 rounded-md"),c(fe,"title","Download"),c(ut,"class","p-2 hover:bg-gray-100 rounded-md"),c(ut,"title","More options"),c(Ve,"class","flex items-center gap-2"),c(pe,"class","flex items-center gap-4 mb-4"),c(e,"class","p-4 border border-gray-200 rounded-lg bg-white")},m(j,_e){te(j,e,_e),a(e,s),a(s,t),a(s,l),a(s,n),a(n,o),a(o,i),a(n,f),a(n,_),a(_,S),a(_,V),a(s,g),a(s,v),a(v,b),X(U,b,null),a(b,N),a(b,A),a(v,L),a(v,T),a(T,P),a(T,k),X(H,T,null),a(e,I),a(e,K),a(K,y),pt[E].m(y,null),a(K,D),a(K,C),a(C,R),a(R,ie),a(C,ne),a(C,de),a(de,ce),a(C,ot),a(C,we),a(we,ve),a(e,Ee),a(e,pe),a(pe,Je),X(Qe,Je,null),a(pe,nt),a(pe,ze),re[Ne].m(ze,null),a(pe,ye),a(pe,Ze),X(Se,Ze,null),a(pe,Et),a(pe,Ae),a(Ae,Te),a(Te,He),a(Ae,F),a(Ae,ge),a(ge,be),a(Ae,Ie),a(Ae,Me),a(Me,De),a(pe,Vt),a(pe,Ve),a(Ve,at),X(Ue,at,null),a(at,Ct),a(Ve,zt),a(Ve,fe),X(ft,fe,null),a(Ve,it),a(Ve,ut),X(ue,ut,null),a(e,dt),he&&he.m(e,null),se=!0,$e||(mt=[oe(b,"click",Tl),oe(T,"click",r[30]),oe(y,"click",r[25]),oe(ze,"click",r[25]),oe(at,"click",Tl),oe(fe,"click",r[30])],$e=!0)},p(j,_e){(!se||_e[0]&65536)&&Oe(i,j[16]),(!se||_e[0]&8)&&Oe(S,j[3]);let tt=E;E=M(j),E!==tt&&(rt(),w(pt[tt],1,1,()=>{pt[tt]=null}),st(),p=pt[E],p||(p=pt[E]=me[E](j),p.c()),$(p,1),p.m(y,null)),(!se||_e[0]&16384)&&le!==(le=Tt(j[14])+"")&&Oe(ie,le),(!se||_e[0]&49152)&&Ot(ce,"width",j[14]/j[15]*100+"%"),(!se||_e[0]&32768)&&ke!==(ke=Tt(j[15])+"")&&Oe(ve,ke);let We=Ne;Ne=ee(j),Ne!==We&&(rt(),w(re[We],1,1,()=>{re[We]=null}),st(),Ce=re[Ne],Ce||(Ce=re[Ne]=Z[Ne](j),Ce.c()),$(Ce,1),Ce.m(ze,null)),(!se||_e[0]&16384)&&Pe!==(Pe=Tt(j[14])+"")&&Oe(He,Pe),(!se||_e[0]&49152)&&Ot(be,"width",j[14]/j[15]*100+"%"),(!se||_e[0]&32768)&&et!==(et=Tt(j[15])+"")&&Oe(De,et),j[8]?he?he.p(j,_e):(he=_l(j),he.c(),he.m(e,null)):he&&(he.d(1),he=null)},i(j){se||($(U.$$.fragment,j),$(H.$$.fragment,j),$(p),$(Qe.$$.fragment,j),$(Ce),$(Se.$$.fragment,j),$(Ue.$$.fragment,j),$(ft.$$.fragment,j),$(ue.$$.fragment,j),se=!0)},o(j){w(U.$$.fragment,j),w(H.$$.fragment,j),w(p),w(Qe.$$.fragment,j),w(Ce),w(Se.$$.fragment,j),w(Ue.$$.fragment,j),w(ft.$$.fragment,j),w(ue.$$.fragment,j),se=!1},d(j){j&&u(e),J(U),J(H),pt[E].d(),J(Qe),re[Ne].d(),J(Se),J(Ue),J(ft),J(ue),he&&he.d(),$e=!1,Dt(mt)}}}function Bn(r){let e,s;return e=new Lt({props:{size:14,class:"text-white ml-0.5"}}),{c(){Q(e.$$.fragment)},l(t){Y(e.$$.fragment,t)},m(t,l){X(e,t,l),s=!0},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){w(e.$$.fragment,t),s=!1},d(t){J(e,t)}}}function Ln(r){let e;return{c(){e=m("div"),this.h()},l(s){e=d(s,"DIV",{class:!0}),h(e).forEach(u),this.h()},h(){c(e,"class","pause-filled text-white")},m(s,t){te(s,e,t)},i:_t,o:_t,d(s){s&&u(e)}}}function Hn(r){let e,s;return e=new Lt({props:{size:20,class:"text-white ml-0.5"}}),{c(){Q(e.$$.fragment)},l(t){Y(e.$$.fragment,t)},m(t,l){X(e,t,l),s=!0},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){w(e.$$.fragment,t),s=!1},d(t){J(e,t)}}}function Wn(r){let e;return{c(){e=m("div"),this.h()},l(s){e=d(s,"DIV",{class:!0}),h(e).forEach(u),this.h()},h(){c(e,"class","pause-filled text-white scale-150")},m(s,t){te(s,e,t)},i:_t,o:_t,d(s){s&&u(e)}}}function _l(r){let e,s,t,l;return{c(){e=m("audio"),this.h()},l(n){e=d(n,"AUDIO",{src:!0,style:!0}),h(e).forEach(u),this.h()},h(){el(e.src,s=r[8])||c(e,"src",s),Ot(e,"display","none")},m(n,o){te(n,e,o),r[41](e),t||(l=[oe(e,"loadedmetadata",r[26]),oe(e,"timeupdate",r[27]),oe(e,"play",r[28]),oe(e,"pause",r[29])],t=!0)},p(n,o){o[0]&256&&!el(e.src,s=n[8])&&c(e,"src",s)},d(n){n&&u(e),r[41](null),t=!1,Dt(l)}}}function pl(r){let e=r[59].name+"",s,t,l=r[59].badge&&qn(r);return{c(){s=G(e),l&&l.c(),t=It()},l(n){s=q(n,e),l&&l.l(n),t=It()},m(n,o){te(n,s,o),l&&l.m(n,o),te(n,t,o)},p(n,o){n[59].badge&&l.p(n,o)},d(n){n&&(u(s),u(t)),l&&l.d(n)}}}function qn(r){let e,s,t,l=r[59].badge+"",n,o;return{c(){e=G(" "),s=m("span"),t=G("("),n=G(l),o=G(")"),this.h()},l(i){e=q(i," "),s=d(i,"SPAN",{class:!0});var f=h(s);t=q(f,"("),n=q(f,l),o=q(f,")"),f.forEach(u),this.h()},h(){c(s,"class","text-xs text-gray-500")},m(i,f){te(i,e,f),te(i,s,f),a(s,t),a(s,n),a(s,o)},p:_t,d(i){i&&(u(e),u(s))}}}function vl(r){let e,s=r[59].name===r[4]&&pl(r);return{c(){s&&s.c(),e=It()},l(t){s&&s.l(t),e=It()},m(t,l){s&&s.m(t,l),te(t,e,l)},p(t,l){t[59].name===t[4]?s?s.p(t,l):(s=pl(t),s.c(),s.m(e.parentNode,e)):s&&(s.d(1),s=null)},d(t){t&&u(e),s&&s.d(t)}}}function bl(r){let e,s=gt(r[22]),t=[];for(let l=0;l<s.length;l+=1)t[l]=kl(il(r,s,l));return{c(){e=m("div");for(let l=0;l<t.length;l+=1)t[l].c();this.h()},l(l){e=d(l,"DIV",{class:!0});var n=h(e);for(let o=0;o<t.length;o+=1)t[o].l(n);n.forEach(u),this.h()},h(){c(e,"class","absolute top-full left-0 right-0 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-10")},m(l,n){te(l,e,n);for(let o=0;o<t.length;o+=1)t[o]&&t[o].m(e,null)},p(l,n){if(n[0]&4194384){s=gt(l[22]);let o;for(o=0;o<s.length;o+=1){const i=il(l,s,o);t[o]?t[o].p(i,n):(t[o]=kl(i),t[o].c(),t[o].m(e,null))}for(;o<t.length;o+=1)t[o].d(1);t.length=s.length}},d(l){l&&u(e),jt(t,l)}}}function Gn(r){let e,s,t,l=r[59].badge+"",n,o;return{c(){e=G(" "),s=m("span"),t=G("("),n=G(l),o=G(")"),this.h()},l(i){e=q(i," "),s=d(i,"SPAN",{class:!0});var f=h(s);t=q(f,"("),n=q(f,l),o=q(f,")"),f.forEach(u),this.h()},h(){c(s,"class","text-xs text-gray-500")},m(i,f){te(i,e,f),te(i,s,f),a(s,t),a(s,n),a(s,o)},p:_t,d(i){i&&(u(e),u(s))}}}function kl(r){let e,s=r[59].name+"",t,l,n,o,i,f=r[59].badge&&Gn(r);function _(){return r[43](r[59])}return{c(){e=m("button"),t=G(s),f&&f.c(),l=z(),this.h()},l(S){e=d(S,"BUTTON",{class:!0});var V=h(e);t=q(V,s),f&&f.l(V),l=x(V),V.forEach(u),this.h()},h(){c(e,"class",n="w-full px-3 py-2 text-left hover:bg-gray-50 transition-colors text-sm "+(r[59].name===r[4]?"bg-gray-100":""))},m(S,V){te(S,e,V),a(e,t),f&&f.m(e,null),a(e,l),o||(i=oe(e,"click",_),o=!0)},p(S,V){r=S,r[59].badge&&f.p(r,V),V[0]&16&&n!==(n="w-full px-3 py-2 text-left hover:bg-gray-50 transition-colors text-sm "+(r[59].name===r[4]?"bg-gray-100":""))&&c(e,"class",n)},d(S){S&&u(e),f&&f.d(),o=!1,i()}}}function Rn(r){let e,s;return e=new Lt({props:{size:16,class:"text-gray-600"}}),{c(){Q(e.$$.fragment)},l(t){Y(e.$$.fragment,t)},m(t,l){X(e,t,l),s=!0},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){w(e.$$.fragment,t),s=!1},d(t){J(e,t)}}}function Fn(r){let e,s;return e=new gn({props:{size:16,class:"text-gray-600"}}),{c(){Q(e.$$.fragment)},l(t){Y(e.$$.fragment,t)},m(t,l){X(e,t,l),s=!0},i(t){s||($(e.$$.fragment,t),s=!0)},o(t){w(e.$$.fragment,t),s=!1},d(t){J(e,t)}}}function $l(r){let e,s,t,l=r[56].name[0]+"",n,o,i,f,_=r[56].name+"",S,V,g,v=r[56].description+"",b,U,N,A,O,L,T,P,W,k;const H=[Fn,Rn],I=[];function K(p,D){return p[18]===p[56].name?0:1}A=K(r),O=I[A]=H[A](r);function y(...p){return r[44](r[56],...p)}function E(){return r[45](r[56])}return{c(){e=m("button"),s=m("div"),t=m("div"),n=G(l),o=z(),i=m("div"),f=m("div"),S=G(_),V=z(),g=m("div"),b=G(v),U=z(),N=m("button"),O.c(),L=z(),this.h()},l(p){e=d(p,"BUTTON",{class:!0});var D=h(e);s=d(D,"DIV",{class:!0});var C=h(s);t=d(C,"DIV",{class:!0});var R=h(t);n=q(R,l),R.forEach(u),o=x(C),i=d(C,"DIV",{class:!0});var le=h(i);f=d(le,"DIV",{class:!0});var ie=h(f);S=q(ie,_),ie.forEach(u),V=x(le),g=d(le,"DIV",{class:!0});var ne=h(g);b=q(ne,v),ne.forEach(u),le.forEach(u),C.forEach(u),U=x(D),N=d(D,"BUTTON",{class:!0,title:!0});var de=h(N);O.l(de),de.forEach(u),L=x(D),D.forEach(u),this.h()},h(){c(t,"class","w-10 h-10 bg-gradient-to-br from-amber-400 to-orange-500 rounded-full flex items-center justify-center text-white text-sm font-semibold flex-shrink-0"),c(f,"class","text-sm font-medium text-gray-900 mb-1"),c(g,"class","text-xs text-gray-500 leading-relaxed"),c(i,"class","flex-1 min-w-0"),c(s,"class","flex items-center gap-3 flex-1 min-w-0"),c(N,"class","p-2 rounded-full hover:bg-gray-200 transition-colors flex-shrink-0 ml-2"),c(N,"title","Play sample"),c(e,"class",T="w-full flex items-center justify-between p-2 rounded-lg hover:bg-gray-50 transition-colors text-left group border border-transparent "+(r[56].name===r[3]?"bg-gray-100 border-gray-200":""))},m(p,D){te(p,e,D),a(e,s),a(s,t),a(t,n),a(s,o),a(s,i),a(i,f),a(f,S),a(i,V),a(i,g),a(g,b),a(e,U),a(e,N),I[A].m(N,null),a(e,L),P=!0,W||(k=[oe(N,"click",y),oe(e,"click",E)],W=!0)},p(p,D){r=p;let C=A;A=K(r),A!==C&&(rt(),w(I[C],1,1,()=>{I[C]=null}),st(),O=I[A],O||(O=I[A]=H[A](r),O.c()),$(O,1),O.m(N,null)),(!P||D[0]&8&&T!==(T="w-full flex items-center justify-between p-2 rounded-lg hover:bg-gray-50 transition-colors text-left group border border-transparent "+(r[56].name===r[3]?"bg-gray-100 border-gray-200":"")))&&c(e,"class",T)},i(p){P||($(O),P=!0)},o(p){w(O),P=!1},d(p){p&&u(e),I[A].d(),W=!1,Dt(k)}}}function yl(r){let e,s;return{c(){e=m("div"),s=G(r[9]),this.h()},l(t){e=d(t,"DIV",{class:!0});var l=h(e);s=q(l,r[9]),l.forEach(u),this.h()},h(){c(e,"class","fixed bottom-4 right-4 px-4 py-2 bg-gray-900 text-white rounded-lg shadow-lg z-50 animate-fade-in svelte-zv1zz2")},m(t,l){te(t,e,l),a(e,s)},p(t,l){l[0]&512&&Oe(s,t[9])},d(t){t&&u(e)}}}function wl(r){let e,s,t,l,n,o,i,f,_,S,V,g,v="An error occurred while processing your request",b,U,N,A,O,L,T,P,W,k,H,I,K="Close",y,E,p;o=new Cl({props:{size:20,class:"text-red-600"}}),N=new zn({props:{size:20,class:"text-gray-500"}});let D=r[21]&&El(r);return W=new qt({props:{size:16}}),{c(){e=m("div"),s=m("div"),t=m("div"),l=m("div"),n=m("div"),Q(o.$$.fragment),i=z(),f=m("div"),_=m("h3"),S=G(r[20]),V=z(),g=m("p"),g.textContent=v,b=z(),U=m("button"),Q(N.$$.fragment),A=z(),O=m("div"),D&&D.c(),L=z(),T=m("div"),P=m("button"),Q(W.$$.fragment),k=G(`
15
+ Copy Error`),H=z(),I=m("button"),I.textContent=K,this.h()},l(C){e=d(C,"DIV",{class:!0});var R=h(e);s=d(R,"DIV",{class:!0});var le=h(s);t=d(le,"DIV",{class:!0});var ie=h(t);l=d(ie,"DIV",{class:!0});var ne=h(l);n=d(ne,"DIV",{class:!0});var de=h(n);Y(o.$$.fragment,de),de.forEach(u),i=x(ne),f=d(ne,"DIV",{class:!0});var ce=h(f);_=d(ce,"H3",{class:!0});var ot=h(_);S=q(ot,r[20]),ot.forEach(u),V=x(ce),g=d(ce,"P",{class:!0,"data-svelte-h":!0}),qe(g)!=="svelte-1l3zl3"&&(g.textContent=v),ce.forEach(u),ne.forEach(u),b=x(ie),U=d(ie,"BUTTON",{class:!0,title:!0});var we=h(U);Y(N.$$.fragment,we),we.forEach(u),ie.forEach(u),A=x(le),O=d(le,"DIV",{class:!0});var ke=h(O);D&&D.l(ke),ke.forEach(u),L=x(le),T=d(le,"DIV",{class:!0});var ve=h(T);P=d(ve,"BUTTON",{class:!0});var Ee=h(P);Y(W.$$.fragment,Ee),k=q(Ee,`
16
+ Copy Error`),Ee.forEach(u),H=x(ve),I=d(ve,"BUTTON",{class:!0,"data-svelte-h":!0}),qe(I)!=="svelte-4sxk6g"&&(I.textContent=K),ve.forEach(u),le.forEach(u),R.forEach(u),this.h()},h(){c(n,"class","w-10 h-10 bg-red-100 rounded-full flex items-center justify-center flex-shrink-0"),c(_,"class","text-lg font-semibold text-gray-900 truncate"),c(g,"class","text-sm text-gray-600"),c(f,"class","min-w-0"),c(l,"class","flex items-center gap-3 min-w-0"),c(U,"class","p-2 hover:bg-red-100 rounded-full transition-colors flex-shrink-0"),c(U,"title","Close"),c(t,"class","flex items-center justify-between p-6 border-b border-gray-200 bg-red-50 flex-shrink-0"),c(O,"class","p-6 overflow-y-auto flex-1 min-h-0"),c(P,"class","flex items-center gap-2 px-4 py-2 text-gray-700 hover:bg-gray-200 rounded-lg transition-colors"),c(I,"class","px-6 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700 transition-colors"),c(T,"class","flex items-center justify-end gap-3 p-6 border-t border-gray-200 bg-gray-50 flex-shrink-0"),c(s,"class","bg-white rounded-xl shadow-2xl max-w-2xl w-full max-h-[80vh] flex flex-col"),c(e,"class","fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4")},m(C,R){te(C,e,R),a(e,s),a(s,t),a(t,l),a(l,n),X(o,n,null),a(l,i),a(l,f),a(f,_),a(_,S),a(f,V),a(f,g),a(t,b),a(t,U),X(N,U,null),a(s,A),a(s,O),D&&D.m(O,null),a(s,L),a(s,T),a(T,P),X(W,P,null),a(P,k),a(T,H),a(T,I),y=!0,E||(p=[oe(U,"click",r[34]),oe(P,"click",r[35]),oe(I,"click",r[34])],E=!0)},p(C,R){(!y||R[0]&1048576)&&Oe(S,C[20]),C[21]?D?D.p(C,R):(D=El(C),D.c(),D.m(O,null)):D&&(D.d(1),D=null)},i(C){y||($(o.$$.fragment,C),$(N.$$.fragment,C),$(W.$$.fragment,C),y=!0)},o(C){w(o.$$.fragment,C),w(N.$$.fragment,C),w(W.$$.fragment,C),y=!1},d(C){C&&u(e),J(o),J(N),D&&D.d(),J(W),E=!1,Dt(p)}}}function El(r){let e,s,t="Error Details:",l,n,o;return{c(){e=m("div"),s=m("h4"),s.textContent=t,l=z(),n=m("pre"),o=G(r[21]),this.h()},l(i){e=d(i,"DIV",{class:!0});var f=h(e);s=d(f,"H4",{class:!0,"data-svelte-h":!0}),qe(s)!=="svelte-3lmggt"&&(s.textContent=t),l=x(f),n=d(f,"PRE",{class:!0});var _=h(n);o=q(_,r[21]),_.forEach(u),f.forEach(u),this.h()},h(){c(s,"class","text-sm font-medium text-gray-900 mb-2"),c(n,"class","text-xs text-gray-700 whitespace-pre-wrap font-mono leading-relaxed break-words"),c(e,"class","bg-gray-50 rounded-lg p-4 border")},m(i,f){te(i,e,f),a(e,s),a(e,l),a(e,n),a(n,o)},p(i,f){f[0]&2097152&&Oe(o,i[21])},d(i){i&&u(e)}}}function Kn(r){let e,s,t,l,n,o,i,f,_,S,V,g,v,b,U,N,A,O,L,T,P,W;i=new un({props:{size:14}}),g=new Rl({props:{size:14}});let k=r[10]&&fl();const H=[Pn,An],I=[];function K(p,D){return p[1]==="ui"?0:1}N=K(r),A=I[N]=H[N](r);let y=r[9]&&yl(r),E=r[19]&&wl(r);return{c(){e=m("div"),s=m("header"),t=m("div"),l=m("div"),n=m("div"),o=m("button"),Q(i.$$.fragment),f=G(`
17
+ UI`),S=z(),V=m("button"),Q(g.$$.fragment),v=G(`
18
+ Code Recorder
19
+ `),k&&k.c(),U=z(),A.c(),O=z(),y&&y.c(),L=z(),E&&E.c(),this.h()},l(p){e=d(p,"DIV",{class:!0});var D=h(e);s=d(D,"HEADER",{class:!0});var C=h(s);t=d(C,"DIV",{class:!0});var R=h(t);l=d(R,"DIV",{class:!0});var le=h(l);n=d(le,"DIV",{class:!0});var ie=h(n);o=d(ie,"BUTTON",{class:!0});var ne=h(o);Y(i.$$.fragment,ne),f=q(ne,`
20
+ UI`),ne.forEach(u),S=x(ie),V=d(ie,"BUTTON",{class:!0});var de=h(V);Y(g.$$.fragment,de),v=q(de,`
21
+ Code Recorder
22
+ `),k&&k.l(de),de.forEach(u),ie.forEach(u),le.forEach(u),R.forEach(u),C.forEach(u),U=x(D),A.l(D),O=x(D),y&&y.l(D),L=x(D),E&&E.l(D),D.forEach(u),this.h()},h(){c(o,"class",_="flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded transition-colors "+(r[1]==="ui"?"bg-white shadow-sm":"text-gray-600")),c(V,"class",b="flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded transition-colors relative overflow-hidden "+(r[1]==="code"?"bg-white shadow-sm":"text-gray-600")+" "+(r[10]?"code-flash":"")+" svelte-zv1zz2"),c(n,"class","flex items-center bg-gray-100 rounded-md p-0.5"),c(l,"class","flex items-center gap-2"),c(t,"class","flex items-center justify-end px-4 py-2"),c(s,"class","border-b border-gray-200 bg-white"),c(e,"class","flex flex-col h-full")},m(p,D){te(p,e,D),a(e,s),a(s,t),a(t,l),a(l,n),a(n,o),X(i,o,null),a(o,f),a(n,S),a(n,V),X(g,V,null),a(V,v),k&&k.m(V,null),a(e,U),I[N].m(e,null),a(e,O),y&&y.m(e,null),a(e,L),E&&E.m(e,null),T=!0,P||(W=[oe(o,"click",r[38]),oe(V,"click",r[39]),oe(e,"click",r[32])],P=!0)},p(p,D){(!T||D[0]&2&&_!==(_="flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded transition-colors "+(p[1]==="ui"?"bg-white shadow-sm":"text-gray-600")))&&c(o,"class",_),p[10]?k||(k=fl(),k.c(),k.m(V,null)):k&&(k.d(1),k=null),(!T||D[0]&1026&&b!==(b="flex items-center gap-1.5 px-3 py-1 text-sm font-medium rounded transition-colors relative overflow-hidden "+(p[1]==="code"?"bg-white shadow-sm":"text-gray-600")+" "+(p[10]?"code-flash":"")+" svelte-zv1zz2"))&&c(V,"class",b);let C=N;N=K(p),N===C?I[N].p(p,D):(rt(),w(I[C],1,1,()=>{I[C]=null}),st(),A=I[N],A?A.p(p,D):(A=I[N]=H[N](p),A.c()),$(A,1),A.m(e,O)),p[9]?y?y.p(p,D):(y=yl(p),y.c(),y.m(e,L)):y&&(y.d(1),y=null),p[19]?E?(E.p(p,D),D[0]&524288&&$(E,1)):(E=wl(p),E.c(),$(E,1),E.m(e,null)):E&&(rt(),w(E,1,1,()=>{E=null}),st())},i(p){T||($(i.$$.fragment,p),$(g.$$.fragment,p),$(A),$(E),T=!0)},o(p){w(i.$$.fragment,p),w(g.$$.fragment,p),w(A),w(E),T=!1},d(p){p&&u(e),J(i),J(g),k&&k.d(),I[N].d(),y&&y.d(),E&&E.d(),P=!1,Dt(W)}}}function Nl(){if(typeof window<"u"&&window.gradio&&window.gradio.auth_token)return window.gradio.auth_token;const r=document.querySelector('meta[name="hf-oauth-token"]');if(r){const t=r.getAttribute("content");if(t)return t}const e=["hf_access_token","hf_token","huggingface_token","oauth_token","access_token"];for(const t of e){const l=localStorage.getItem(t);if(l)return l}for(const t of e){const l=sessionStorage.getItem(t);if(l)return l}const s=document.cookie.split(";");for(const t of s){const[l,n]=t.trim().split("=");if(l&&(l.includes("token")||l.includes("hf")||l.includes("oauth")))return decodeURIComponent(n)}try{const t=document.querySelector("script[data-hf-token]");if(t){const l=t.getAttribute("data-hf-token");if(l)return l}}catch{}return null}function Tt(r){const e=Math.floor(r/60),s=Math.floor(r%60);return`${e}:${s.toString().padStart(2,"0")}`}function Tl(){}function Il(){return`# Install required packages
23
+ # pip install huggingface-hub
24
+
25
+ from huggingface_hub import InferenceClient
26
+ import base64
27
+ import io
28
+
29
+ # Initialize the client
30
+ client = InferenceClient(
31
+ provider="fal-ai",
32
+ api_key="YOUR_HF_TOKEN", # Get your token from https://huggingface.co/settings/tokens
33
+ )`}function Jn(){return`# Save the audio to a file
34
+ output_filename = "output_speech.wav"
35
+
36
+ with open(output_filename, "wb") as f:
37
+ f.write(audio_bytes)
38
+
39
+ print(f"✓ Audio saved to {output_filename}")
40
+
41
+ # Optional: Play the audio (requires additional packages)
42
+ # from playsound import playsound
43
+ # playsound(output_filename)`}function Xn(r,e,s){let t="In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.",l="Lily",n="Chatterbox",o="api",i="ui",f=!1,_=!1,S=[],V=null,g=null,v=!1,b=.25,U=.7,N=!1,A=0,O=0,L="",T=null,P=null,W=null,k=!1,H="",I="";const K=[{id:"chatterbox",name:"Chatterbox",badge:"recommended"},{id:"kokoro",name:"Kokoro",badge:"faster but lower quality"}],y=[{id:"lily",name:"Lily",description:"Warm, conversational voice from a female in her 30s",sample:"/voices/lily.mp3"},{id:"andrew",name:"Andrew",description:"Older British man who speaks clearly and kindly",sample:"/voices/andrew.mp3"},{id:"fairy",name:"Fairy",description:"High and airy female voice that bursts with excitement",sample:"/voices/fairy.mp3"},{id:"pirate",name:"Pirate",description:"Young pirate that speaks gruffly and passionately",sample:"/voices/pirate.mp3"}];async function E(){if(!t.trim())return;if(!Nl()){window.dispatchEvent(new CustomEvent("show-signin-popover"));return}s(7,_=!0),s(8,V=null),s(14,A=0),S.length===0&&ce("Setup and Import",Il()),ce("Generate Speech",ot()),i==="ui"&&(s(10,v=!0),setTimeout(()=>{s(10,v=!1)},2500)),s(13,N=!1),s(16,L=t.length>30?t.substring(0,30)+"...":t);try{const ge=Nl(),be={text:t,voice_id:l.toLowerCase(),model_id:n.toLowerCase(),mode:o,access_token:ge,parameters:{exaggeration:b,temperature:U}},Ie=await fetch("/api/tts/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(be)});if(!Ie.ok){const et=await Ie.text();throw new Error(`HTTP error! status: ${Ie.status}, body: ${et}`)}const Me=await Ie.json();if(Me.success&&Me.audio_url)s(8,V=Me.audio_url),ce("Save Audio Output",Jn()),i==="ui"&&(s(10,v=!0),setTimeout(()=>{s(10,v=!1)},2500));else{const et=Me.error||"Unknown error occurred";ke("Generation Failed",et),s(8,V=null)}}catch{ke("Network Error","Failed to connect to the server. Please check your connection and try again."),s(8,V=null)}finally{s(7,_=!1)}}function p(){T&&(N?T.pause():T.play())}function D(){T&&(s(15,O=T.duration),T.play())}function C(){T&&s(14,A=T.currentTime)}function R(){s(13,N=!0)}function le(){s(13,N=!1)}function ie(){if(V){const F=document.createElement("a");F.href=V,F.download="speech.wav",F.click()}}function ne(F,ge){if(ge.stopPropagation(),W===F.name)P&&(P.pause(),P.currentTime=0),s(18,W=null);else{P&&P.pause(),s(18,W=F.name);const be=F.sample||"/samples/harvard.wav";P?P.src=be:(P=new Audio(be),P.addEventListener("ended",()=>{s(18,W=null)})),P.play().catch(Ie=>{s(18,W=null)})}}function de(F){F.target.closest(".model-dropdown")||s(6,f=!1)}function ce(F,ge,be=null){const Ie={id:Date.now()+Math.random(),title:F,code:ge,output:be,timestamp:new Date().toLocaleTimeString()};return s(2,S=[...S,Ie]),Ie}function ot(){return`# Text to convert to speech
44
+ text = """${t}"""
45
+
46
+ # Voice and model settings
47
+ model = "ResembleAI/chatterbox"
48
+ voice = "${l.toLowerCase()}"
49
+ exaggeration = ${b}
50
+ temperature = ${U}
51
+
52
+ # Generate speech
53
+ print("Generating speech...")
54
+ try:
55
+ audio_bytes = client.text_to_speech(
56
+ text,
57
+ model=model,
58
+ # Note: Voice and other parameters may vary by model
59
+ )
60
+ print(f"✓ Generated {len(audio_bytes)} bytes of audio")
61
+ except Exception as e:
62
+ print(f"Error: {e}")`}function we(F,ge="Copied to clipboard!"){navigator.clipboard.writeText(F).then(()=>{s(9,g=ge),setTimeout(()=>{s(9,g=null)},2e3)})}function ke(F,ge=""){s(20,H=F),s(21,I=ge),s(19,k=!0)}function ve(){s(19,k=!1),s(20,H=""),s(21,I="")}function Ee(){const F=I?`${H}
63
+
64
+ Details:
65
+ ${I}`:H;we(F,"Error message copied!")}function pe(){const F=S.map(ge=>`# ${ge.title}
66
+ ${ge.code}`).join(`
67
+
68
+ `);we(F,"All code copied!")}let Je=t;const Qe=()=>s(1,i="ui"),nt=()=>s(1,i="code");function ze(){t=this.value,s(0,t)}function Ne(F){Sl[F?"unshift":"push"](()=>{T=F,s(17,T)})}const Ce=()=>s(6,f=!f),ye=F=>{s(4,n=F.name),s(6,f=!1)},Ze=(F,ge)=>ne(F,ge),Se=F=>s(3,l=F.name);function Et(){b=Zt(this.value),s(11,b)}function Ae(){U=Zt(this.value),s(12,U)}const Te=()=>s(5,o="api"),Pe=()=>s(5,o="local"),He=F=>we(F.code);return r.$$.update=()=>{r.$$.dirty[0]&2&&i==="ui"&&s(2,S=[]),r.$$.dirty[0]&6&&S.length===0&&i==="code"&&ce("Setup and Import",Il()),r.$$.dirty[0]&5|r.$$.dirty[1]&64&&t!==Je&&S.length>0&&s(37,Je=t)},[t,i,S,l,n,o,f,_,V,g,v,b,U,N,A,O,L,T,W,k,H,I,K,y,E,p,D,C,R,le,ie,ne,de,we,ve,Ee,pe,Je,Qe,nt,ze,Ne,Ce,ye,Ze,Se,Et,Ae,Te,Pe,He]}class Zn extends je{constructor(e){super(),Be(this,e,Xn,Kn,xe,{},null,[-1,-1,-1])}}export{Zn as component};
hfstudio/static/index.html CHANGED
@@ -2,29 +2,29 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <link rel="icon" href="/assets/hf-logo.png" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <title>HFStudio - Text to Speech</title>
8
 
9
- <link rel="modulepreload" href="/_app/immutable/entry/start.BYVsPlvk.js">
10
- <link rel="modulepreload" href="/_app/immutable/chunks/CDtepspB.js">
11
- <link rel="modulepreload" href="/_app/immutable/chunks/BI_gvUUO.js">
12
- <link rel="modulepreload" href="/_app/immutable/entry/app.D8dorYrS.js">
13
  <link rel="modulepreload" href="/_app/immutable/chunks/IHki7fMi.js">
14
  </head>
15
  <body data-sveltekit-preload-data="hover">
16
  <div style="display: contents">
17
  <script>
18
  {
19
- __sveltekit_1w4pefl = {
20
  base: ""
21
  };
22
 
23
  const element = document.currentScript.parentElement;
24
 
25
  Promise.all([
26
- import("/_app/immutable/entry/start.BYVsPlvk.js"),
27
- import("/_app/immutable/entry/app.D8dorYrS.js")
28
  ]).then(([kit, app]) => {
29
  kit.start(app, element);
30
  });
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <link rel="icon" href="/assets/hf-studio-logo.png" />
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <title>HFStudio - Text to Speech</title>
8
 
9
+ <link rel="modulepreload" href="/_app/immutable/entry/start.C4-zG_GX.js">
10
+ <link rel="modulepreload" href="/_app/immutable/chunks/Bs9I3-rU.js">
11
+ <link rel="modulepreload" href="/_app/immutable/chunks/Bqgpa-5T.js">
12
+ <link rel="modulepreload" href="/_app/immutable/entry/app.DZ7KK-ry.js">
13
  <link rel="modulepreload" href="/_app/immutable/chunks/IHki7fMi.js">
14
  </head>
15
  <body data-sveltekit-preload-data="hover">
16
  <div style="display: contents">
17
  <script>
18
  {
19
+ __sveltekit_17nj3h5 = {
20
  base: ""
21
  };
22
 
23
  const element = document.currentScript.parentElement;
24
 
25
  Promise.all([
26
+ import("/_app/immutable/entry/start.C4-zG_GX.js"),
27
+ import("/_app/immutable/entry/app.DZ7KK-ry.js")
28
  ]).then(([kit, app]) => {
29
  kit.start(app, element);
30
  });
hfstudio/static/voices/andrew.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ee4aaa04267d4c20f84a28281cc3a7850b4bd9fe659a137f4747a29cd2b2a70
3
+ size 289690
hfstudio/static/voices/fairy.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2b30f8ef6e243d7eac70d88a45a562b103e34d18c9e4419c94798dd431223e1d
3
+ size 405673
hfstudio/static/voices/pirate.mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c189f3801ee4616a8130fe64bb63cd36f00eeaf5791b2d904141ae8c574790c
3
+ size 401912
test_chatterbox.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+
3
+ from huggingface_hub import InferenceClient
4
+
5
+ # Initialize the client
6
+ client = InferenceClient(
7
+ provider="fal-ai",
8
+ )
9
+
10
+ # Test parameters (matching what our app sends)
11
+ text = "In a hole in the ground there lived a hobbit."
12
+
13
+ extra_body = {
14
+ "exaggeration": 0.25,
15
+ "temperature": 0.7,
16
+ "audio_url": "https://huggingface.co/spaces/abidlabs/hfstudio/resolve/main/frontend/static/voices/lily.mp3"
17
+ }
18
+
19
+ bytes = client.text_to_speech(
20
+ text,
21
+ model="ResembleAI/chatterbox",
22
+ extra_body=extra_body,
23
+ )
24
+
25
+ print(bytes)