Faran Butt commited on
Commit
02f749e
β€’
1 Parent(s): e831a1d

Added the document submit button

Browse files
components.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": true,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "tailwind.config.js",
8
+ "css": "src/pages/global.css",
9
+ "baseColor": "gray",
10
+ "cssVariables": true
11
+ },
12
+ "aliases": {
13
+ "components": "@/components",
14
+ "utils": "@/lib/utils"
15
+ }
16
+ }
package-lock.json CHANGED
@@ -16,14 +16,20 @@
16
  "@huggingface/inference": "2.3.3",
17
  "@mui/icons-material": "5.11.16",
18
  "@mui/material": "5.12.0",
 
 
19
  "@types/node": "20.1.4",
20
  "@types/react": "18.2.6",
21
  "@types/react-dom": "18.2.4",
 
 
22
  "eslint": "8.40.0",
23
  "eslint-config-next": "13.4.2",
24
  "next": "13.4.2",
25
  "react": "18.2.0",
26
  "react-dom": "18.2.0",
 
 
27
  "typescript": "5.0.4"
28
  },
29
  "devDependencies": {
@@ -36,7 +42,6 @@
36
  "version": "5.2.0",
37
  "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
38
  "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
39
- "dev": true,
40
  "engines": {
41
  "node": ">=10"
42
  },
@@ -160,11 +165,11 @@
160
  }
161
  },
162
  "node_modules/@babel/runtime": {
163
- "version": "7.21.5",
164
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz",
165
- "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==",
166
  "dependencies": {
167
- "regenerator-runtime": "^0.13.11"
168
  },
169
  "engines": {
170
  "node": ">=6.9.0"
@@ -434,7 +439,6 @@
434
  "version": "0.3.3",
435
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
436
  "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
437
- "dev": true,
438
  "dependencies": {
439
  "@jridgewell/set-array": "^1.0.1",
440
  "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -448,7 +452,6 @@
448
  "version": "3.1.1",
449
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
450
  "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
451
- "dev": true,
452
  "engines": {
453
  "node": ">=6.0.0"
454
  }
@@ -457,7 +460,6 @@
457
  "version": "1.1.2",
458
  "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
459
  "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
460
- "dev": true,
461
  "engines": {
462
  "node": ">=6.0.0"
463
  }
@@ -465,14 +467,12 @@
465
  "node_modules/@jridgewell/sourcemap-codec": {
466
  "version": "1.4.15",
467
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
468
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
469
- "dev": true
470
  },
471
  "node_modules/@jridgewell/trace-mapping": {
472
  "version": "0.3.20",
473
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
474
  "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
475
- "dev": true,
476
  "dependencies": {
477
  "@jridgewell/resolve-uri": "^3.1.0",
478
  "@jridgewell/sourcemap-codec": "^1.4.14"
@@ -510,6 +510,14 @@
510
  }
511
  }
512
  },
 
 
 
 
 
 
 
 
513
  "node_modules/@mui/base/node_modules/react-is": {
514
  "version": "18.2.0",
515
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
@@ -593,6 +601,14 @@
593
  }
594
  }
595
  },
 
 
 
 
 
 
 
 
596
  "node_modules/@mui/material/node_modules/react-is": {
597
  "version": "18.2.0",
598
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
@@ -711,6 +727,14 @@
711
  }
712
  }
713
  },
 
 
 
 
 
 
 
 
714
  "node_modules/@mui/types": {
715
  "version": "7.2.4",
716
  "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
@@ -959,6 +983,49 @@
959
  "url": "https://opencollective.com/popperjs"
960
  }
961
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
962
  "node_modules/@rushstack/eslint-patch": {
963
  "version": "1.2.0",
964
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
@@ -1196,14 +1263,12 @@
1196
  "node_modules/any-promise": {
1197
  "version": "1.3.0",
1198
  "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1199
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1200
- "dev": true
1201
  },
1202
  "node_modules/anymatch": {
1203
  "version": "3.1.3",
1204
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1205
  "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1206
- "dev": true,
1207
  "dependencies": {
1208
  "normalize-path": "^3.0.0",
1209
  "picomatch": "^2.0.4"
@@ -1215,8 +1280,7 @@
1215
  "node_modules/arg": {
1216
  "version": "5.0.2",
1217
  "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1218
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1219
- "dev": true
1220
  },
1221
  "node_modules/argparse": {
1222
  "version": "2.0.1",
@@ -1415,7 +1479,6 @@
1415
  "version": "2.2.0",
1416
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1417
  "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1418
- "dev": true,
1419
  "engines": {
1420
  "node": ">=8"
1421
  }
@@ -1537,7 +1600,6 @@
1537
  "version": "2.0.1",
1538
  "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1539
  "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1540
- "dev": true,
1541
  "engines": {
1542
  "node": ">= 6"
1543
  }
@@ -1580,7 +1642,6 @@
1580
  "version": "3.5.3",
1581
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1582
  "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1583
- "dev": true,
1584
  "funding": [
1585
  {
1586
  "type": "individual",
@@ -1607,7 +1668,6 @@
1607
  "version": "5.1.2",
1608
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1609
  "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1610
- "dev": true,
1611
  "dependencies": {
1612
  "is-glob": "^4.0.1"
1613
  },
@@ -1615,15 +1675,26 @@
1615
  "node": ">= 6"
1616
  }
1617
  },
 
 
 
 
 
 
 
 
 
 
 
1618
  "node_modules/client-only": {
1619
  "version": "0.0.1",
1620
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1621
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1622
  },
1623
  "node_modules/clsx": {
1624
- "version": "1.2.1",
1625
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
1626
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
1627
  "engines": {
1628
  "node": ">=6"
1629
  }
@@ -1648,7 +1719,6 @@
1648
  "version": "4.1.1",
1649
  "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1650
  "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1651
- "dev": true,
1652
  "engines": {
1653
  "node": ">= 6"
1654
  }
@@ -1700,7 +1770,6 @@
1700
  "version": "3.0.0",
1701
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1702
  "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1703
- "dev": true,
1704
  "bin": {
1705
  "cssesc": "bin/cssesc"
1706
  },
@@ -1828,8 +1897,7 @@
1828
  "node_modules/didyoumean": {
1829
  "version": "1.2.2",
1830
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1831
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1832
- "dev": true
1833
  },
1834
  "node_modules/dir-glob": {
1835
  "version": "3.0.1",
@@ -1845,8 +1913,7 @@
1845
  "node_modules/dlv": {
1846
  "version": "1.1.3",
1847
  "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1848
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1849
- "dev": true
1850
  },
1851
  "node_modules/doctrine": {
1852
  "version": "3.0.0",
@@ -2640,7 +2707,6 @@
2640
  "version": "2.3.3",
2641
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2642
  "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2643
- "dev": true,
2644
  "hasInstallScript": true,
2645
  "optional": true,
2646
  "os": [
@@ -3036,7 +3102,6 @@
3036
  "version": "2.1.0",
3037
  "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
3038
  "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
3039
- "dev": true,
3040
  "dependencies": {
3041
  "binary-extensions": "^2.0.0"
3042
  },
@@ -3355,7 +3420,6 @@
3355
  "version": "1.21.0",
3356
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
3357
  "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
3358
- "dev": true,
3359
  "bin": {
3360
  "jiti": "bin/jiti.js"
3361
  }
@@ -3452,7 +3516,6 @@
3452
  "version": "2.1.0",
3453
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
3454
  "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
3455
- "dev": true,
3456
  "engines": {
3457
  "node": ">=10"
3458
  }
@@ -3576,7 +3639,6 @@
3576
  "version": "2.7.0",
3577
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
3578
  "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
3579
- "dev": true,
3580
  "dependencies": {
3581
  "any-promise": "^1.0.0",
3582
  "object-assign": "^4.0.1",
@@ -3691,7 +3753,6 @@
3691
  "version": "3.0.0",
3692
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3693
  "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3694
- "dev": true,
3695
  "engines": {
3696
  "node": ">=0.10.0"
3697
  }
@@ -3742,7 +3803,6 @@
3742
  "version": "3.0.0",
3743
  "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3744
  "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
3745
- "dev": true,
3746
  "engines": {
3747
  "node": ">= 6"
3748
  }
@@ -4020,7 +4080,6 @@
4020
  "version": "2.3.0",
4021
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
4022
  "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
4023
- "dev": true,
4024
  "engines": {
4025
  "node": ">=0.10.0"
4026
  }
@@ -4029,7 +4088,6 @@
4029
  "version": "4.0.6",
4030
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
4031
  "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
4032
- "dev": true,
4033
  "engines": {
4034
  "node": ">= 6"
4035
  }
@@ -4038,7 +4096,6 @@
4038
  "version": "8.4.31",
4039
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
4040
  "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
4041
- "dev": true,
4042
  "funding": [
4043
  {
4044
  "type": "opencollective",
@@ -4066,7 +4123,6 @@
4066
  "version": "15.1.0",
4067
  "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
4068
  "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
4069
- "dev": true,
4070
  "dependencies": {
4071
  "postcss-value-parser": "^4.0.0",
4072
  "read-cache": "^1.0.0",
@@ -4083,7 +4139,6 @@
4083
  "version": "4.0.1",
4084
  "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
4085
  "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
4086
- "dev": true,
4087
  "dependencies": {
4088
  "camelcase-css": "^2.0.1"
4089
  },
@@ -4102,7 +4157,6 @@
4102
  "version": "4.0.1",
4103
  "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
4104
  "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
4105
- "dev": true,
4106
  "dependencies": {
4107
  "lilconfig": "^2.0.5",
4108
  "yaml": "^2.1.1"
@@ -4131,7 +4185,6 @@
4131
  "version": "2.3.4",
4132
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
4133
  "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
4134
- "dev": true,
4135
  "engines": {
4136
  "node": ">= 14"
4137
  }
@@ -4140,7 +4193,6 @@
4140
  "version": "6.0.1",
4141
  "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
4142
  "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
4143
- "dev": true,
4144
  "dependencies": {
4145
  "postcss-selector-parser": "^6.0.11"
4146
  },
@@ -4159,7 +4211,6 @@
4159
  "version": "6.0.13",
4160
  "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
4161
  "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
4162
- "dev": true,
4163
  "dependencies": {
4164
  "cssesc": "^3.0.0",
4165
  "util-deprecate": "^1.0.2"
@@ -4171,8 +4222,7 @@
4171
  "node_modules/postcss-value-parser": {
4172
  "version": "4.2.0",
4173
  "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
4174
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
4175
- "dev": true
4176
  },
4177
  "node_modules/prelude-ls": {
4178
  "version": "1.2.1",
@@ -4271,7 +4321,6 @@
4271
  "version": "1.0.0",
4272
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
4273
  "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
4274
- "dev": true,
4275
  "dependencies": {
4276
  "pify": "^2.3.0"
4277
  }
@@ -4296,7 +4345,6 @@
4296
  "version": "3.6.0",
4297
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
4298
  "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
4299
- "dev": true,
4300
  "dependencies": {
4301
  "picomatch": "^2.2.1"
4302
  },
@@ -4305,9 +4353,9 @@
4305
  }
4306
  },
4307
  "node_modules/regenerator-runtime": {
4308
- "version": "0.13.11",
4309
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
4310
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
4311
  },
4312
  "node_modules/regexp.prototype.flags": {
4313
  "version": "1.5.0",
@@ -4747,7 +4795,6 @@
4747
  "version": "3.34.0",
4748
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
4749
  "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
4750
- "dev": true,
4751
  "dependencies": {
4752
  "@jridgewell/gen-mapping": "^0.3.2",
4753
  "commander": "^4.0.0",
@@ -4769,7 +4816,6 @@
4769
  "version": "7.1.6",
4770
  "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
4771
  "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
4772
- "dev": true,
4773
  "dependencies": {
4774
  "fs.realpath": "^1.0.0",
4775
  "inflight": "^1.0.4",
@@ -4822,11 +4868,22 @@
4822
  "url": "https://opencollective.com/unts"
4823
  }
4824
  },
 
 
 
 
 
 
 
 
 
 
 
 
4825
  "node_modules/tailwindcss": {
4826
  "version": "3.3.5",
4827
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
4828
  "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
4829
- "dev": true,
4830
  "dependencies": {
4831
  "@alloc/quick-lru": "^5.2.0",
4832
  "arg": "^5.0.2",
@@ -4859,6 +4916,14 @@
4859
  "node": ">=14.0.0"
4860
  }
4861
  },
 
 
 
 
 
 
 
 
4862
  "node_modules/tapable": {
4863
  "version": "2.2.1",
4864
  "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -4876,7 +4941,6 @@
4876
  "version": "3.3.1",
4877
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
4878
  "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
4879
- "dev": true,
4880
  "dependencies": {
4881
  "any-promise": "^1.0.0"
4882
  }
@@ -4885,7 +4949,6 @@
4885
  "version": "1.6.0",
4886
  "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
4887
  "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
4888
- "dev": true,
4889
  "dependencies": {
4890
  "thenify": ">= 3.1.0 < 4"
4891
  },
@@ -4940,8 +5003,7 @@
4940
  "node_modules/ts-interface-checker": {
4941
  "version": "0.1.13",
4942
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
4943
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
4944
- "dev": true
4945
  },
4946
  "node_modules/tsconfig-paths": {
4947
  "version": "3.14.2",
 
16
  "@huggingface/inference": "2.3.3",
17
  "@mui/icons-material": "5.11.16",
18
  "@mui/material": "5.12.0",
19
+ "@radix-ui/react-icons": "^1.3.0",
20
+ "@radix-ui/react-slot": "^1.0.2",
21
  "@types/node": "20.1.4",
22
  "@types/react": "18.2.6",
23
  "@types/react-dom": "18.2.4",
24
+ "class-variance-authority": "^0.7.0",
25
+ "clsx": "^2.0.0",
26
  "eslint": "8.40.0",
27
  "eslint-config-next": "13.4.2",
28
  "next": "13.4.2",
29
  "react": "18.2.0",
30
  "react-dom": "18.2.0",
31
+ "tailwind-merge": "^2.0.0",
32
+ "tailwindcss-animate": "^1.0.7",
33
  "typescript": "5.0.4"
34
  },
35
  "devDependencies": {
 
42
  "version": "5.2.0",
43
  "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
44
  "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
 
45
  "engines": {
46
  "node": ">=10"
47
  },
 
165
  }
166
  },
167
  "node_modules/@babel/runtime": {
168
+ "version": "7.23.2",
169
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
170
+ "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
171
  "dependencies": {
172
+ "regenerator-runtime": "^0.14.0"
173
  },
174
  "engines": {
175
  "node": ">=6.9.0"
 
439
  "version": "0.3.3",
440
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
441
  "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
 
442
  "dependencies": {
443
  "@jridgewell/set-array": "^1.0.1",
444
  "@jridgewell/sourcemap-codec": "^1.4.10",
 
452
  "version": "3.1.1",
453
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
454
  "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
 
455
  "engines": {
456
  "node": ">=6.0.0"
457
  }
 
460
  "version": "1.1.2",
461
  "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
462
  "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
 
463
  "engines": {
464
  "node": ">=6.0.0"
465
  }
 
467
  "node_modules/@jridgewell/sourcemap-codec": {
468
  "version": "1.4.15",
469
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
470
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
 
471
  },
472
  "node_modules/@jridgewell/trace-mapping": {
473
  "version": "0.3.20",
474
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
475
  "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
 
476
  "dependencies": {
477
  "@jridgewell/resolve-uri": "^3.1.0",
478
  "@jridgewell/sourcemap-codec": "^1.4.14"
 
510
  }
511
  }
512
  },
513
+ "node_modules/@mui/base/node_modules/clsx": {
514
+ "version": "1.2.1",
515
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
516
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
517
+ "engines": {
518
+ "node": ">=6"
519
+ }
520
+ },
521
  "node_modules/@mui/base/node_modules/react-is": {
522
  "version": "18.2.0",
523
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
 
601
  }
602
  }
603
  },
604
+ "node_modules/@mui/material/node_modules/clsx": {
605
+ "version": "1.2.1",
606
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
607
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
608
+ "engines": {
609
+ "node": ">=6"
610
+ }
611
+ },
612
  "node_modules/@mui/material/node_modules/react-is": {
613
  "version": "18.2.0",
614
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
 
727
  }
728
  }
729
  },
730
+ "node_modules/@mui/system/node_modules/clsx": {
731
+ "version": "1.2.1",
732
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
733
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
734
+ "engines": {
735
+ "node": ">=6"
736
+ }
737
+ },
738
  "node_modules/@mui/types": {
739
  "version": "7.2.4",
740
  "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
 
983
  "url": "https://opencollective.com/popperjs"
984
  }
985
  },
986
+ "node_modules/@radix-ui/react-compose-refs": {
987
+ "version": "1.0.1",
988
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
989
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
990
+ "dependencies": {
991
+ "@babel/runtime": "^7.13.10"
992
+ },
993
+ "peerDependencies": {
994
+ "@types/react": "*",
995
+ "react": "^16.8 || ^17.0 || ^18.0"
996
+ },
997
+ "peerDependenciesMeta": {
998
+ "@types/react": {
999
+ "optional": true
1000
+ }
1001
+ }
1002
+ },
1003
+ "node_modules/@radix-ui/react-icons": {
1004
+ "version": "1.3.0",
1005
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz",
1006
+ "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==",
1007
+ "peerDependencies": {
1008
+ "react": "^16.x || ^17.x || ^18.x"
1009
+ }
1010
+ },
1011
+ "node_modules/@radix-ui/react-slot": {
1012
+ "version": "1.0.2",
1013
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
1014
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
1015
+ "dependencies": {
1016
+ "@babel/runtime": "^7.13.10",
1017
+ "@radix-ui/react-compose-refs": "1.0.1"
1018
+ },
1019
+ "peerDependencies": {
1020
+ "@types/react": "*",
1021
+ "react": "^16.8 || ^17.0 || ^18.0"
1022
+ },
1023
+ "peerDependenciesMeta": {
1024
+ "@types/react": {
1025
+ "optional": true
1026
+ }
1027
+ }
1028
+ },
1029
  "node_modules/@rushstack/eslint-patch": {
1030
  "version": "1.2.0",
1031
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
 
1263
  "node_modules/any-promise": {
1264
  "version": "1.3.0",
1265
  "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1266
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
 
1267
  },
1268
  "node_modules/anymatch": {
1269
  "version": "3.1.3",
1270
  "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1271
  "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
 
1272
  "dependencies": {
1273
  "normalize-path": "^3.0.0",
1274
  "picomatch": "^2.0.4"
 
1280
  "node_modules/arg": {
1281
  "version": "5.0.2",
1282
  "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1283
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
 
1284
  },
1285
  "node_modules/argparse": {
1286
  "version": "2.0.1",
 
1479
  "version": "2.2.0",
1480
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1481
  "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
 
1482
  "engines": {
1483
  "node": ">=8"
1484
  }
 
1600
  "version": "2.0.1",
1601
  "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1602
  "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
 
1603
  "engines": {
1604
  "node": ">= 6"
1605
  }
 
1642
  "version": "3.5.3",
1643
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1644
  "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
 
1645
  "funding": [
1646
  {
1647
  "type": "individual",
 
1668
  "version": "5.1.2",
1669
  "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1670
  "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 
1671
  "dependencies": {
1672
  "is-glob": "^4.0.1"
1673
  },
 
1675
  "node": ">= 6"
1676
  }
1677
  },
1678
+ "node_modules/class-variance-authority": {
1679
+ "version": "0.7.0",
1680
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
1681
+ "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
1682
+ "dependencies": {
1683
+ "clsx": "2.0.0"
1684
+ },
1685
+ "funding": {
1686
+ "url": "https://joebell.co.uk"
1687
+ }
1688
+ },
1689
  "node_modules/client-only": {
1690
  "version": "0.0.1",
1691
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1692
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1693
  },
1694
  "node_modules/clsx": {
1695
+ "version": "2.0.0",
1696
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
1697
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
1698
  "engines": {
1699
  "node": ">=6"
1700
  }
 
1719
  "version": "4.1.1",
1720
  "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1721
  "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
 
1722
  "engines": {
1723
  "node": ">= 6"
1724
  }
 
1770
  "version": "3.0.0",
1771
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1772
  "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
 
1773
  "bin": {
1774
  "cssesc": "bin/cssesc"
1775
  },
 
1897
  "node_modules/didyoumean": {
1898
  "version": "1.2.2",
1899
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1900
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
 
1901
  },
1902
  "node_modules/dir-glob": {
1903
  "version": "3.0.1",
 
1913
  "node_modules/dlv": {
1914
  "version": "1.1.3",
1915
  "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1916
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
 
1917
  },
1918
  "node_modules/doctrine": {
1919
  "version": "3.0.0",
 
2707
  "version": "2.3.3",
2708
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2709
  "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
 
2710
  "hasInstallScript": true,
2711
  "optional": true,
2712
  "os": [
 
3102
  "version": "2.1.0",
3103
  "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
3104
  "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
 
3105
  "dependencies": {
3106
  "binary-extensions": "^2.0.0"
3107
  },
 
3420
  "version": "1.21.0",
3421
  "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
3422
  "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
 
3423
  "bin": {
3424
  "jiti": "bin/jiti.js"
3425
  }
 
3516
  "version": "2.1.0",
3517
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
3518
  "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
 
3519
  "engines": {
3520
  "node": ">=10"
3521
  }
 
3639
  "version": "2.7.0",
3640
  "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
3641
  "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
 
3642
  "dependencies": {
3643
  "any-promise": "^1.0.0",
3644
  "object-assign": "^4.0.1",
 
3753
  "version": "3.0.0",
3754
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3755
  "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 
3756
  "engines": {
3757
  "node": ">=0.10.0"
3758
  }
 
3803
  "version": "3.0.0",
3804
  "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3805
  "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
 
3806
  "engines": {
3807
  "node": ">= 6"
3808
  }
 
4080
  "version": "2.3.0",
4081
  "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
4082
  "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
 
4083
  "engines": {
4084
  "node": ">=0.10.0"
4085
  }
 
4088
  "version": "4.0.6",
4089
  "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
4090
  "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
 
4091
  "engines": {
4092
  "node": ">= 6"
4093
  }
 
4096
  "version": "8.4.31",
4097
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
4098
  "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
 
4099
  "funding": [
4100
  {
4101
  "type": "opencollective",
 
4123
  "version": "15.1.0",
4124
  "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
4125
  "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
 
4126
  "dependencies": {
4127
  "postcss-value-parser": "^4.0.0",
4128
  "read-cache": "^1.0.0",
 
4139
  "version": "4.0.1",
4140
  "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
4141
  "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
 
4142
  "dependencies": {
4143
  "camelcase-css": "^2.0.1"
4144
  },
 
4157
  "version": "4.0.1",
4158
  "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
4159
  "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
 
4160
  "dependencies": {
4161
  "lilconfig": "^2.0.5",
4162
  "yaml": "^2.1.1"
 
4185
  "version": "2.3.4",
4186
  "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
4187
  "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
 
4188
  "engines": {
4189
  "node": ">= 14"
4190
  }
 
4193
  "version": "6.0.1",
4194
  "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
4195
  "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
 
4196
  "dependencies": {
4197
  "postcss-selector-parser": "^6.0.11"
4198
  },
 
4211
  "version": "6.0.13",
4212
  "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
4213
  "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
 
4214
  "dependencies": {
4215
  "cssesc": "^3.0.0",
4216
  "util-deprecate": "^1.0.2"
 
4222
  "node_modules/postcss-value-parser": {
4223
  "version": "4.2.0",
4224
  "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
4225
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
 
4226
  },
4227
  "node_modules/prelude-ls": {
4228
  "version": "1.2.1",
 
4321
  "version": "1.0.0",
4322
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
4323
  "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
 
4324
  "dependencies": {
4325
  "pify": "^2.3.0"
4326
  }
 
4345
  "version": "3.6.0",
4346
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
4347
  "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
 
4348
  "dependencies": {
4349
  "picomatch": "^2.2.1"
4350
  },
 
4353
  }
4354
  },
4355
  "node_modules/regenerator-runtime": {
4356
+ "version": "0.14.0",
4357
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
4358
+ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
4359
  },
4360
  "node_modules/regexp.prototype.flags": {
4361
  "version": "1.5.0",
 
4795
  "version": "3.34.0",
4796
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
4797
  "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
 
4798
  "dependencies": {
4799
  "@jridgewell/gen-mapping": "^0.3.2",
4800
  "commander": "^4.0.0",
 
4816
  "version": "7.1.6",
4817
  "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
4818
  "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
 
4819
  "dependencies": {
4820
  "fs.realpath": "^1.0.0",
4821
  "inflight": "^1.0.4",
 
4868
  "url": "https://opencollective.com/unts"
4869
  }
4870
  },
4871
+ "node_modules/tailwind-merge": {
4872
+ "version": "2.0.0",
4873
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.0.0.tgz",
4874
+ "integrity": "sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==",
4875
+ "dependencies": {
4876
+ "@babel/runtime": "^7.23.1"
4877
+ },
4878
+ "funding": {
4879
+ "type": "github",
4880
+ "url": "https://github.com/sponsors/dcastil"
4881
+ }
4882
+ },
4883
  "node_modules/tailwindcss": {
4884
  "version": "3.3.5",
4885
  "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
4886
  "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
 
4887
  "dependencies": {
4888
  "@alloc/quick-lru": "^5.2.0",
4889
  "arg": "^5.0.2",
 
4916
  "node": ">=14.0.0"
4917
  }
4918
  },
4919
+ "node_modules/tailwindcss-animate": {
4920
+ "version": "1.0.7",
4921
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
4922
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
4923
+ "peerDependencies": {
4924
+ "tailwindcss": ">=3.0.0 || insiders"
4925
+ }
4926
+ },
4927
  "node_modules/tapable": {
4928
  "version": "2.2.1",
4929
  "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
 
4941
  "version": "3.3.1",
4942
  "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
4943
  "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
 
4944
  "dependencies": {
4945
  "any-promise": "^1.0.0"
4946
  }
 
4949
  "version": "1.6.0",
4950
  "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
4951
  "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
 
4952
  "dependencies": {
4953
  "thenify": ">= 3.1.0 < 4"
4954
  },
 
5003
  "node_modules/ts-interface-checker": {
5004
  "version": "0.1.13",
5005
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
5006
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
 
5007
  },
5008
  "node_modules/tsconfig-paths": {
5009
  "version": "3.14.2",
package.json CHANGED
@@ -31,14 +31,20 @@
31
  "@huggingface/inference": "2.3.3",
32
  "@mui/icons-material": "5.11.16",
33
  "@mui/material": "5.12.0",
 
 
34
  "@types/node": "20.1.4",
35
  "@types/react": "18.2.6",
36
  "@types/react-dom": "18.2.4",
 
 
37
  "eslint": "8.40.0",
38
  "eslint-config-next": "13.4.2",
39
  "next": "13.4.2",
40
  "react": "18.2.0",
41
  "react-dom": "18.2.0",
 
 
42
  "typescript": "5.0.4"
43
  },
44
  "devDependencies": {
 
31
  "@huggingface/inference": "2.3.3",
32
  "@mui/icons-material": "5.11.16",
33
  "@mui/material": "5.12.0",
34
+ "@radix-ui/react-icons": "^1.3.0",
35
+ "@radix-ui/react-slot": "^1.0.2",
36
  "@types/node": "20.1.4",
37
  "@types/react": "18.2.6",
38
  "@types/react-dom": "18.2.4",
39
+ "class-variance-authority": "^0.7.0",
40
+ "clsx": "^2.0.0",
41
  "eslint": "8.40.0",
42
  "eslint-config-next": "13.4.2",
43
  "next": "13.4.2",
44
  "react": "18.2.0",
45
  "react-dom": "18.2.0",
46
+ "tailwind-merge": "^2.0.0",
47
+ "tailwindcss-animate": "^1.0.7",
48
  "typescript": "5.0.4"
49
  },
50
  "devDependencies": {
src/components/base/boxes.tsx DELETED
@@ -1,28 +0,0 @@
1
- import { Divider, DividerProps, Paper, PaperProps } from "@mui/material";
2
- import { styled } from "@mui/material/styles";
3
-
4
- export const SectionBox = styled(Paper)<PaperProps>(({ theme }) => ({
5
- display: "flex",
6
- padding: 15,
7
- paddingTop: 30,
8
- paddingBottom: 30,
9
- marginBottom: 20,
10
- background: `linear-gradient(to bottom right, ${theme.palette.primary.main} 0%, ${theme.palette.secondary.main} 100%)`,
11
- }));
12
-
13
- export const HighlightBox = styled(Paper)<PaperProps>(({ theme }) => ({
14
- display: "flex",
15
- alignItems: "center",
16
- justifyContent: "center",
17
- padding: 10,
18
- borderBottom: `3px solid transparent`,
19
- borderImage: `linear-gradient(to bottom right, #b827fc 0%, #2c90fc 25%, #b8fd33 50%, #fec837 75%, #fd1892 100%)`,
20
- borderImageSlice: 1,
21
- }));
22
-
23
- export const DividerBox = styled(Divider)<DividerProps>(({ theme }) => ({
24
- marginTop: 20,
25
- marginBottom: 20,
26
- background: "transparent",
27
- border: "none",
28
- }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/base/code.tsx DELETED
@@ -1,19 +0,0 @@
1
- import { styled } from "@mui/material/styles";
2
- import { Paper, PaperProps } from "@mui/material";
3
-
4
- type CodeProps = {
5
- children: string;
6
- };
7
-
8
- const CodeBox = styled(Paper)<PaperProps>(({ theme }) => ({
9
- fontFamily: "monospace",
10
- padding: 8,
11
- borderTop: `2px solid ${theme.palette.secondary.dark}`,
12
- borderBottom: `2px solid ${theme.palette.secondary.dark}`,
13
- }));
14
-
15
- export default function Code(props: CodeProps) {
16
- const { children } = props;
17
-
18
- return <CodeBox>{children}</CodeBox>;
19
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/base/example-button.tsx DELETED
@@ -1,41 +0,0 @@
1
- import { Button, Typography } from "@mui/material";
2
- import { MouseEventHandler } from "react";
3
-
4
- interface ExampleButtonProps {
5
- text: string;
6
- displayLength?: number;
7
- onClick?: (text: string) => void;
8
- }
9
-
10
- /**
11
- *
12
- * A button that hosts an example "text" that can be used as the input
13
- * to anything to get an inspiration on how to get started.
14
- *
15
- * @param props ExampleButtonProps
16
- * @returns
17
- */
18
- export default function ExampleButton(props: ExampleButtonProps) {
19
- const { text, displayLength = 50, onClick } = props;
20
-
21
- const displayText =
22
- text.slice(0, displayLength) + (text.length > displayLength ? "..." : "");
23
-
24
- const handleClick: MouseEventHandler = event => {
25
- event.preventDefault();
26
-
27
- if (onClick) {
28
- onClick(text);
29
- }
30
- };
31
-
32
- return (
33
- <Button
34
- onClick={handleClick}
35
- sx={{ textTransform: "none" }}
36
- variant="outlined"
37
- >
38
- <Typography>{displayText}</Typography>
39
- </Button>
40
- );
41
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/base/options.tsx DELETED
@@ -1,56 +0,0 @@
1
- import { KeyboardArrowDown, KeyboardArrowUp } from "@mui/icons-material";
2
- import {
3
- Card,
4
- CardContent,
5
- CardHeader,
6
- Collapse,
7
- IconButton,
8
- Stack,
9
- } from "@mui/material";
10
- import { ReactElement, useState } from "react";
11
-
12
- type OptionsProps = {
13
- children: ReactElement | ReactElement[];
14
- opened?: boolean;
15
- };
16
-
17
- /**
18
- * Define options that are hidden by default
19
- *
20
- * @param props OptionsProps
21
- * @param props.opened boolean - Are the options visible or not (default)
22
- *
23
- * @returns Options
24
- */
25
- export default function Options(props: OptionsProps) {
26
- const { children, opened = false } = props;
27
-
28
- const [showOptions, setShowOptions] = useState(opened);
29
-
30
- const handleShowOptions = () => setShowOptions(!showOptions);
31
-
32
- return (
33
- <>
34
- <Card>
35
- <CardHeader
36
- title="Options"
37
- onClick={handleShowOptions}
38
- action={
39
- <IconButton aria-label="expand" size="small">
40
- {showOptions ? <KeyboardArrowUp /> : <KeyboardArrowDown />}
41
- </IconButton>
42
- }
43
- sx={{
44
- cursor: "pointer",
45
- }}
46
- titleTypographyProps={{ variant: "h6", sx: { fontSize: "1em" } }}
47
- />
48
- <Collapse in={showOptions}>
49
- <CardContent>
50
- <Stack spacing={2}>{children}</Stack>
51
- </CardContent>
52
- </Collapse>
53
- </Card>
54
- </>
55
- );
56
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/base/secret.tsx DELETED
@@ -1,33 +0,0 @@
1
- import {
2
- IconButton,
3
- InputAdornment,
4
- TextField,
5
- TextFieldProps,
6
- } from "@mui/material";
7
- import { useState } from "react";
8
- import { Visibility, VisibilityOff } from "@mui/icons-material";
9
-
10
- export default function Secret(props: TextFieldProps) {
11
- const { name = "secret", label = "Secret" } = props;
12
- const [showSecret, setShowSecret] = useState(false);
13
-
14
- const handleShowSecret = () => setShowSecret(!showSecret);
15
-
16
- return (
17
- <TextField
18
- variant="filled"
19
- label={label}
20
- name={name}
21
- type={showSecret ? "text" : "password"}
22
- InputProps={{
23
- endAdornment: (
24
- <InputAdornment position="end">
25
- <IconButton onClick={handleShowSecret}>
26
- {showSecret ? <Visibility /> : <VisibilityOff />}
27
- </IconButton>
28
- </InputAdornment>
29
- ),
30
- }}
31
- />
32
- );
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/base/slider-with-label.tsx DELETED
@@ -1,22 +0,0 @@
1
- import {
2
- Box,
3
- FormControlLabel,
4
- Slider,
5
- SliderProps,
6
- Typography,
7
- } from "@mui/material";
8
-
9
- type SliderWithLabelProps = SliderProps & {
10
- label?: string;
11
- };
12
-
13
- export default function SliderWithLabel(props: SliderWithLabelProps) {
14
- const { label = "", valueLabelDisplay = "auto" } = props;
15
-
16
- return (
17
- <Box>
18
- <Typography variant="subtitle1">{label}</Typography>
19
- <Slider {...props} valueLabelDisplay={valueLabelDisplay} />
20
- </Box>
21
- );
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/example-components.tsx DELETED
@@ -1,35 +0,0 @@
1
- import { Box, Stack, Typography } from "@mui/material";
2
- import Huggingface from "./huggingface/huggingface";
3
- import { DividerBox, HighlightBox, SectionBox } from "./base/boxes";
4
- import { UnderConstruction } from "./under-construction";
5
-
6
- export default function ExampleComponents() {
7
- return (
8
- <>
9
- <SectionBox>
10
- <Stack spacing={2}>
11
- <Typography component="h2" variant="h3">
12
- Components
13
- </Typography>
14
-
15
- <Typography variant="body1">
16
- Unsure where to begin? Our pre-built components offer a jumpstart
17
- for your ML demo πŸš€
18
- </Typography>
19
- </Stack>
20
- </SectionBox>
21
-
22
- <Huggingface />
23
-
24
- <DividerBox />
25
-
26
- <Stack spacing={4}>
27
- <HighlightBox>
28
- <Typography variant="h4">More comming soon!</Typography>
29
- </HighlightBox>
30
-
31
- <UnderConstruction />
32
- </Stack>
33
- </>
34
- );
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/footer.tsx DELETED
@@ -1,32 +0,0 @@
1
- import Box from "@mui/material/Box";
2
- import Image from "next/image";
3
- import { Divider, Link } from "@mui/material";
4
-
5
- const Footer = () => {
6
- return (
7
- <Box
8
- component="footer"
9
- sx={{
10
- display: "flex",
11
- justifyContent: "center",
12
- gap: 1,
13
- alignItems: "center",
14
- mt: 8,
15
- mb: 4,
16
- }}
17
- >
18
- <Link
19
- href="https://failfa.st"
20
- display="flex"
21
- alignItems="center"
22
- rel="noopener"
23
- target="_blank"
24
- >
25
- <Box sx={{ mr: 0.5 }}>Powered by</Box>{" "}
26
- <Image src="/failfast.svg" alt="failfast Logo" width="32" height="32" />
27
- </Link>
28
- </Box>
29
- );
30
- };
31
-
32
- export default Footer;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/getting-started.tsx DELETED
@@ -1,150 +0,0 @@
1
- import {
2
- Button,
3
- Grid,
4
- Link,
5
- List,
6
- ListItem,
7
- ListItemIcon,
8
- ListItemText,
9
- ListSubheader,
10
- Paper,
11
- Stack,
12
- Typography,
13
- } from "@mui/material";
14
-
15
- import ViewQuiltIcon from "@mui/icons-material/ViewQuilt";
16
- import SailingIcon from "@mui/icons-material/Sailing";
17
- import LightModeIcon from "@mui/icons-material/LightMode";
18
- import SentimentVerySatisfiedIcon from "@mui/icons-material/SentimentVerySatisfied";
19
- import ContentCopyIcon from "@mui/icons-material/ContentCopy";
20
- import LinkIcon from "@mui/icons-material/Link";
21
- import SyncIcon from "@mui/icons-material/Sync";
22
- import { HighlightBox } from "./base/boxes";
23
-
24
- export default function GettingStarted() {
25
- return (
26
- <>
27
- <Grid container spacing={2} sx={{ justifyContent: "center" }}>
28
- <Grid item sm={8} lg={6}>
29
- <Paper sx={{ p: 2 }}>
30
- <List disablePadding>
31
- <ListSubheader sx={{ fontSize: "1.5em" }}>Features</ListSubheader>
32
-
33
- <ListItem>
34
- <ListItemIcon>
35
- <SentimentVerySatisfiedIcon />
36
- </ListItemIcon>
37
- <ListItemText>
38
- <Link
39
- href="https://huggingface.co/docs/huggingface.js/index"
40
- target="_blank"
41
- rel="noopener"
42
- >
43
- huggingface.js
44
- </Link>{" "}
45
- components (WIP)
46
- </ListItemText>
47
- </ListItem>
48
-
49
- <ListItem>
50
- <ListItemIcon>
51
- <LinkIcon />
52
- </ListItemIcon>
53
- <ListItemText>
54
- <Link
55
- href="https://js.langchain.com/docs"
56
- target="_blank"
57
- rel="noopener"
58
- >
59
- langchain.js
60
- </Link>{" "}
61
- and{" "}
62
- <Link
63
- href="https://github.com/failfa-st/hyv"
64
- target="_blank"
65
- rel="noopener"
66
- >
67
- hyv
68
- </Link>{" "}
69
- components (comming soon)
70
- </ListItemText>
71
- </ListItem>
72
-
73
- <ListItem>
74
- <ListItemIcon>
75
- <ViewQuiltIcon />
76
- </ListItemIcon>
77
- <ListItemText>
78
- Rapid prototyping with{" "}
79
- <Link
80
- href="https://mui.com/material-ui/getting-started/overview/"
81
- target="_blank"
82
- rel="noopener"
83
- >
84
- MUI
85
- </Link>
86
- </ListItemText>
87
- </ListItem>
88
- <ListItem>
89
- <ListItemIcon>
90
- <LightModeIcon />
91
- </ListItemIcon>
92
- <ListItemText>
93
- Dark / light theme based on system preferences
94
- </ListItemText>
95
- </ListItem>
96
- <ListItem>
97
- <ListItemIcon>
98
- <SyncIcon />
99
- </ListItemIcon>
100
- <ListItemText>
101
- Sync your GitHub repository with your πŸ€— Space
102
- </ListItemText>
103
- </ListItem>
104
- <ListItem>
105
- <ListItemIcon>
106
- <SailingIcon />
107
- </ListItemIcon>
108
- <ListItemText>Runs in Docker or localhost</ListItemText>
109
- </ListItem>
110
- </List>
111
- </Paper>
112
- </Grid>
113
-
114
- <Grid item sm={4} lg={3}>
115
- <Stack gap={2}>
116
- <Paper sx={{ p: 2 }}>
117
- <Typography variant="body1">
118
- Explore the{" "}
119
- <Link
120
- href="https://huggingface.co/spaces/failfast/nextjs-docker-starter/blob/main/README.md"
121
- target="_blank"
122
- rel="noopener"
123
- >
124
- README
125
- </Link>{" "}
126
- for a comprehensive guide on local development, Docker
127
- utilization, secret management, and GitHub-based Space control.
128
- </Typography>
129
- </Paper>
130
-
131
- <Paper sx={{ p: 2 }}>
132
- <Typography variant="body1">
133
- Have feedback or ideas?{" "}
134
- <Link
135
- href="https://huggingface.co/spaces/failfast/nextjs-docker-starter/discussions"
136
- target="_blank"
137
- rel="noopener"
138
- >
139
- We&apos;re eager to hear from you!
140
- </Link>{" "}
141
- As an open-source project in its early stages, your input can
142
- significantly shape our development.
143
- </Typography>
144
- </Paper>
145
- </Stack>
146
- </Grid>
147
- </Grid>
148
- </>
149
- );
150
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/huggingface/huggingface.tsx DELETED
@@ -1,64 +0,0 @@
1
- import { Alert, Link, Typography } from "@mui/material";
2
- import { HfInference } from "@huggingface/inference";
3
- import { useEffect } from "react";
4
- import Summarization from "./inference/summarization";
5
- import { HighlightBox } from "../base/boxes";
6
- import Code from "../base/code";
7
-
8
- export type InferenceProps = {
9
- token?: string;
10
- model: string;
11
- };
12
-
13
- export default function Huggingface() {
14
- return (
15
- <>
16
- <HighlightBox>
17
- <Typography component="h4" variant="h4">
18
- huggingface.js
19
- </Typography>
20
- </HighlightBox>
21
-
22
- <Typography variant="body1">
23
- <Link
24
- href="https://huggingface.co/docs/huggingface.js/index"
25
- target="_blank"
26
- rel="noopener"
27
- >
28
- huggingface.js
29
- </Link>{" "}
30
- is a suite of JavaScript libraries that interact with the Hugging Face
31
- API. It enables the use of over 100,000 ML models or your own via the{" "}
32
- <Link
33
- href="https://huggingface.co/docs/inference-endpoints/index"
34
- target="_blank"
35
- rel="noopener"
36
- >
37
- Inference API
38
- </Link>
39
- , and supports managing Hugging Face repositories.
40
- </Typography>
41
-
42
- <Alert severity="info">
43
- When you run into rate limits while using the components, make sure to
44
- add your πŸ€— access token (optained via your{" "}
45
- <Link
46
- href="https://huggingface.co/settings/tokens"
47
- target="_blank"
48
- rel="noopener"
49
- >
50
- account settings
51
- </Link>
52
- ) into `HF Access Token` under &quot;Options&quot;.
53
- </Alert>
54
-
55
- <Typography component="h5" variant="h5">
56
- Summarization
57
- </Typography>
58
-
59
- <Code>{`<Summarization model="facebook/bart-large-cnn" maxLength={100} />`}</Code>
60
-
61
- <Summarization model="facebook/bart-large-cnn" maxLength={100} />
62
- </>
63
- );
64
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/huggingface/inference/summarization.tsx DELETED
@@ -1,190 +0,0 @@
1
- import {
2
- Alert,
3
- Box,
4
- Button,
5
- CircularProgress,
6
- Paper,
7
- Slider,
8
- Stack,
9
- TextField,
10
- Typography,
11
- } from "@mui/material";
12
- import { useEffect, useRef, useState } from "react";
13
- import { HfInference, SummarizationArgs } from "@huggingface/inference";
14
- import { InferenceProps } from "../huggingface";
15
- import Options from "@/components/base/options";
16
- import SliderWithLabel from "@/components/base/slider-with-label";
17
- import ExampleButton from "@/components/base/example-button";
18
- import Secret from "@/components/base/secret";
19
-
20
- type SummarizationProps = InferenceProps & {
21
- /**
22
- * (Default: None). Integer to define the maximum length in tokens of the output summary.
23
- */
24
- maxLength?: number;
25
- /**
26
- * (Default: None). Float (0-120.0). The amount of time in seconds that the query should take maximum. Network can cause some overhead so it will be a soft limit.
27
- */
28
- maxTime?: number;
29
- /**
30
- * (Default: None). Integer to define the minimum length in tokens of the output summary.
31
- */
32
- minLength?: number;
33
- /**
34
- * (Default: None). Float (0.0-100.0). The more a token is used within generation the more it is penalized to not be picked in successive generation passes.
35
- */
36
- repetitionPenalty?: number;
37
- /**
38
- * (Default: 1.0). Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability.
39
- */
40
- temperature?: number;
41
- /**
42
- * (Default: None). Integer to define the top tokens considered within the sample operation to create new text.
43
- */
44
- topK?: number;
45
- /**
46
- * (Default: None). Float to define the tokens that are within the sample operation of text generation. Add tokens in the sample for more probable to least probable until the sum of the probabilities is greater than top_p.
47
- */
48
- topP?: number;
49
- };
50
-
51
- export default function Summarization(props: SummarizationProps) {
52
- const {
53
- model,
54
- maxLength,
55
- maxTime,
56
- minLength,
57
- repetitionPenalty,
58
- temperature,
59
- topK,
60
- topP,
61
- } = props;
62
-
63
- const [token, setToken] = useState<string>("");
64
- const [inputText, setInputText] = useState<string>("");
65
- const [summary, setSummary] = useState<string>("");
66
- const [error, setError] = useState<string>("");
67
- const [loading, setLoading] = useState(false);
68
-
69
- const inference = useRef<HfInference | null>(null);
70
-
71
- useEffect(() => {
72
- inference.current = new HfInference(token);
73
- }, [token]);
74
-
75
- // Parse the data of the form and trigger "call"
76
- const handleSubmit = (event: any) => {
77
- event.preventDefault();
78
- const data = new FormData(event.currentTarget);
79
-
80
- setToken(data.get("token") as string);
81
-
82
- const text = data.get("text") as string;
83
- const max_length = Number(data.get("maxLength") as string);
84
-
85
- call({ model, inputs: text, parameters: { max_length } });
86
- };
87
-
88
- /**
89
- * Call the inference API using args
90
- */
91
- const call = async (args: SummarizationArgs) => {
92
- const { inputs, parameters } = args;
93
-
94
- try {
95
- setLoading(true);
96
-
97
- const response = await inference.current?.summarization({
98
- model,
99
- inputs,
100
- parameters,
101
- });
102
-
103
- setSummary(response?.summary_text as string);
104
- setError("");
105
- } catch (error) {
106
- if (error instanceof Error) {
107
- setError(error.message);
108
- } else {
109
- setError("An unknown error occurred");
110
- }
111
- }
112
-
113
- setLoading(false);
114
- };
115
-
116
- return (
117
- <>
118
- <Paper component="form" onSubmit={handleSubmit} sx={{ padding: "1em" }}>
119
- <Stack spacing={2}>
120
- <TextField
121
- variant="filled"
122
- label="Text to summarize"
123
- multiline
124
- required
125
- minRows={4}
126
- name="text"
127
- value={inputText}
128
- onChange={e => setInputText(e.target.value)}
129
- />
130
-
131
- <Button type="submit" variant="contained" disabled={loading}>
132
- Run{" "}
133
- {loading && (
134
- <CircularProgress
135
- size={24}
136
- sx={{
137
- position: "absolute",
138
- top: "50%",
139
- left: "50%",
140
- marginTop: "-12px",
141
- marginLeft: "-12px",
142
- }}
143
- />
144
- )}
145
- </Button>
146
-
147
- {error && <Alert severity="error">{error}</Alert>}
148
-
149
- <TextField
150
- variant="outlined"
151
- label="Summary"
152
- multiline
153
- minRows={2}
154
- name="text"
155
- value={summary}
156
- />
157
-
158
- <Options>
159
- <Secret name="token" label="HF Access Token" />
160
-
161
- <SliderWithLabel
162
- label="max_length"
163
- name="maxLength"
164
- aria-label="max length"
165
- defaultValue={maxLength}
166
- step={1}
167
- min={56}
168
- max={256}
169
- />
170
- </Options>
171
-
172
- <Typography variant="h6" sx={{ fontSize: "1em" }}>
173
- Examples
174
- </Typography>
175
- <Stack direction="row" spacing={2}>
176
- <ExampleButton
177
- text="The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second tallest free-standing structure in France after the Millau Viaduct."
178
- onClick={setInputText}
179
- />
180
-
181
- <ExampleButton
182
- text="Machine learning (ML) is a field devoted to understanding and building methods that let machines 'learn' – that is, methods that leverage data to improve computer performance on some set of tasks. Machine learning algorithms build a model based on sample data, known as training data, in order to make predictions or decisions without being explicitly programmed to do so. Machine learning algorithms are used in a wide variety of applications, such as in medicine, email filtering, speech recognition, agriculture, and computer vision, where it is difficult or unfeasible to develop conventional algorithms to perform the needed tasks."
183
- onClick={setInputText}
184
- />
185
- </Stack>
186
- </Stack>
187
- </Paper>
188
- </>
189
- );
190
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/title.tsx DELETED
@@ -1,62 +0,0 @@
1
- import { Button, Link, Paper, Stack, Typography } from "@mui/material";
2
- import { HighlightBox } from "./base/boxes";
3
- import ContentCopyIcon from "@mui/icons-material/ContentCopy";
4
-
5
- export default function Title() {
6
- return (
7
- <Stack
8
- spacing={4}
9
- sx={{
10
- justifyContent: "center",
11
- alignItems: "center",
12
- minHeight: "40vh",
13
- p: 4,
14
- }}
15
- >
16
- <Typography variant="h1" component="h1">
17
- <Link
18
- href="https://nextjs.org"
19
- target="_blank"
20
- rel="noopener noreferrer"
21
- >
22
- Next.js
23
- </Link>{" "}
24
- on πŸ€—{" "}
25
- <Link
26
- href="https://huggingface.co/spaces"
27
- target="_blank"
28
- rel="noopener noreferrer"
29
- >
30
- Spaces
31
- </Link>
32
- </Typography>
33
-
34
- <HighlightBox>
35
- <Typography variant="h5" component="p">
36
- Run your ML demo with ease in a Next.js environment
37
- </Typography>
38
- </HighlightBox>
39
-
40
- <Stack gap={2} direction="row">
41
- <Button
42
- startIcon={<ContentCopyIcon />}
43
- variant="contained"
44
- href="https://huggingface.co/spaces/failfast/nextjs-docker-starter?duplicate=true"
45
- target="_blank"
46
- rel="noopener"
47
- color="secondary"
48
- >
49
- Duplicate space
50
- </Button>
51
-
52
- <Button
53
- href="https://github.com/failfa-st/nextjs-docker-starter"
54
- target="_blank"
55
- rel="noopener"
56
- >
57
- Contribute on GitHub
58
- </Button>
59
- </Stack>
60
- </Stack>
61
- );
62
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/components/ui/button.tsx ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import { Slot } from "@radix-ui/react-slot"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const buttonVariants = cva(
8
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14
+ destructive:
15
+ "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16
+ outline:
17
+ "border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground",
18
+ secondary:
19
+ "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
20
+ ghost: "hover:bg-accent hover:text-accent-foreground",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ },
23
+ size: {
24
+ default: "h-9 px-4 py-2",
25
+ sm: "h-8 rounded-md px-3 text-xs",
26
+ lg: "h-10 rounded-md px-8",
27
+ icon: "h-9 w-9",
28
+ },
29
+ },
30
+ defaultVariants: {
31
+ variant: "default",
32
+ size: "default",
33
+ },
34
+ }
35
+ )
36
+
37
+ export interface ButtonProps
38
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
39
+ VariantProps<typeof buttonVariants> {
40
+ asChild?: boolean
41
+ }
42
+
43
+ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
44
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
45
+ const Comp = asChild ? Slot : "button"
46
+ return (
47
+ <Comp
48
+ className={cn(buttonVariants({ variant, size, className }))}
49
+ ref={ref}
50
+ {...props}
51
+ />
52
+ )
53
+ }
54
+ )
55
+ Button.displayName = "Button"
56
+
57
+ export { Button, buttonVariants }
src/components/ui/input.tsx ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ export interface InputProps
6
+ extends React.InputHTMLAttributes<HTMLInputElement> {}
7
+
8
+ const Input = React.forwardRef<HTMLInputElement, InputProps>(
9
+ ({ className, type, ...props }, ref) => {
10
+ return (
11
+ <input
12
+ type={type}
13
+ className={cn(
14
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
15
+ className
16
+ )}
17
+ ref={ref}
18
+ {...props}
19
+ />
20
+ )
21
+ }
22
+ )
23
+ Input.displayName = "Input"
24
+
25
+ export { Input }
src/components/under-construction.tsx DELETED
@@ -1,8 +0,0 @@
1
- import { styled } from "@mui/material/styles";
2
-
3
- export const UnderConstruction = styled("div")({
4
- width: "100%",
5
- height: "266px",
6
- backgroundRepeat: "round",
7
- backgroundImage: `url("data:image/gif;base64,R0lGODlhCgEKAfECAAAAAP/dAP///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCAACACwAAAAACgEKAQAC/5SPqcvtD6OUoNqLs568+w+G4kiWnoaml8m27gvHsqHW24zn+s6f9l/pCYfEYgsINCqXzOYB+XNKp9QY1FbNareNq/fGDYuN37JljE7vzGa1++1il+H0Okj+tev3D7yXDxhI4wclaKgGFKC4yNjo+Jh0KDmV+Gh5uRg5ublUifnZqMk5OuQJeipKqqpjevqZuhpr9ePqCiuLy9Jaa3mb+zuxyzucGQV87CBMPOyLjKy8XNvsDAwdjWpMrS1gff2ave3c7X05HR47Tg4Jfq6arr5s3m73Ds/MPh9Yby+Nn8+3jx82LP8MBRT4jWBBfbQQ2pO3EFFDh+ogRsxykOI1i/8XlWTUGM9fR0oTQZrkOJLIR5O8UKYUspKlLZEvmcSUCcplzTUlcSLUuTNOT59EFQENemdoUZ9HkfqwsTRqgKZOOdyUSoxqVQpKsYLUuhXCVa/9FIaFMZbswBpnTaQtRwgAS7BI3/aKO5dm2y5d+cWVe1Lv3gV21xHKa3aw2L4P8QZOrDgZY3h/EbONHKGwo8qPL2NGoDnU38kVBQcNzWg0aXJ026EuplqFZRWRXxuNLbszbcW2p+JOMTtF7dXefgPXLZw38Y3GNQRHsbW34eYXorZeJX0zdQzWTZ/LLnq7he6QF4JPLX780uvulvtNX4G8547nYaeXv3tk/dvw8Sf/z7ffXf2p5Vt5vwQ4nXgEFjjfM+59BR9garFHz4MaRSghWRTWgaB2A07oXXtQEYjhghvS0WF495EYokEWMhXhggn+t0mKCa0oI3oGCmIjJiXmqGODkvQI14dAMphfjS/i9OORSNI4CZEC4njkiVRIOSN1TvInpB7vYOich35sWVaXaXwJJndi4kHmTDuOgWaa6qnIZps5tYgRcXJWt6Ycdt75phhx7pmlGX/emOQbg8pZaBmH+ohnFYum2egXjxZpZp4jhqQmp2Ne6h90mtbAXKdZOQZqUVaSsFKYntaZKlGrjtBqBqV+GiuMgZKx5JMZ3nNYrrpm2kmvrp4arLAy/80qQq2mAourssiJWuymF9rap5bSPgcGD70da5+C207bLU/WUgQul+KOe+2uL3yLLZ3bsQuhu0Kd61C6vjZHb7vEzoLvT/EGuW6/AjFLWK9u8imvtgYfHOlTpK4XY7YPLxuxZAFza1yWF3OMwREKR9MkwfF9XO+/HQRYcrgno4xuxnxtTG7HFsMcs71c0ZxywS7/inNjOmc28qvz3hw0xEMnICW/a82ZdM9QzjwxiL8tDHXUOas8CM+y2gwow1pvnSjVuVmNG9Yvj51viE2DjejabCvNNTdFUwY3pM/OLXTdb1/9tNx8413e31TqLfbg/sKqYcVhZ61428k2biTikP9HTjfjXrWM6eWY9605VpxP6fnnpU2+ueNxA2064dGmXnnngrd++uui563u7PrSXhyqlKeNtMms835r6FI53bDHxIPuJ4uAJx/88r2jfvvzwisvPWu+ww489N5nX3zzaMeG/fXgT2/78biTftz5JG9fffer7+5+4GyYuH6liddfpvGhcva49vGvJfBTn/UsJ8ABqu1+zpMfAlGgQGj5j2IHlB0EI9g/8f3OZxbEYAYZOL6jBXB4HsyWoRrIQfaRsITCO2EIHbY6Fo7QhRsUYQxl+EAaci+F5cOhCR2FQhs+0IcWLFfXqva1Pa3QfBG0CMuUuMSfedCJd5Mgpew3Rbf/VZGASlxgFu31xC5iEYNU9BrZrjjCL/ptix8cXQ/51xR4WeqHc0wj7dgjRy/o7wpevKPMGJBHPtJRj2NsHR7ZuMcE5g6ENzTkHxNmRu3VsYVAtKMjl9YHRA7ybJSc5BD9iEmNIfGMSEhkKQtpOmbZRYdFNNbAYIYwBayykvNz5d4+FkumsZGVKnTW/nD5yKREso16oqUVo8iuXIJml8Zs5TDfCMxQ0oqZnnTmKLn4y4sp8wnUJOQMbZnNh23TbIok5jB5Gb5TOmmcwQCnIL/5TPthaZNBGBUnjzkpdbrunVUKpgx8yc8cdjOgOWLnzq5pToSakn5G0yeQDEq0eDYs/5+zrKaMILoYiXZSofS8IPMcWlB/equYFl3oKyWZPpCtgEMk9WYtNSrQktYsZCw9ZzN7OVANDqtsErGpTCeaU0budGo95ShQferS2k1QatSCA0VbSlD0LXVxRD0TVKGwwIqmdKYrZUjA0NnRzAkRpTx10VdvakqxwlCpVeWRUsB61HA2FHn7bKtXEQrXjZZurvl7nzSLes9FPvWW6aQrW5sapbeiNazviZ1U7QoIYeT1ZwxF1uHICtnEnhWpUTWpY025DcleFaQ4FSM8uyoOxXIWq/KEYlYzEFrVGlWv5fTsZUuLWgdtdraUHS0Ukbkv2GpDtKslrW152NHY7jawuP9l7nHH2tx6Aki2e6WtR19KqOSmhLhytW5le2ta676Eu9UFL28F61rt6oe6s3sucH+rL4w6lb3vXWxcGaVe+tD3tcX9LWi3u9/W9je995VuXTQZNPlq9rzEU/CQEIwzBx9ino+SsFkZzDsLuxWmmNPwXZ17Pg8ricPRrNtwSKxNkZ4GwrkSMTpYHCsXYwfGqZKxiDCcNBuTgsI1ROxnDgpig+l4uDTG319/vEwUX2rI1OAxKY2IZIkFuV9MTq2SK6zizzhZciaOcjuv3GMoe/leOF5nlscMyCJz9Qxo/qeamSrmNpdgywlls5zf9Waq+vjOc87zk4XLZxzQucptGfSzmQP95TInscuIdoufsVnWRrsZzH+mqaTNpeih7vnSAMs0kw7Naas8OriWDrVNRk3oNoeR0aaetKcfu+lWwwTVoJa1lGu7ZgPbWiW0PvKu0RLUOP/aCVqN9LCbUOzMHptXlEZvqZdNkmaTOrfQJnawAV1tKSQ71tnWdoS6rahvgxuw2xk3ualjbqvCJ91owBC74STud7vhL/IGSFzqvQd647tChNg3v/3g75oCPODz7XdVCgAAIfkEBQEAAgAsOABUAH4AYgAAAv+ED6LL7Q+jnLRai87dvPuPZQlIlua5iCPKtu6jvvKMxvSNb3bO944aCAoDviINOAwaly5kkgk9OYfRKmgqtGo5WOX2S+kSweSLuIxunNPsNRvtfpPj8i+9rr3j9/y+/w8YKDhIWGh4iJiouMjY6PgIGSk5+ZEUtENZYhmAmQmy2enpASoiqmkZarpBmqH6iVrqisKKIDsK22rLQauhu4pb63vBayA8DNxrTEG8ory7iVzszAAd3TxdnZRqnD20Ldwt9O0bfhk7rVDOeY7+oD6u+86OXQ5vK5/bjh+sXz/vvC9ZOwcBpfULZ09WwWsA/eVDt3CggIgDKUpssFCFxn9mjDJu/Miwo0OQJA0+8liS4yKUKfmdHNlyoySWMUPOtFYT5E1tOWPu9Naz5U9xQVMONVeU5NF1SXVGYtb04UUFRqcyqGqVasmsKbZyFYA1a1irY792lWpWK9q0CS+2lfh2YNx2KgoAACH5BAUBAAIALDgAYgCFAFQAAAL/hA+hG+IPo5y02ouz1uiwtYXiSJZcl3yNybbu+6DpB9f2Xcnqive+q1P9hkRRkFZMKieypfMpaUKnTin1SrRitzgt9/vygsclMfm8kZnR7Ji6045H3wi53UGv3+X5w57fB/AXFyg4eOi0g7inuGjX6BgHGck2SXlmeTmWqQlVyJkV2PYp9FQ4Ggg6dMpGilQl2ppaCtuH2qf6w4rmyuAZG7kbVgh8JwxEbPt33JKsvMfM4pw3GG0yTVddjIy9Jvs83I3SSSJuPk5ucb5ukK7Ofu6eA28uT0Ffbz+Hj62/z+/MX4QdAMEJJFgwm8AHCBOqWchQhcM3EB00nAin4kWMgH40SuSYseKqbSK7kCxpwxrKcNRW9lDpUtrJmM1metyBk4E4mgJy+lSwk+ZPn0FjDs1Z1OVRnElXLt2YjOfTj/2EUs2zlOcEqGqyah14lY7XrxE/9PJJFgLXIz/TltU5a6hbi2HfjJ0LIxfeEXr3hujrVwPgwBgGE7Zg+DCFpQUAACH5BAUBAAIALDgARgCTAGIAAAL/lI+py+0Po5wK2Isx3bz7D2biBZbmiUbjmLbu260iTNf2IWf3zp+51gsKJz/S8HgbBZbMQNGCjNKUzeUTIM22qNWr9mviNr3gckxUtT7NbIqYSW7LHW91cY7P6/f8vv8PGCg4SFhoeIgIwZIouMgI6PjoFynJR1mpd4mJp7kpV+c04ykF2jnKUyp6epSqs8qKlmb6WtMKRBtka4QbFpv2K6vKG+ILbBzqOkyccdw8q6xS3BycDH3GPA38bE0nnQ0nzO3m/Y18+/BrrQuVkg69jtWepk6+TeGuDN+CP6wvX0UPW5dwJfjxgleO2jlxSOwxrEXwYa6IElFRrJjkIkaIu9U2WrwCMqTIkSRLmjyJMqXKlSxbunwJM6bMmTRr2ryJM6fOnTx7+vxpE88vUAmn0fwzlFxRZzORKrywtOhRP0kFRs02tU9VDFfLZeWzFWpXrE2pPrUwlqzMV2kBeuTQtslbuHGXzN1Q1+7dCXkD7OWb96+EvoL/9W3293C2xIoR723s+C7kY4wnG/RoGVjlzHIfc3Yr+XPn0KL1ki69WXTqz4U7dG1NNypsvFdn36ttezDu3BBe8+5tuQAAOw==")`,
8
- });
 
 
 
 
 
 
 
 
 
src/lib/utils.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { type ClassValue, clsx } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
src/pages/global.css CHANGED
@@ -1,3 +1,76 @@
1
  @tailwind base;
2
  @tailwind components;
3
- @tailwind utilities;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  @tailwind base;
2
  @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ :root {
7
+ --background: 0 0% 100%;
8
+ --foreground: 224 71.4% 4.1%;
9
+
10
+ --card: 0 0% 100%;
11
+ --card-foreground: 224 71.4% 4.1%;
12
+
13
+ --popover: 0 0% 100%;
14
+ --popover-foreground: 224 71.4% 4.1%;
15
+
16
+ --primary: 220.9 39.3% 11%;
17
+ --primary-foreground: 210 20% 98%;
18
+
19
+ --secondary: 220 14.3% 95.9%;
20
+ --secondary-foreground: 220.9 39.3% 11%;
21
+
22
+ --muted: 220 14.3% 95.9%;
23
+ --muted-foreground: 220 8.9% 46.1%;
24
+
25
+ --accent: 220 14.3% 95.9%;
26
+ --accent-foreground: 220.9 39.3% 11%;
27
+
28
+ --destructive: 0 84.2% 60.2%;
29
+ --destructive-foreground: 210 20% 98%;
30
+
31
+ --border: 220 13% 91%;
32
+ --input: 220 13% 91%;
33
+ --ring: 224 71.4% 4.1%;
34
+
35
+ --radius: 0.5rem;
36
+ }
37
+
38
+ .dark {
39
+ --background: 224 71.4% 4.1%;
40
+ --foreground: 210 20% 98%;
41
+
42
+ --card: 224 71.4% 4.1%;
43
+ --card-foreground: 210 20% 98%;
44
+
45
+ --popover: 224 71.4% 4.1%;
46
+ --popover-foreground: 210 20% 98%;
47
+
48
+ --primary: 210 20% 98%;
49
+ --primary-foreground: 220.9 39.3% 11%;
50
+
51
+ --secondary: 215 27.9% 16.9%;
52
+ --secondary-foreground: 210 20% 98%;
53
+
54
+ --muted: 215 27.9% 16.9%;
55
+ --muted-foreground: 217.9 10.6% 64.9%;
56
+
57
+ --accent: 215 27.9% 16.9%;
58
+ --accent-foreground: 210 20% 98%;
59
+
60
+ --destructive: 0 62.8% 30.6%;
61
+ --destructive-foreground: 210 20% 98%;
62
+
63
+ --border: 215 27.9% 16.9%;
64
+ --input: 215 27.9% 16.9%;
65
+ --ring: 216 12.2% 83.9%;
66
+ }
67
+ }
68
+
69
+ @layer base {
70
+ * {
71
+ @apply border-border;
72
+ }
73
+ body {
74
+ @apply bg-background text-foreground;
75
+ }
76
+ }
src/pages/index.tsx CHANGED
@@ -1,8 +1,8 @@
1
  import Head from "next/head";
2
  import Link from "next/link";
3
  import { useState } from "react";
4
- import { Input } from "@mui/material";
5
- import Button from "@mui/material";
6
  export default function Home() {
7
  const [file,setFile] = useState(null);
8
  const [result,setResult] = useState('');
@@ -28,11 +28,12 @@ export default function Home() {
28
  <h1 className='text-gray-400 text-5xl md:text-7xl font-bold'>Here <span className='text-blue-600 dark:text-blue-500'> .Chat</span></h1>
29
  </div>
30
  <div className=''>
31
- <div className="">
32
- <label className="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Upload file</label>
33
- <input className="p-2 block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400" aria-describedby="file_input_help" id="file_input" type="file"/>
34
- <p className="mt-1 text-sm text-gray-500 dark:text-gray-300" id="file_input_help">SVG, PNG, JPG or GIF (MAX. 800x400px).</p>
35
-
 
36
  </div>
37
  </div>
38
  </div>
 
1
  import Head from "next/head";
2
  import Link from "next/link";
3
  import { useState } from "react";
4
+ import { Button } from "@/components/ui/button";
5
+ import { Input } from "@/components/ui/input";
6
  export default function Home() {
7
  const [file,setFile] = useState(null);
8
  const [result,setResult] = useState('');
 
28
  <h1 className='text-gray-400 text-5xl md:text-7xl font-bold'>Here <span className='text-blue-600 dark:text-blue-500'> .Chat</span></h1>
29
  </div>
30
  <div className=''>
31
+ <div className="flex gap-2">
32
+ <div className="">
33
+ <Input type='file' onChange={handleFileChange}/>
34
+ <p className="mt-1 text-sm text-gray-500 dark:text-gray-300" id="file_input_help">SVG, PNG, JPG or GIF (MAX. 800x400px).</p>
35
+ </div>
36
+ <Button className='border-2 border-blue-500 bg-white text-blue-500 font-bold hover:text-white hover:bg-blue-500'>Submit</Button>
37
  </div>
38
  </div>
39
  </div>
tailwind.config.js CHANGED
@@ -1,15 +1,76 @@
1
  /** @type {import('tailwindcss').Config} */
2
  module.exports = {
 
3
  content: [
4
- "./app/**/*.{js,ts,jsx,tsx,mdx}",
5
- "./pages/**/*.{js,ts,jsx,tsx,mdx}",
6
- "./components/**/*.{js,ts,jsx,tsx,mdx}",
7
-
8
- // Or if using `src` directory:
9
- "./src/**/*.{js,ts,jsx,tsx,mdx}",
10
- ],
11
  theme: {
12
- extend: {},
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  },
14
- plugins: [],
15
- }
 
1
  /** @type {import('tailwindcss').Config} */
2
  module.exports = {
3
+ darkMode: ["class"],
4
  content: [
5
+ './pages/**/*.{ts,tsx}',
6
+ './components/**/*.{ts,tsx}',
7
+ './app/**/*.{ts,tsx}',
8
+ './src/**/*.{ts,tsx}',
9
+ ],
 
 
10
  theme: {
11
+ container: {
12
+ center: true,
13
+ padding: "2rem",
14
+ screens: {
15
+ "2xl": "1400px",
16
+ },
17
+ },
18
+ extend: {
19
+ colors: {
20
+ border: "hsl(var(--border))",
21
+ input: "hsl(var(--input))",
22
+ ring: "hsl(var(--ring))",
23
+ background: "hsl(var(--background))",
24
+ foreground: "hsl(var(--foreground))",
25
+ primary: {
26
+ DEFAULT: "hsl(var(--primary))",
27
+ foreground: "hsl(var(--primary-foreground))",
28
+ },
29
+ secondary: {
30
+ DEFAULT: "hsl(var(--secondary))",
31
+ foreground: "hsl(var(--secondary-foreground))",
32
+ },
33
+ destructive: {
34
+ DEFAULT: "hsl(var(--destructive))",
35
+ foreground: "hsl(var(--destructive-foreground))",
36
+ },
37
+ muted: {
38
+ DEFAULT: "hsl(var(--muted))",
39
+ foreground: "hsl(var(--muted-foreground))",
40
+ },
41
+ accent: {
42
+ DEFAULT: "hsl(var(--accent))",
43
+ foreground: "hsl(var(--accent-foreground))",
44
+ },
45
+ popover: {
46
+ DEFAULT: "hsl(var(--popover))",
47
+ foreground: "hsl(var(--popover-foreground))",
48
+ },
49
+ card: {
50
+ DEFAULT: "hsl(var(--card))",
51
+ foreground: "hsl(var(--card-foreground))",
52
+ },
53
+ },
54
+ borderRadius: {
55
+ lg: "var(--radius)",
56
+ md: "calc(var(--radius) - 2px)",
57
+ sm: "calc(var(--radius) - 4px)",
58
+ },
59
+ keyframes: {
60
+ "accordion-down": {
61
+ from: { height: 0 },
62
+ to: { height: "var(--radix-accordion-content-height)" },
63
+ },
64
+ "accordion-up": {
65
+ from: { height: "var(--radix-accordion-content-height)" },
66
+ to: { height: 0 },
67
+ },
68
+ },
69
+ animation: {
70
+ "accordion-down": "accordion-down 0.2s ease-out",
71
+ "accordion-up": "accordion-up 0.2s ease-out",
72
+ },
73
+ },
74
  },
75
+ plugins: [require("tailwindcss-animate")],
76
+ }