aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorreal-zephex <[email protected]>2024-05-24 22:51:36 +0530
committerreal-zephex <[email protected]>2024-05-24 22:51:36 +0530
commit180c9577f8337991ca71470816333fe8430cd3ca (patch)
tree82caa5a920443bcf0db3746c7ecacd968d4fc148
parentstyle: minor improvements to the anime cards (diff)
downloaddramalama-180c9577f8337991ca71470816333fe8430cd3ca.tar.xz
dramalama-180c9577f8337991ca71470816333fe8430cd3ca.zip
✨ feat(ui): 🎨 migrate from vanilla css to tailwind css, adopted next ui and restructured
-rwxr-xr-xbun.lockbbin156305 -> 279981 bytes
-rw-r--r--config/fonts/index.js18
-rw-r--r--next.config.mjs1
-rw-r--r--package-lock.json3721
-rw-r--r--package.json8
-rw-r--r--postcss.config.js6
-rw-r--r--src/app/anime/[id]/page.jsx103
-rw-r--r--src/app/anime/components/cacher.js4
-rw-r--r--src/app/anime/components/episode_buttons.jsx2
-rw-r--r--src/app/anime/components/infoTabs.jsx46
-rw-r--r--src/app/anime/components/popularAnimes.jsx53
-rw-r--r--src/app/anime/components/recentEpisodes.jsx54
-rw-r--r--src/app/anime/components/saveToLocalStorage.js29
-rw-r--r--src/app/anime/components/search.jsx55
-rw-r--r--src/app/anime/components/search_results.jsx51
-rw-r--r--src/app/anime/components/topAiring.jsx56
-rw-r--r--src/app/anime/components/vidButtonContainer.jsx133
-rw-r--r--src/app/anime/continueWatching/page.jsx1
-rw-r--r--src/app/anime/loading.jsx11
-rw-r--r--src/app/anime/page.jsx105
-rw-r--r--src/app/anime/styles/anime.module.css4
-rw-r--r--src/app/anime/styles/buttons.module.css98
-rw-r--r--src/app/anime/styles/cw.module.css59
-rw-r--r--src/app/anime/styles/info.module.css69
-rw-r--r--src/app/anime/styles/loading.module.css12
-rw-r--r--src/app/anime/styles/pop_recent_top.module.css95
-rw-r--r--src/app/anime/styles/search.module.css116
-rw-r--r--src/app/components/header/header.jsx53
-rw-r--r--src/app/components/moonIcon.jsx17
-rw-r--r--src/app/components/sunIcon.jsx17
-rw-r--r--src/app/components/themeSwitcher.jsx43
-rw-r--r--src/app/components/workInProgress/page.jsx12
-rw-r--r--src/app/error.jsx13
-rw-r--r--src/app/globals.css10
-rw-r--r--src/app/kdrama/[id]/buttons.jsx86
-rw-r--r--src/app/kdrama/[id]/page.jsx92
-rw-r--r--src/app/kdrama/components/cacher.js17
-rw-r--r--src/app/kdrama/components/episodesContainer.jsx83
-rw-r--r--src/app/kdrama/components/infoTabs.jsx51
-rw-r--r--src/app/kdrama/components/popular.jsx47
-rw-r--r--src/app/kdrama/components/recent.jsx46
-rw-r--r--src/app/kdrama/components/requests.js44
-rw-r--r--src/app/kdrama/components/search.jsx65
-rw-r--r--src/app/kdrama/components/searchBar.jsx57
-rw-r--r--src/app/kdrama/components/searchFormatter.jsx46
-rw-r--r--src/app/kdrama/components/searchQuery.js10
-rw-r--r--src/app/kdrama/components/videoLink.js11
-rw-r--r--src/app/kdrama/loading.jsx9
-rw-r--r--src/app/kdrama/page.jsx104
-rw-r--r--src/app/kdrama/styles/info.module.css173
-rw-r--r--src/app/kdrama/styles/kdrama.module.css4
-rw-r--r--src/app/kdrama/styles/loading.module.css21
-rw-r--r--src/app/kdrama/styles/popular.module.css73
-rw-r--r--src/app/kdrama/styles/search.module.css84
-rw-r--r--src/app/layout.jsx31
-rw-r--r--src/app/movies/components/popular.jsx17
-rw-r--r--src/app/movies/components/search.jsx2
-rw-r--r--src/app/movies/components/trending.jsx17
-rw-r--r--src/app/movies/styles/pop_trend.module.css26
-rw-r--r--src/app/movies/styles/search.module.css7
-rw-r--r--src/app/page.jsx96
-rw-r--r--src/app/page.module.css156
-rw-r--r--src/app/web-series/[id]/page.jsx2
-rw-r--r--src/app/web-series/components/HomePageModules.jsx4
-rw-r--r--src/app/web-series/components/searchBar.jsx2
-rw-r--r--src/app/web-series/styles/info.module.css1
-rw-r--r--src/app/web-series/styles/pages.module.css9
-rw-r--r--src/app/web-series/styles/search.module.css4
-rw-r--r--tailwind.config.js21
-rw-r--r--utils/kdrama_urls.js15
70 files changed, 4756 insertions, 1852 deletions
diff --git a/bun.lockb b/bun.lockb
index f7889a3..bf23101 100755
--- a/bun.lockb
+++ b/bun.lockb
Binary files differ
diff --git a/config/fonts/index.js b/config/fonts/index.js
new file mode 100644
index 0000000..a979da0
--- /dev/null
+++ b/config/fonts/index.js
@@ -0,0 +1,18 @@
+import {
+ Lexend_Deca,
+ Atkinson_Hyperlegible,
+ Poppins,
+ Fira_Code,
+} from "next/font/google";
+
+export const lexend = Lexend_Deca({
+ subsets: ["latin"],
+ weight: ["400"],
+ variable: "--font-lexend",
+});
+
+export const atkinson = Atkinson_Hyperlegible({
+ subsets: ["latin"],
+ weight: "400",
+ variable: "--font-atkinson",
+});
diff --git a/next.config.mjs b/next.config.mjs
index 2ec75eb..a38c7a2 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -42,6 +42,7 @@ const nextConfig = {
fullUrl: true,
},
},
+
// experimental: {
// serverActions: {
// allowedOrigins: ["localhost:3000"],
diff --git a/package-lock.json b/package-lock.json
index c37c1eb..6eedba9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,11 +8,13 @@
"name": "dramalama-next",
"version": "0.1.0",
"dependencies": {
+ "@nextui-org/react": "^2.3.6",
"@vercel/analytics": "^1.2.2",
"@vercel/postgres": "^0.7.2",
"@vercel/speed-insights": "^1.0.10",
"@vidstack/react": "^1.10.9",
"child_process": "^1.0.2",
+ "framer-motion": "^11.2.6",
"media-icons": "^1.1.2",
"next": "^14.2.2",
"react": "^18.2.0",
@@ -26,8 +28,11 @@
"devDependencies": {
"@types/node": "20.11.28",
"@types/react": "18.2.66",
+ "autoprefixer": "^10.4.19",
"eslint": "^8",
- "eslint-config-next": "^14.1.4"
+ "eslint-config-next": "^14.1.4",
+ "postcss": "^8.4.38",
+ "tailwindcss": "^3.4.3"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -39,11 +44,21 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@babel/runtime": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
- "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
- "dev": true,
+ "version": "7.24.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz",
+ "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -116,6 +131,50 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz",
+ "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==",
+ "dependencies": {
+ "@formatjs/intl-localematcher": "0.5.4",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz",
+ "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.7.8",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz",
+ "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "@formatjs/icu-skeleton-parser": "1.8.2",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz",
+ "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz",
+ "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
@@ -580,11 +639,43 @@
"url": "https://opencollective.com/libvips"
}
},
+ "node_modules/@internationalized/date": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.4.tgz",
+ "integrity": "sha512-qoVJVro+O0rBaw+8HPjUB1iH8Ihf8oziEnqMnvhJUSuVIrHOuZ6eNLHNvzXJKUvAtaDiqMnRlg8Z2mgh09BlUw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/message": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.4.tgz",
+ "integrity": "sha512-Dygi9hH1s7V9nha07pggCkvmRfDd3q2lWnMGvrJyrOwYMe1yj4D2T9BoH9I6MGR7xz0biQrtLPsqUkqXzIrBOw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0",
+ "intl-messageformat": "^10.1.0"
+ }
+ },
+ "node_modules/@internationalized/number": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.5.3.tgz",
+ "integrity": "sha512-rd1wA3ebzlp0Mehj5YTuTI50AQEx80gWFyHcQu+u91/5NgdwBecO8BH6ipPfE+lmQ9d63vpB3H9SHoIUiupllw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/string": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.3.tgz",
+ "integrity": "sha512-9kpfLoA8HegiWTeCbR2livhdVeKobCnVv8tlJ6M2jF+4tcMqDo94ezwlnrUANBWPgd8U7OXIHCk2Ov2qhk4KXw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -601,7 +692,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -613,7 +703,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -624,6 +713,49 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
"node_modules/@neondatabase/serverless": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@neondatabase/serverless/-/serverless-0.7.2.tgz",
@@ -781,11 +913,1371 @@
"node": ">= 10"
}
},
+ "node_modules/@nextui-org/accordion": {
+ "version": "2.0.32",
+ "resolved": "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.0.32.tgz",
+ "integrity": "sha512-iwvEd89SdOrtCxeX2Pq44wmgFm6a01sCq79BgCKuqMcsCFekZ5/yQu09R3kBB6Kne4ghZWF6MXgmzOgbS04atg==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/divider": "2.0.27",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-accordion": "2.0.4",
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/accordion": "3.0.0-alpha.19",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/aria-utils": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@nextui-org/aria-utils/-/aria-utils-2.0.18.tgz",
+ "integrity": "sha512-9ZIZgWFU26csBnfAxsG5HEcz/nLmbeUusbi3kME3sm69iu5B0+A0WSABW+Ffk1Vhtyh73zJZRpA8baC673+5tQ==",
+ "dependencies": {
+ "@nextui-org/react-rsc-utils": "2.0.12",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system": "2.1.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/autocomplete": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@nextui-org/autocomplete/-/autocomplete-2.0.16.tgz",
+ "integrity": "sha512-cVkFTiiM6Io7XPKMMdNZdTg9OpC/SVOsO48RrbxIv9Nl2HzvQYadhsiYett3skSMTy4u3Az8FJPUp+ql0GmxxA==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/input": "2.1.21",
+ "@nextui-org/listbox": "2.1.19",
+ "@nextui-org/popover": "2.1.21",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/scroll-shadow": "2.1.16",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/spinner": "2.0.28",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/combobox": "^3.8.4",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/combobox": "^3.8.2",
+ "@react-types/combobox": "^3.10.1",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/avatar": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/avatar/-/avatar-2.0.27.tgz",
+ "integrity": "sha512-rmEWhzg7bHOYWCvcFWBjex80aRtnLE7QyHWTHr9+KtOQRJRtv33Kxy5JfDcCQ6vKBz/ZPAWJ76ftUaba3yvXjQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-image": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/badge": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/badge/-/badge-2.0.27.tgz",
+ "integrity": "sha512-7JH8X7F4FvsPjygToTId87/syh0ZPS6GK8z3zCZHu7zgA10FrwbCyQGuTpznF2GAnmtW3DxTWpemOOJD0dMJbQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/breadcrumbs": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/breadcrumbs/-/breadcrumbs-2.0.7.tgz",
+ "integrity": "sha512-4xD3hUy5QFtYSZWxjY8Cprq4BpSPfqkR9RyVmG9q5MCeJ8zJQTZlEZ1VCZjnwx4Mtif4kDxAgEm/eBhn6dW7mA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/breadcrumbs": "^3.5.11",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/breadcrumbs": "^3.7.3",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/button": {
+ "version": "2.0.31",
+ "resolved": "https://registry.npmjs.org/@nextui-org/button/-/button-2.0.31.tgz",
+ "integrity": "sha512-EqrmTLhJaIFqDCK247XHuEE0c10A1mnRpIoMEgwP5GUjAFC/5itpdU80zRDi4zWXUaI6ppaVpZqWnDOCK5Qvwg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/ripple": "2.0.28",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/spinner": "2.0.28",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/calendar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/calendar/-/calendar-2.0.4.tgz",
+ "integrity": "sha512-B1OqFBt9Z8jh42qPW6u5W0fsyf1iYs2d1hdhHfVEvFgK7E1KoNaVe03pwZsZV/tYTW/Mh5zSuNwWhhWxphzrHA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@react-aria/calendar": "3.5.1",
+ "@react-aria/focus": "^3.14.3",
+ "@react-aria/i18n": "^3.8.4",
+ "@react-aria/interactions": "^3.19.1",
+ "@react-aria/utils": "^3.21.1",
+ "@react-aria/visually-hidden": "^3.8.6",
+ "@react-stately/calendar": "3.4.1",
+ "@react-stately/utils": "^3.8.0",
+ "@react-types/button": "^3.9.0",
+ "@react-types/calendar": "3.4.1",
+ "@react-types/shared": "3.21.0",
+ "@types/lodash.debounce": "^4.0.7",
+ "lodash.debounce": "^4.0.8",
+ "scroll-into-view-if-needed": "3.0.10"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/calendar/node_modules/@react-types/shared": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz",
+ "integrity": "sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@nextui-org/card": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/card/-/card-2.0.28.tgz",
+ "integrity": "sha512-Vwa7Poi1kxqjnTWQS9FAGlQw301RqkMlY5cnYQCGeKNbFX+y6u1MlqTSi8ed6RqmdjO23j1zG2+XlBieFyJ9Mg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/ripple": "2.0.28",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/checkbox": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@nextui-org/checkbox/-/checkbox-2.0.29.tgz",
+ "integrity": "sha512-Ed1ahtrFoewt61TPi3aDFZAeA2+Dn+D4A798A2OPBPMHLe70xBPL84Vi35okeY3bzUdBwWQKLMGXbz9nM26sZA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-callback-ref": "2.0.5",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/checkbox": "^3.14.1",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/checkbox": "^3.6.3",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/checkbox": "^3.7.1",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/chip": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/chip/-/chip-2.0.28.tgz",
+ "integrity": "sha512-oD28KZx+PuaWkHlizvMgOAxIkL9cblwun0IhqEztKcR2DMRVdH/4r8/Zdo6QQFDhXlUU0Ub5+WUOyHndwNj0pg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/checkbox": "^3.7.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/code": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/code/-/code-2.0.27.tgz",
+ "integrity": "sha512-gDK48LMNSgQIeUs5WZ53s/hRqDfTMuDdDNgQcmt0bRWMlUC2BTuBfQGzK4y9wbJA9mlWocia7ZDWRWyJrB4vjQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/date-input": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nextui-org/date-input/-/date-input-2.0.3.tgz",
+ "integrity": "sha512-7WMJGptHHl+P0LpKk3a7e/Dj86Np66RGLVzWWlFipe7hrg+wJCdkuWCyj6V9mNgH/sdkVKhfkGYT2MogNbOhdA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/datepicker": "^3.9.3",
+ "@react-aria/i18n": "^3.8.4",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/datepicker": "^3.9.2",
+ "@react-types/datepicker": "^3.7.2",
+ "@react-types/shared": "3.21.0"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/date-input/node_modules/@react-types/shared": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz",
+ "integrity": "sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@nextui-org/date-picker": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/date-picker/-/date-picker-2.0.7.tgz",
+ "integrity": "sha512-03Jys6JMthgX1BMW9R1MKPkHkoetXf4bYZRETAXU5Y9cY1TcosY0FiDEwAUCjlusYOq2UWMRYH4q83tCmir6ag==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/calendar": "2.0.4",
+ "@nextui-org/date-input": "2.0.3",
+ "@nextui-org/popover": "2.1.21",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/datepicker": "^3.9.3",
+ "@react-aria/i18n": "^3.8.4",
+ "@react-aria/utils": "^3.21.1",
+ "@react-stately/datepicker": "^3.9.2",
+ "@react-stately/overlays": "^3.6.3",
+ "@react-stately/utils": "^3.8.0",
+ "@react-types/datepicker": "^3.7.2",
+ "@react-types/shared": "3.21.0"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/date-picker/node_modules/@react-types/shared": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.21.0.tgz",
+ "integrity": "sha512-wJA2cUF8dP4LkuNUt9Vh2kkfiQb2NLnV2pPXxVnKJZ7d4x2/7VPccN+LYPnH8m0X3+rt50cxWuPKQmjxSsCFOg==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@nextui-org/divider": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/divider/-/divider-2.0.27.tgz",
+ "integrity": "sha512-530oEHonzaxKxspoaKnBFJ4InGqXv2FgOYzEPAMWoMmLb4/zp7e5lRipFKqRsN+zdwIkRNH6c0VJmHfyWI+bUg==",
+ "dependencies": {
+ "@nextui-org/react-rsc-utils": "2.0.12",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/dropdown": {
+ "version": "2.1.23",
+ "resolved": "https://registry.npmjs.org/@nextui-org/dropdown/-/dropdown-2.1.23.tgz",
+ "integrity": "sha512-4wAzUbKztvuzzuJcLuDKhvnxB++EQ2aATbCdnfcBA5IyBxj6k4lbalgmSQxtx6D4dm5iJeiOWCJHRZgsIqkxRg==",
+ "dependencies": {
+ "@nextui-org/menu": "2.0.22",
+ "@nextui-org/popover": "2.1.21",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/menu": "^3.6.1",
+ "@react-types/menu": "^3.9.7"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/framer-utils": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/@nextui-org/framer-utils/-/framer-utils-2.0.18.tgz",
+ "integrity": "sha512-RNI5/wKjgLNjEaVdLrXH8J/mkC7HKZ6S99JNFmviU1JiVgWzwHKtuci5ZPDntUFGg6G8kX6P7OCDh+d/pMJQAA==",
+ "dependencies": {
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system": "2.1.2",
+ "@nextui-org/use-measure": "2.0.1"
+ },
+ "peerDependencies": {
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/image": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/image/-/image-2.0.27.tgz",
+ "integrity": "sha512-EJa1bsZL8zsnTOVd+ZY04ldBz177CO/igz16rpRjo1KPMDX0fxlcjUbUopMfujIASytA68Yq4U1rxfO/xJthuQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-image": "2.0.5"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/input": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/@nextui-org/input/-/input-2.1.21.tgz",
+ "integrity": "sha512-jwTD4RnpTuieSuLOYqW7Dw2To6E9OVJtcyRBYNIT6GaejT3YG4qaST7BMKz0pJW6mgF9M+pDeKcdOvOqEbOoDg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/textfield": "^3.14.3",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/utils": "^3.9.1",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/textfield": "^3.9.1",
+ "react-textarea-autosize": "^8.5.3"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/kbd": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/kbd/-/kbd-2.0.28.tgz",
+ "integrity": "sha512-raH2Nw+wAHO54swTduLLs/Vdg2/mbMHEe0Y7ud6D13lPexWHVfxUzt7C39/9y8nKh0SpgOkcWV+EmQBydLAI7A==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1",
+ "@react-aria/utils": "^3.23.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/link": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@nextui-org/link/-/link-2.0.29.tgz",
+ "integrity": "sha512-OfOi7GLj3apimwAsAXTRZ8/B0tWvx/yXLZFtEe9676+tlLND1nfmWyBHdDIx5WMMiLc3Q1M3FkNrZvigeKQIbQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-link": "2.0.16",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/link": "^3.6.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/link": "^3.5.3"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/listbox": {
+ "version": "2.1.19",
+ "resolved": "https://registry.npmjs.org/@nextui-org/listbox/-/listbox-2.1.19.tgz",
+ "integrity": "sha512-9qQs9KwdDHZ3VaSz4SkYcqn8onuSMCiZElta1vyqJGMWW6JYjJ4DtUOiyqwJdzZOQLIlxazT+GCWjjFUZwFZlQ==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/divider": "2.0.27",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-is-mobile": "2.0.7",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/listbox": "^3.11.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/list": "^3.10.3",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/menu": {
+ "version": "2.0.22",
+ "resolved": "https://registry.npmjs.org/@nextui-org/menu/-/menu-2.0.22.tgz",
+ "integrity": "sha512-zU1MbyDPk0QNAVZUSDJSMmdVxpFzWHyiLqOtS+b+kZLdn0va+QBR6LPj237PhyQueChNyz/y8eDDbJ0D6bWf/g==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/divider": "2.0.27",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-menu": "2.0.2",
+ "@nextui-org/use-is-mobile": "2.0.7",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/menu": "^3.6.1",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/modal": {
+ "version": "2.0.33",
+ "resolved": "https://registry.npmjs.org/@nextui-org/modal/-/modal-2.0.33.tgz",
+ "integrity": "sha512-YCgWUMNiVMXAgd6SmU4yH7Ifrz+cmtlF2sK9DBL8kaIZtqAjuhPQj0uQnetvXpY649vomJWVdh9QYHNfD1Jv1Q==",
+ "dependencies": {
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@nextui-org/use-aria-modal-overlay": "2.0.8",
+ "@nextui-org/use-disclosure": "2.0.7",
+ "@react-aria/dialog": "^3.5.12",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/overlays": "^3.8.5"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/navbar": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/@nextui-org/navbar/-/navbar-2.0.30.tgz",
+ "integrity": "sha512-Iaw3BU0gdX14nBtZUUFRnsXodnCe1Sbsv9Xk7OI44p+KbOhySgfcjf4iFcXM0vfTOMlOkBSsUzR9bt+/69G5pw==",
+ "dependencies": {
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-toggle-button": "2.0.7",
+ "@nextui-org/use-scroll-position": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-stately/utils": "^3.9.1",
+ "react-remove-scroll": "^2.5.6"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/pagination": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/@nextui-org/pagination/-/pagination-2.0.30.tgz",
+ "integrity": "sha512-tdlSbNTpqr+aww8h9+7d2Iu0ZX6GGtREeVAbf2+jr5j7VF/VVMVm2eaLJ4m1vw7VQIrEMwKNrcP8QCMMT0a+SQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-pagination": "2.0.6",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "scroll-into-view-if-needed": "3.0.10"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/popover": {
+ "version": "2.1.21",
+ "resolved": "https://registry.npmjs.org/@nextui-org/popover/-/popover-2.1.21.tgz",
+ "integrity": "sha512-Loa6eoAYW0DacDIW+/SC//0LhDDAMnUcd8R9axXtKd00N0Zgnj3YpUJoyLRYvwl5I/FWwV1nCOAvndzW6JJvpQ==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/dialog": "^3.5.12",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/button": "^3.9.2",
+ "@react-types/overlays": "^3.8.5",
+ "react-remove-scroll": "^2.5.6"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/progress": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/progress/-/progress-2.0.28.tgz",
+ "integrity": "sha512-3Wp6mUeKzw0onLB7/JR1HI3+Y4zf0immVnQp3TYr2zvM5PLAy6RXKtACEGkJanBPfvx4tv3YAIF3419WMvmniw==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-is-mounted": "2.0.5",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/progress": "^3.4.11",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/progress": "^3.5.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/radio": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/radio/-/radio-2.0.28.tgz",
+ "integrity": "sha512-h8SSQTDj0NzB13r77RrcEDuWNSpE00ioO7GJKTROd09YQSmck/AID1+ktsDMRQYjoPMPJ7vgwJHuRoKIjXn1CQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/radio": "^3.10.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/radio": "^3.10.2",
+ "@react-types/radio": "^3.7.1",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/react": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/@nextui-org/react/-/react-2.3.6.tgz",
+ "integrity": "sha512-mA3IgPBmVZLpwLxn1t97fpwjBL+dZdAt4x9+3TjJfEQjbH9j/FvUsOAIpaT53BMcDIWrqP3Co3yR+AbplgSiEg==",
+ "dependencies": {
+ "@nextui-org/accordion": "2.0.32",
+ "@nextui-org/autocomplete": "2.0.16",
+ "@nextui-org/avatar": "2.0.27",
+ "@nextui-org/badge": "2.0.27",
+ "@nextui-org/breadcrumbs": "2.0.7",
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/calendar": "2.0.4",
+ "@nextui-org/card": "2.0.28",
+ "@nextui-org/checkbox": "2.0.29",
+ "@nextui-org/chip": "2.0.28",
+ "@nextui-org/code": "2.0.27",
+ "@nextui-org/date-input": "2.0.3",
+ "@nextui-org/date-picker": "2.0.7",
+ "@nextui-org/divider": "2.0.27",
+ "@nextui-org/dropdown": "2.1.23",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/image": "2.0.27",
+ "@nextui-org/input": "2.1.21",
+ "@nextui-org/kbd": "2.0.28",
+ "@nextui-org/link": "2.0.29",
+ "@nextui-org/listbox": "2.1.19",
+ "@nextui-org/menu": "2.0.22",
+ "@nextui-org/modal": "2.0.33",
+ "@nextui-org/navbar": "2.0.30",
+ "@nextui-org/pagination": "2.0.30",
+ "@nextui-org/popover": "2.1.21",
+ "@nextui-org/progress": "2.0.28",
+ "@nextui-org/radio": "2.0.28",
+ "@nextui-org/ripple": "2.0.28",
+ "@nextui-org/scroll-shadow": "2.1.16",
+ "@nextui-org/select": "2.1.27",
+ "@nextui-org/skeleton": "2.0.27",
+ "@nextui-org/slider": "2.2.9",
+ "@nextui-org/snippet": "2.0.35",
+ "@nextui-org/spacer": "2.0.27",
+ "@nextui-org/spinner": "2.0.28",
+ "@nextui-org/switch": "2.0.28",
+ "@nextui-org/system": "2.1.2",
+ "@nextui-org/table": "2.0.33",
+ "@nextui-org/tabs": "2.0.29",
+ "@nextui-org/theme": "2.2.3",
+ "@nextui-org/tooltip": "2.0.33",
+ "@nextui-org/user": "2.0.28",
+ "@react-aria/visually-hidden": "^3.8.10"
+ },
+ "peerDependencies": {
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/react-rsc-utils": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@nextui-org/react-rsc-utils/-/react-rsc-utils-2.0.12.tgz",
+ "integrity": "sha512-s2IG4pM1K+kbm6A2g3UpqrS592AExpGixtZNPJ2lV5+UQi1ld3vb4EiBIOViZMoSCNCoNdaeO5Yqo6cKghwCPA=="
+ },
+ "node_modules/@nextui-org/react-utils": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@nextui-org/react-utils/-/react-utils-2.0.13.tgz",
+ "integrity": "sha512-4DM1Cph1lVY64T/HDyEqcxYkInXx6hdL1Kp9StLza9yqgYmVipTaPkWZdmWbfkhP+dVVqrH3DVFfHtpLTQ625w==",
+ "dependencies": {
+ "@nextui-org/react-rsc-utils": "2.0.12",
+ "@nextui-org/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/ripple": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/ripple/-/ripple-2.0.28.tgz",
+ "integrity": "sha512-tAxuPjVncx6rSzdHqcFGiprlUo7p+tkTf0c9RMC47DtgIG1DLhFVr0z6QkggmLd1Tgwcj4a3Oyj/PAQMDRxswg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/scroll-shadow": {
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@nextui-org/scroll-shadow/-/scroll-shadow-2.1.16.tgz",
+ "integrity": "sha512-QkOHNFQqEdfSj6iAKd4SusZpmyaJcBFCvx4zLLrWCXGS0+0KWvuaq/dOE8PXSPo4vts4TGDQp6qQGhk0BFvttg==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-data-scroll-overflow": "2.1.4"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/select": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/select/-/select-2.1.27.tgz",
+ "integrity": "sha512-SLEOir+I09y9wA1reIJRefovyR48Pn+L6oMIiZqYCA0ndGnz3K1g2gsSZ6fyCb9obwZvjzFGvIsrYkW0btUzlA==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/listbox": "2.1.19",
+ "@nextui-org/popover": "2.1.21",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/scroll-shadow": "2.1.16",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/spinner": "2.0.28",
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@nextui-org/use-aria-multiselect": "2.1.5",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/form": "^3.0.3",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/shared-icons": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/shared-icons/-/shared-icons-2.0.7.tgz",
+ "integrity": "sha512-GsotFeRbwxhc2eQt7Z6edcVYfklpaSzo93Xodryb82SokRaSOKt9BEpUXgk2TExAvJMjDnB4T8nk8ANWsFaXOw==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/shared-utils": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/shared-utils/-/shared-utils-2.0.5.tgz",
+ "integrity": "sha512-aFc/CUL8RVfBh0IotIpxkpKjyUPc/zJaMJd5pRCQA1kIpKLdSrlh3//MLYMaP/fo/NQtE3DPeXqfKhHRr1fkEw=="
+ },
+ "node_modules/@nextui-org/skeleton": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/skeleton/-/skeleton-2.0.27.tgz",
+ "integrity": "sha512-AolxdzJ4xCyb7i2DwZ1iQGSaLGUBYh/rorO8llBqsXDpvhBANcFF3DbRO3kQ+EVGr5AEbEeurd3RabC2F6wVDA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/slider": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/@nextui-org/slider/-/slider-2.2.9.tgz",
+ "integrity": "sha512-y/Oxhl1OkY7amgYpHZwCF4dF6Uop0Pb+k6m6CNCeXIBL3KFT1Hw9yd17NrV05BekA1llfJrVHEvzneBuTTbbbA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/tooltip": "2.0.33",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/slider": "^3.7.6",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/slider": "^3.5.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/snippet": {
+ "version": "2.0.35",
+ "resolved": "https://registry.npmjs.org/@nextui-org/snippet/-/snippet-2.0.35.tgz",
+ "integrity": "sha512-2GYxzt6ZBqgEn6XYgi+uU8YMPfMPCAORMXiw/Q+QTuoLQPgKFqsjnQKV7FI581Dax61mIMI5QL5WsQ0oG6PtFw==",
+ "dependencies": {
+ "@nextui-org/button": "2.0.31",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/tooltip": "2.0.33",
+ "@nextui-org/use-clipboard": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/utils": "^3.23.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/spacer": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/@nextui-org/spacer/-/spacer-2.0.27.tgz",
+ "integrity": "sha512-2zYe6PR7Mk4xQpzEhAAkZ8fBp75h7XhgSB7u1aiqW2hJzcuD82hn1SLoUacrYJeO/FBO5UJKQmc8LT63JtuzWQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/spinner": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/spinner/-/spinner-2.0.28.tgz",
+ "integrity": "sha512-hlixGubd91KFSHIjwE0/vLmkSOtUwl56uFrsHBred2pqq8/1CAVlN7aINwoUotZRc5W0T7lyEQGvf88t0Dd3CA==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/system-rsc": "2.1.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/switch": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/switch/-/switch-2.0.28.tgz",
+ "integrity": "sha512-cogzyB7Ng95WP/neMBWgOLRkw2GC/qLQoW0gTuuT53lTEnAtatFikNoL30CyA/EZzz7YsUjLH2W+9kBiZLtITQ==",
+ "dependencies": {
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/switch": "^3.6.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/system": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@nextui-org/system/-/system-2.1.2.tgz",
+ "integrity": "sha512-dkj2DAye6pjpVheoJKup+L8CyK774YORudkum+5zCuwyOe50IV2j6wbGqyWir9cI1fruFUsfzQ1NR4KljWNqFQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.2",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/system-rsc": "2.1.1",
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/utils": "^3.9.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/system-rsc": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@nextui-org/system-rsc/-/system-rsc-2.1.1.tgz",
+ "integrity": "sha512-gkTKNAbTZVl81SVJsaLHp4iqyd956y40UIGUXPeq0pwOGLM0xGWSkLbkNT8WtdPUt3bSD9y0xuKbiV3tpSBGOA==",
+ "dependencies": {
+ "clsx": "^1.2.1"
+ },
+ "peerDependencies": {
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "tailwind-variants": ">=0.1.13"
+ }
+ },
+ "node_modules/@nextui-org/table": {
+ "version": "2.0.33",
+ "resolved": "https://registry.npmjs.org/@nextui-org/table/-/table-2.0.33.tgz",
+ "integrity": "sha512-mUqGGWCoEo5z49s60IrVnBDcSgT8K2T5+x5qqmk30v09B6s5c8dqyL7NAC+pk7BayHqr5xEW42EqMbRKmVvtCw==",
+ "dependencies": {
+ "@nextui-org/checkbox": "2.0.29",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-icons": "2.0.7",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/spacer": "2.0.27",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/table": "^3.13.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-aria/visually-hidden": "^3.8.10",
+ "@react-stately/table": "^3.11.6",
+ "@react-stately/virtualizer": "^3.6.8",
+ "@react-types/grid": "^3.2.4",
+ "@react-types/table": "^3.9.3"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/tabs": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@nextui-org/tabs/-/tabs-2.0.29.tgz",
+ "integrity": "sha512-RthZ+lNyXQ3CNXMRiQdQMGGsWJurS7ESrhowLRtTiDOPYhnJxAMqrqzI3k8ZgDIBirC/1zEoOdn89oqd2Pa5gw==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-is-mounted": "2.0.5",
+ "@nextui-org/use-update-effect": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/tabs": "^3.8.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tabs": "^3.6.4",
+ "@react-types/shared": "^3.22.1",
+ "@react-types/tabs": "^3.3.5",
+ "scroll-into-view-if-needed": "3.0.10"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/theme": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.2.3.tgz",
+ "integrity": "sha512-p8gZ+4dQxA4ZO9RxVljAs37EYtQsw0n9DtXD6f395gpl0DLKRq/d4oCQ887oC6lHDyTibtaHHtOu+MKzK6j7Gw==",
+ "dependencies": {
+ "color": "^4.2.3",
+ "color2k": "^2.0.2",
+ "deepmerge": "4.3.1",
+ "flat": "^5.0.2",
+ "lodash.foreach": "^4.5.0",
+ "lodash.get": "^4.4.2",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.mapkeys": "^4.6.0",
+ "lodash.omit": "^4.5.0",
+ "tailwind-variants": "^0.1.20"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.4.0"
+ }
+ },
+ "node_modules/@nextui-org/theme/node_modules/tailwind-merge": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
+ "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/@nextui-org/theme/node_modules/tailwind-variants": {
+ "version": "0.1.20",
+ "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.20.tgz",
+ "integrity": "sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==",
+ "dependencies": {
+ "tailwind-merge": "^1.14.0"
+ },
+ "engines": {
+ "node": ">=16.x",
+ "pnpm": ">=7.x"
+ },
+ "peerDependencies": {
+ "tailwindcss": "*"
+ }
+ },
+ "node_modules/@nextui-org/tooltip": {
+ "version": "2.0.33",
+ "resolved": "https://registry.npmjs.org/@nextui-org/tooltip/-/tooltip-2.0.33.tgz",
+ "integrity": "sha512-WUpBuoZ1ya2iD9EI2d/E58BpPrRJQ2NDnpIU6RjwWe/MGqtxf3oJVQZd6kKpgaD8eB6P3OSiFTwTUK7+AoLmDQ==",
+ "dependencies": {
+ "@nextui-org/aria-utils": "2.0.18",
+ "@nextui-org/framer-utils": "2.0.18",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@nextui-org/use-safe-layout-effect": "2.0.5",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/tooltip": "^3.7.2",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tooltip": "^3.4.7",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/tooltip": "^3.4.7"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "framer-motion": ">=4.0.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-accordion": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-accordion/-/use-aria-accordion-2.0.4.tgz",
+ "integrity": "sha512-5OEi7zrv1F25XCjXSx+tOvyJWN/Modj9+iz5v/QXDJN76sFVIoCoNsUlZS5Vokyt5fImXb3SAlWvOPehqLbSGA==",
+ "dependencies": {
+ "@react-aria/button": "^3.9.3",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/accordion": "3.0.0-alpha.19",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-button": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-button/-/use-aria-button-2.0.7.tgz",
+ "integrity": "sha512-Cttt4C802RQX6Wae/IiuzdOCVjzHDnUMK8MBwkdDEKR/TVGjaTvPbLOJSw7FNmz0mIrtp7zaTHlRvrbDJmvnIQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-link": {
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-link/-/use-aria-link-2.0.16.tgz",
+ "integrity": "sha512-nxaSkHlSNbsODYDusoh6+bt8B7ndoAD82pC1b0c0M0kFP14hktzIf9noaY+bSujcI9MlLJR1WLwZoHGYC5Mlng==",
+ "dependencies": {
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-types/link": "^3.5.3",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-menu": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-menu/-/use-aria-menu-2.0.2.tgz",
+ "integrity": "sha512-YV/tp246bWTfZIa6eDnN19Z0VkOB5/SP9qlLtigY0a2lPuGQ/6o3LpcWZxQPOgLwBd6PQwUgNe/RakOO3rRrAQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/collections": "^3.10.5",
+ "@react-stately/tree": "^3.7.6",
+ "@react-types/menu": "^3.9.7",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-modal-overlay": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-modal-overlay/-/use-aria-modal-overlay-2.0.8.tgz",
+ "integrity": "sha512-fzMh/UtNEzYKOcjXyM1esGoxorB4nBPkg8vyGqVgkhU+QeI0JdWPEnC6nXAU6j57eh3ZYx/jLEMh1Jeu5IAEmw==",
+ "dependencies": {
+ "@react-aria/overlays": "^3.21.1",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/overlays": "^3.6.5",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-multiselect": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-multiselect/-/use-aria-multiselect-2.1.5.tgz",
+ "integrity": "sha512-AIWVu6iW4EX8RrnNtt3mHxDFtbQ7Io/mr0dpaE/s5HbfPMjljktMdP22YLYUnRXHqOeAfqtRSa9Mq7Qpec2Vtw==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.10.2",
+ "@react-aria/interactions": "^3.21.1",
+ "@react-aria/label": "^3.7.6",
+ "@react-aria/listbox": "^3.11.5",
+ "@react-aria/menu": "^3.13.1",
+ "@react-aria/selection": "^3.17.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/form": "^3.0.1",
+ "@react-stately/list": "^3.10.3",
+ "@react-stately/menu": "^3.6.1",
+ "@react-types/button": "^3.9.2",
+ "@react-types/overlays": "^3.8.5",
+ "@react-types/select": "^3.9.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-aria-toggle-button": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-toggle-button/-/use-aria-toggle-button-2.0.7.tgz",
+ "integrity": "sha512-m+1qjSoJrzMf6oefh1RTYSA0l/JbU9v3cHwpoX/OjCE6q3EpLaqgI/U679oxpd7OLPrWq6HmBKOzKt6ZmokMYw==",
+ "dependencies": {
+ "@nextui-org/use-aria-button": "2.0.7",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/toggle": "^3.7.2",
+ "@react-types/button": "^3.9.2",
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-callback-ref": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-callback-ref/-/use-callback-ref-2.0.5.tgz",
+ "integrity": "sha512-lcjlV5yaDTiFSv06E5RtQNqy+O6XqH/Q/yz+ka1ZBlZF/FdzEPNRfJ0shN2D7Sh3DdbvV2lySbA2g/0d94geaw==",
+ "dependencies": {
+ "@nextui-org/use-safe-layout-effect": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-clipboard": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-clipboard/-/use-clipboard-2.0.5.tgz",
+ "integrity": "sha512-1ExwXM8ENmc/kVDqKoiPGrBP/0B7rZ43iSv2MoWD1Qpc8GHg71Rv7NTIlBDoD/pfUfqkab6x66iKC7AVR8rifA==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-data-scroll-overflow": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-data-scroll-overflow/-/use-data-scroll-overflow-2.1.4.tgz",
+ "integrity": "sha512-0YqUAe/b9aZftUQOH7sWqBMJHGLyC2Q/ixFyjq8Q1TijrqEyGESGQ2tm0+FHytI04drV+mnsbf6+q2QIKyqGSg==",
+ "dependencies": {
+ "@nextui-org/shared-utils": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-disclosure": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-disclosure/-/use-disclosure-2.0.7.tgz",
+ "integrity": "sha512-h86z6H/eTQ6RMAYkWBvItgV0uh4UDTbJIa8hvDguzYLyGk5Ji+7HXotCUwKELrK/+QuOtAFYcJ6+Cp8zp7tZuA==",
+ "dependencies": {
+ "@nextui-org/use-callback-ref": "2.0.5",
+ "@react-aria/utils": "^3.23.2",
+ "@react-stately/utils": "^3.9.1"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-image": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-image/-/use-image-2.0.5.tgz",
+ "integrity": "sha512-FAMyvZS9XSNLqHEmU6xykMgwIFJj/V9/JpTiZAQziz2wqMiUONIBpYpGOlI+pPBNlhCkw62KHm/19vHW49FWhA==",
+ "dependencies": {
+ "@nextui-org/use-safe-layout-effect": "2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-is-mobile": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mobile/-/use-is-mobile-2.0.7.tgz",
+ "integrity": "sha512-BmOseC8Xmp5Xl8EKrsl/MoYtz0aIkezMatYGBCoGDGUosaKx8kNYv6T2WVA3uKj1Gr3s4dHhMCuISvcpE9XOiQ==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.2"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-is-mounted": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mounted/-/use-is-mounted-2.0.5.tgz",
+ "integrity": "sha512-gk698Uwmj/XhchBsnI5Ups5uzEXuZvsPK45K6goi2/ADKXSYxHOcSgwoexytqJBb/7tpi+emi2CRTAjAFZDQqA==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-measure": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-measure/-/use-measure-2.0.1.tgz",
+ "integrity": "sha512-uEtdrdBdFz4Fgbfk2vmQ+rEb+eFa5o4yI90udasvfpaIrMBfrFOlRW5+yn3uXKB8JThET4Gf2on/wlJpo567Dg==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-pagination": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-pagination/-/use-pagination-2.0.6.tgz",
+ "integrity": "sha512-/EIrpC/q6xQNDQrODivC3VVkphVmExiFjqqXdyxOHWnhfgC1BhQOqGK0qIPvDoHmk1U7ULKnlh/VuYjGtfTJgg==",
+ "dependencies": {
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/i18n": "^3.10.2"
+ },
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-safe-layout-effect": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-safe-layout-effect/-/use-safe-layout-effect-2.0.5.tgz",
+ "integrity": "sha512-YQQlqz82aYxMoEq23jQNG/JBPHF1x3opzyXRHAVxgBEFo9OJqBMZTm23ukpTXm2Ev98T6mpWiTHdfyHJ7IoRog==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-scroll-position": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-scroll-position/-/use-scroll-position-2.0.5.tgz",
+ "integrity": "sha512-SSHEmv51rXWF4pfQ3YjJuEmUmHFZBLRSM2jtVSfghR3pjckMykFtlyxGhTAcXKAwi5I7rTHcVL2HFOKWSZBdaQ==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/use-update-effect": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nextui-org/use-update-effect/-/use-update-effect-2.0.5.tgz",
+ "integrity": "sha512-4r2CXAD598xc2ifMu97kf8V/lj+NDct2oITbxgXeV4ezWaXHy5/26r1iyVnBzRN/VBz3fwHx3hHdftzcYSZxdA==",
+ "peerDependencies": {
+ "react": ">=18"
+ }
+ },
+ "node_modules/@nextui-org/user": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/@nextui-org/user/-/user-2.0.28.tgz",
+ "integrity": "sha512-1WaAZSIzgRMaA+2+BACelxIE4YvPN6MFW+I3SvODwn98aju1yU485akxjenc7XM/5CC6TGZDAXiFz2VcEFIcZA==",
+ "dependencies": {
+ "@nextui-org/avatar": "2.0.27",
+ "@nextui-org/react-utils": "2.0.13",
+ "@nextui-org/shared-utils": "2.0.5",
+ "@react-aria/focus": "^3.16.2",
+ "@react-aria/utils": "^3.23.2"
+ },
+ "peerDependencies": {
+ "@nextui-org/system": ">=2.0.0",
+ "@nextui-org/theme": ">=2.1.0",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -798,7 +2290,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -807,7 +2298,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -820,12 +2310,1206 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
"optional": true,
"engines": {
"node": ">=14"
}
},
+ "node_modules/@react-aria/breadcrumbs": {
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.13.tgz",
+ "integrity": "sha512-G1Gqf/P6kVdfs94ovwP18fTWuIxadIQgHsXS08JEVcFVYMjb9YjqnEBaohUxD1tq2WldMbYw53ahQblT4NTG+g==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/link": "^3.7.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/breadcrumbs": "^3.7.5",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/button": {
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.5.tgz",
+ "integrity": "sha512-dgcYR6j8WDOMLKuVrtxzx4jIC05cVKDzc+HnPO8lNkBAOfjcuN5tkGRtIjLtqjMvpZHhQT5aDbgFpIaZzxgFIg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/toggle": "^3.7.4",
+ "@react-types/button": "^3.9.4",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/calendar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.5.1.tgz",
+ "integrity": "sha512-3gGiI2arrGQtlPD9633l00TR4y5dj9IMFapEiCDuwVwNSCsnH8aiz/emg+3hGFq86QoyvkFBvnKmezJIVKfPkA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.0",
+ "@react-aria/i18n": "^3.8.3",
+ "@react-aria/interactions": "^3.19.0",
+ "@react-aria/live-announcer": "^3.3.1",
+ "@react-aria/utils": "^3.21.0",
+ "@react-stately/calendar": "^3.4.1",
+ "@react-types/button": "^3.9.0",
+ "@react-types/calendar": "^3.4.1",
+ "@react-types/shared": "^3.21.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/checkbox": {
+ "version": "3.14.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.14.3.tgz",
+ "integrity": "sha512-EtBJL6iu0gvrw3A4R7UeVLR6diaVk/mh4kFBc7c8hQjpEJweRr4hmJT3hrNg3MBcTWLxFiMEXPGgWEwXDBygtA==",
+ "dependencies": {
+ "@react-aria/form": "^3.0.5",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/toggle": "^3.10.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/checkbox": "^3.6.5",
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/toggle": "^3.7.4",
+ "@react-types/checkbox": "^3.8.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/combobox": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.9.1.tgz",
+ "integrity": "sha512-SpK92dCmT8qn8aEcUAihRQrBb5LZUhwIbDExFII8PvUvEFy/PoQHXIo3j1V29WkutDBDpMvBv/6XRCHGXPqrhQ==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/listbox": "^3.12.1",
+ "@react-aria/live-announcer": "^3.3.4",
+ "@react-aria/menu": "^3.14.1",
+ "@react-aria/overlays": "^3.22.1",
+ "@react-aria/selection": "^3.18.1",
+ "@react-aria/textfield": "^3.14.5",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/combobox": "^3.8.4",
+ "@react-stately/form": "^3.0.3",
+ "@react-types/button": "^3.9.4",
+ "@react-types/combobox": "^3.11.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/datepicker": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.10.1.tgz",
+ "integrity": "sha512-4HZL593nrNMa1GjBmWEN/OTvNS6d3/16G1YJWlqiUlv11ADulSbqBIjMmkgwrJVFcjrgqtXFy+yyrTA/oq94Zw==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@internationalized/number": "^3.5.3",
+ "@internationalized/string": "^3.2.3",
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/form": "^3.0.5",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/spinbutton": "^3.6.5",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/datepicker": "^3.9.4",
+ "@react-stately/form": "^3.0.3",
+ "@react-types/button": "^3.9.4",
+ "@react-types/calendar": "^3.4.6",
+ "@react-types/datepicker": "^3.7.4",
+ "@react-types/dialog": "^3.5.10",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/datepicker/node_modules/@react-types/calendar": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.6.tgz",
+ "integrity": "sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/dialog": {
+ "version": "3.5.14",
+ "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.14.tgz",
+ "integrity": "sha512-oqDCjQ8hxe3GStf48XWBf2CliEnxlR9GgSYPHJPUc69WBj68D9rVcCW3kogJnLAnwIyf3FnzbX4wSjvUa88sAQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/overlays": "^3.22.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/dialog": "^3.5.10",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/focus": {
+ "version": "3.17.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.17.1.tgz",
+ "integrity": "sha512-FLTySoSNqX++u0nWZJPPN5etXY0WBxaIe/YuL/GTEeuqUIuC/2bJSaw5hlsM6T2yjy6Y/VAxBcKSdAFUlU6njQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/focus/node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@react-aria/form": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.5.tgz",
+ "integrity": "sha512-n290jRwrrRXO3fS82MyWR+OKN7yznVesy5Q10IclSTVYHHI3VI53xtAPr/WzNjJR1um8aLhOcDNFKwnNIUUCsQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/form": "^3.0.3",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/grid": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.9.1.tgz",
+ "integrity": "sha512-fGEZqAEaS8mqzV/II3N4ndoNWegIcbh+L3PmKbXdpKKUP8VgMs/WY5rYl5WAF0f5RoFwXqx3ibDLeR9tKj/bOg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/live-announcer": "^3.3.4",
+ "@react-aria/selection": "^3.18.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/grid": "^3.8.7",
+ "@react-stately/selection": "^3.15.1",
+ "@react-stately/virtualizer": "^3.7.1",
+ "@react-types/checkbox": "^3.8.1",
+ "@react-types/grid": "^3.2.6",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/i18n": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.11.1.tgz",
+ "integrity": "sha512-vuiBHw1kZruNMYeKkTGGnmPyMnM5T+gT8bz97H1FqIq1hQ6OPzmtBZ6W6l6OIMjeHI5oJo4utTwfZl495GALFQ==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@internationalized/message": "^3.1.4",
+ "@internationalized/number": "^3.5.3",
+ "@internationalized/string": "^3.2.3",
+ "@react-aria/ssr": "^3.9.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/interactions": {
+ "version": "3.21.3",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.21.3.tgz",
+ "integrity": "sha512-BWIuf4qCs5FreDJ9AguawLVS0lV9UU+sK4CCnbCNNmYqOWY+1+gRXCsnOM32K+oMESBxilAjdHW5n1hsMqYMpA==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/label": {
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.8.tgz",
+ "integrity": "sha512-MzgTm5+suPA3KX7Ug6ZBK2NX9cin/RFLsv1BdafJ6CZpmUSpWnGE/yQfYUB7csN7j31OsZrD3/P56eShYWAQfg==",
+ "dependencies": {
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/link": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.1.tgz",
+ "integrity": "sha512-a4IaV50P3fXc7DQvEIPYkJJv26JknFbRzFT5MJOMgtzuhyJoQdILEUK6XHYjcSSNCA7uLgzpojArVk5Hz3lCpw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/link": "^3.5.5",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/listbox": {
+ "version": "3.12.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.12.1.tgz",
+ "integrity": "sha512-7JiUp0NGykbv/HgSpmTY1wqhuf/RmjFxs1HZcNaTv8A+DlzgJYc7yQqFjP3ZA/z5RvJFuuIxggIYmgIFjaRYdA==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/selection": "^3.18.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/list": "^3.10.5",
+ "@react-types/listbox": "^3.4.9",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/live-announcer": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.4.tgz",
+ "integrity": "sha512-w8lxs35QrRrn6pBNzVfyGOeqWdxeVKf9U6bXIVwhq7rrTqRULL8jqy8RJIMfIs1s8G5FpwWYjyBOjl2g5Cu1iA==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@react-aria/menu": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.14.1.tgz",
+ "integrity": "sha512-BYliRb38uAzq05UOFcD5XkjA5foQoXRbcH3ZufBsc4kvh79BcP1PMW6KsXKGJ7dC/PJWUwCui6QL1kUg8PqMHA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/overlays": "^3.22.1",
+ "@react-aria/selection": "^3.18.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/menu": "^3.7.1",
+ "@react-stately/tree": "^3.8.1",
+ "@react-types/button": "^3.9.4",
+ "@react-types/menu": "^3.9.9",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/overlays": {
+ "version": "3.22.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.22.1.tgz",
+ "integrity": "sha512-GHiFMWO4EQ6+j6b5QCnNoOYiyx1Gk8ZiwLzzglCI4q1NY5AG2EAmfU4Z1+Gtrf2S5Y0zHbumC7rs9GnPoGLUYg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/ssr": "^3.9.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-aria/visually-hidden": "^3.8.12",
+ "@react-stately/overlays": "^3.6.7",
+ "@react-types/button": "^3.9.4",
+ "@react-types/overlays": "^3.8.7",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/progress": {
+ "version": "3.4.13",
+ "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.13.tgz",
+ "integrity": "sha512-YBV9bOO5JzKvG8QCI0IAA00o6FczMgIDiK8Q9p5gKorFMatFUdRayxlbIPoYHMi+PguLil0jHgC7eOyaUcrZ0g==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/progress": "^3.5.4",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/radio": {
+ "version": "3.10.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.4.tgz",
+ "integrity": "sha512-3fmoMcQtCpgjTwJReFjnvIE/C7zOZeCeWUn4JKDqz9s1ILYsC3Rk5zZ4q66tFn6v+IQnecrKT52wH6+hlVLwTA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/form": "^3.0.5",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/radio": "^3.10.4",
+ "@react-types/radio": "^3.8.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/selection": {
+ "version": "3.18.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.18.1.tgz",
+ "integrity": "sha512-GSqN2jX6lh7v+ldqhVjAXDcrWS3N4IsKXxO6L6Ygsye86Q9q9Mq9twWDWWu5IjHD6LoVZLUBCMO+ENGbOkyqeQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/selection": "^3.15.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/slider": {
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.8.tgz",
+ "integrity": "sha512-MYvPcM0K8jxEJJicUK2+WxUkBIM/mquBxOTOSSIL3CszA80nXIGVnLlCUnQV3LOUzpWtabbWaZokSPtGgOgQOw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/slider": "^3.5.4",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/slider": "^3.7.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/spinbutton": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.5.tgz",
+ "integrity": "sha512-0aACBarF/Xr/7ixzjVBTQ0NBwwwsoGkf5v6AVFVMTC0uYMXHTALvRs+ULHjHMa5e/cX/aPlEvaVT7jfSs+Xy9Q==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/live-announcer": "^3.3.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/button": "^3.9.4",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/ssr": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz",
+ "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/switch": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.4.tgz",
+ "integrity": "sha512-2nVqz4ZuJyof47IpGSt3oZRmp+EdS8wzeDYgf42WHQXrx4uEOk1mdLJ20+NnsYhj/2NHZsvXVrjBeKMjlMs+0w==",
+ "dependencies": {
+ "@react-aria/toggle": "^3.10.4",
+ "@react-stately/toggle": "^3.7.4",
+ "@react-types/switch": "^3.5.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/table": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.14.1.tgz",
+ "integrity": "sha512-WaPgQe4zQF5OaluO5rm+Y2nEoFR63vsLd4BT4yjK1uaFhKhDY2Zk+1SCVQvBLLKS4WK9dhP05nrNzT0vp/ZPOw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/grid": "^3.9.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/live-announcer": "^3.3.4",
+ "@react-aria/utils": "^3.24.1",
+ "@react-aria/visually-hidden": "^3.8.12",
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/flags": "^3.0.3",
+ "@react-stately/table": "^3.11.8",
+ "@react-stately/virtualizer": "^3.7.1",
+ "@react-types/checkbox": "^3.8.1",
+ "@react-types/grid": "^3.2.6",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/table": "^3.9.5",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/tabs": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.1.tgz",
+ "integrity": "sha512-S5v/0sRcOaSXaJYZuuy1ZVzYc7JD4sDyseG1133GjyuNjJOFHgoWMb+b4uxNIJbZxnLgynn/ZDBZSO+qU+fIxw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/i18n": "^3.11.1",
+ "@react-aria/selection": "^3.18.1",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/tabs": "^3.6.6",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/tabs": "^3.3.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/textfield": {
+ "version": "3.14.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.14.5.tgz",
+ "integrity": "sha512-hj7H+66BjB1iTKKaFXwSZBZg88YT+wZboEXZ0DNdQB2ytzoz/g045wBItUuNi4ZjXI3P+0AOZznVMYadWBAmiA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/form": "^3.0.5",
+ "@react-aria/label": "^3.7.8",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/textfield": "^3.9.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/toggle": {
+ "version": "3.10.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.4.tgz",
+ "integrity": "sha512-bRk+CdB8QzrSyGNjENXiTWxfzYKRw753iwQXsEAU7agPCUdB8cZJyrhbaUoD0rwczzTp2zDbZ9rRbUPdsBE2YQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/toggle": "^3.7.4",
+ "@react-types/checkbox": "^3.8.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/tooltip": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.4.tgz",
+ "integrity": "sha512-+XRx4HlLYqWY3fB8Z60bQi/rbWDIGlFUtXYbtoa1J+EyRWfhpvsYImP8qeeNO/vgjUtDy1j9oKa8p6App9mBMQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.17.1",
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-stately/tooltip": "^3.4.9",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/tooltip": "^3.4.9",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/utils": {
+ "version": "3.24.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.24.1.tgz",
+ "integrity": "sha512-O3s9qhPMd6n42x9sKeJ3lhu5V1Tlnzhu6Yk8QOvDuXf7UGuUjXf9mzfHJt1dYzID4l9Fwm8toczBzPM9t0jc8Q==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.4",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-aria/utils/node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@react-aria/visually-hidden": {
+ "version": "3.8.12",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.12.tgz",
+ "integrity": "sha512-Bawm+2Cmw3Xrlr7ARzl2RLtKh0lNUdJ0eNqzWcyx4c0VHUAWtThmH5l+HRqFUGzzutFZVo89SAy40BAbd0gjVw==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.21.3",
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/calendar": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.4.1.tgz",
+ "integrity": "sha512-XKCdrXNA7/ukZ842EeDZfLqYUQDv/x5RoAVkzTbp++3U/MLM1XZXsqj+5xVlQfJiWpQzM9L6ySjxzzgepJDeuw==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.0",
+ "@react-stately/utils": "^3.8.0",
+ "@react-types/calendar": "^3.4.1",
+ "@react-types/datepicker": "^3.6.1",
+ "@react-types/shared": "^3.21.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/checkbox": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.5.tgz",
+ "integrity": "sha512-IXV3f9k+LtmfQLE+DKIN41Q5QB/YBLDCB1YVx5PEdRp52S9+EACD5683rjVm8NVRDwjMi2SP6RnFRk7fVb5Azg==",
+ "dependencies": {
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/checkbox": "^3.8.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/collections": {
+ "version": "3.10.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.7.tgz",
+ "integrity": "sha512-KRo5O2MWVL8n3aiqb+XR3vP6akmHLhLWYZEmPKjIv0ghQaEebBTrN3wiEjtd6dzllv0QqcWvDLM1LntNfJ2TsA==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/combobox": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.4.tgz",
+ "integrity": "sha512-iLVGvKRRz0TeJXZhZyK783hveHpYA6xovOSdzSD+WGYpiPXo1QrcrNoH3AE0Z2sHtorU+8nc0j58vh5PB+m2AA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/list": "^3.10.5",
+ "@react-stately/overlays": "^3.6.7",
+ "@react-stately/select": "^3.6.4",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/combobox": "^3.11.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/datepicker": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.9.4.tgz",
+ "integrity": "sha512-yBdX01jn6gq4NIVvHIqdjBUPo+WN8Bujc4OnPw+ZnfA4jI0eIgq04pfZ84cp1LVXW0IB0VaCu1AlQ/kvtZjfGA==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@internationalized/string": "^3.2.3",
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/overlays": "^3.6.7",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/datepicker": "^3.7.4",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/flags": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.3.tgz",
+ "integrity": "sha512-/ha7XFA0RZTQsbzSPwu3KkbNMgbvuM0GuMTYLTBWpgBrovBNTM+QqI/PfZTdHg8PwCYF4H5Y8gjdSpdulCvJFw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@react-stately/form": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.3.tgz",
+ "integrity": "sha512-92YYBvlHEWUGUpXgIaQ48J50jU9XrxfjYIN8BTvvhBHdD63oWgm8DzQnyT/NIAMzdLnhkg7vP+fjG8LjHeyIAg==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/grid": {
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.7.tgz",
+ "integrity": "sha512-he3TXCLAhF5C5z1/G4ySzcwyt7PEiWcVIupxebJQqRyFrNWemSuv+7tolnStmG8maMVIyV3P/3j4eRBbdSlOIg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/selection": "^3.15.1",
+ "@react-types/grid": "^3.2.6",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/list": {
+ "version": "3.10.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.5.tgz",
+ "integrity": "sha512-fV9plO+6QDHiewsYIhboxcDhF17GO95xepC5ki0bKXo44gr14g/LSo/BMmsaMnV+1BuGdBunB05bO4QOIaigXA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/selection": "^3.15.1",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/menu": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.7.1.tgz",
+ "integrity": "sha512-mX1w9HHzt+xal1WIT2xGrTQsoLvDwuB2R1Er1MBABs//MsJzccycatcgV/J/28m6tO5M9iuFQQvLV+i1dCtodg==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.6.7",
+ "@react-types/menu": "^3.9.9",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/overlays": {
+ "version": "3.6.7",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.7.tgz",
+ "integrity": "sha512-6zp8v/iNUm6YQap0loaFx6PlvN8C0DgWHNlrlzMtMmNuvjhjR0wYXVaTfNoUZBWj25tlDM81ukXOjpRXg9rLrw==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/overlays": "^3.8.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/radio": {
+ "version": "3.10.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.4.tgz",
+ "integrity": "sha512-kCIc7tAl4L7Hu4Wt9l2jaa+MzYmAJm0qmC8G8yPMbExpWbLRu6J8Un80GZu+JxvzgDlqDyrVvyv9zFifwH/NkQ==",
+ "dependencies": {
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/radio": "^3.8.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/select": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.4.tgz",
+ "integrity": "sha512-whZgF1N53D0/dS8tOFdrswB0alsk5Q5620HC3z+5f2Hpi8gwgAZ8TYa+2IcmMYRiT+bxVuvEc/NirU9yPmqGbA==",
+ "dependencies": {
+ "@react-stately/form": "^3.0.3",
+ "@react-stately/list": "^3.10.5",
+ "@react-stately/overlays": "^3.6.7",
+ "@react-types/select": "^3.9.4",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/selection": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.15.1.tgz",
+ "integrity": "sha512-6TQnN9L0UY9w19B7xzb1P6mbUVBtW840Cw1SjgNXCB3NPaCf59SwqClYzoj8O2ZFzMe8F/nUJtfU1NS65/OLlw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/slider": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.5.4.tgz",
+ "integrity": "sha512-Jsf7K17dr93lkNKL9ij8HUcoM1sPbq8TvmibD6DhrK9If2lje+OOL8y4n4qreUnfMT56HCAeS9wCO3fg3eMyrw==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/slider": "^3.7.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/table": {
+ "version": "3.11.8",
+ "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.8.tgz",
+ "integrity": "sha512-EdyRW3lT1/kAVDp5FkEIi1BQ7tvmD2YgniGdLuW/l9LADo0T+oxZqruv60qpUS6sQap+59Riaxl91ClDxrJnpg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/flags": "^3.0.3",
+ "@react-stately/grid": "^3.8.7",
+ "@react-stately/selection": "^3.15.1",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/grid": "^3.2.6",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/table": "^3.9.5",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tabs": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.6.tgz",
+ "integrity": "sha512-sOLxorH2uqjAA+v1ppkMCc2YyjgqvSGeBDgtR/lyPSDd4CVMoTExszROX2dqG0c8il9RQvzFuufUtQWMY6PgSA==",
+ "dependencies": {
+ "@react-stately/list": "^3.10.5",
+ "@react-types/shared": "^3.23.1",
+ "@react-types/tabs": "^3.3.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/toggle": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.4.tgz",
+ "integrity": "sha512-CoYFe9WrhLkDP4HGDpJYQKwfiYCRBAeoBQHv+JWl5eyK61S8xSwoHsveYuEZ3bowx71zyCnNAqWRrmNOxJ4CKA==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/checkbox": "^3.8.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tooltip": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.9.tgz",
+ "integrity": "sha512-P7CDJsdoKarz32qFwf3VNS01lyC+63gXpDZG31pUu+EO5BeQd4WKN/AH1Beuswpr4GWzxzFc1aXQgERFGVzraA==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.6.7",
+ "@react-types/tooltip": "^3.4.9",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/tree": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.1.tgz",
+ "integrity": "sha512-LOdkkruJWch3W89h4B/bXhfr0t0t1aRfEp+IMrrwdRAl23NaPqwl5ILHs4Xu5XDHqqhg8co73pHrJwUyiTWEjw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.10.7",
+ "@react-stately/selection": "^3.15.1",
+ "@react-stately/utils": "^3.10.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/utils": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.1.tgz",
+ "integrity": "sha512-VS/EHRyicef25zDZcM/ClpzYMC5i2YGN6uegOeQawmgfGjb02yaCX0F0zR69Pod9m2Hr3wunTbtpgVXvYbZItg==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-stately/virtualizer": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.7.1.tgz",
+ "integrity": "sha512-voHgE6EQ+oZaLv6u2umKxakvIKNkCQuUihqKACTjdslp7SJh4Mvs3oLBI0hf0JOh+rCcFIKDvQtFwy1fXFRYBA==",
+ "dependencies": {
+ "@react-aria/utils": "^3.24.1",
+ "@react-types/shared": "^3.23.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/accordion": {
+ "version": "3.0.0-alpha.19",
+ "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.19.tgz",
+ "integrity": "sha512-WJaitKz56zRKUwBqDM4OOKtmIdD0lr5nruWoM2IlGRO50WUzSFmAy/1aFiodAVZbun1v5IxbjST6/qSV4jPqug==",
+ "dependencies": {
+ "@react-types/shared": "^3.22.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/breadcrumbs": {
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.5.tgz",
+ "integrity": "sha512-lV9IDYsMiu2TgdMIjEmsOE0YWwjb3jhUNK1DCZZfq6uWuiHLgyx2EncazJBUWSjHJ4ta32j7xTuXch+8Ai6u/A==",
+ "dependencies": {
+ "@react-types/link": "^3.5.5",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/button": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.4.tgz",
+ "integrity": "sha512-raeQBJUxBp0axNF74TXB8/H50GY8Q3eV6cEKMbZFP1+Dzr09Ngv0tJBeW0ewAxAguNH5DRoMUAUGIXtSXskVdA==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/calendar": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.1.tgz",
+ "integrity": "sha512-tiCkHi6IQtYcVoAESG79eUBWDXoo8NImo+Mj8WAWpo1lOA3SV1W2PpeXkoRNqtloilQ0aYcmsaJJUhciQG4ndg==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.0",
+ "@react-types/shared": "^3.21.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/checkbox": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.1.tgz",
+ "integrity": "sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/combobox": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.11.1.tgz",
+ "integrity": "sha512-UNc3OHt5cUt5gCTHqhQIqhaWwKCpaNciD8R7eQazmHiA9fq8ROlV+7l3gdNgdhJbTf5Bu/V5ISnN7Y1xwL3zqQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/datepicker": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.7.4.tgz",
+ "integrity": "sha512-ZfvgscvNzBJpYyVWg3nstJtA/VlWLwErwSkd1ivZYam859N30w8yH+4qoYLa6FzWLCFlrsRHyvtxlEM7lUAt5A==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@react-types/calendar": "^3.4.6",
+ "@react-types/overlays": "^3.8.7",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/datepicker/node_modules/@react-types/calendar": {
+ "version": "3.4.6",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.4.6.tgz",
+ "integrity": "sha512-WSntZPwtvsIYWvBQRAPvuCn55UTJBZroTvX0vQvWykJRQnPAI20G1hMQ3dNsnAL+gLZUYxBXn66vphmjUuSYew==",
+ "dependencies": {
+ "@internationalized/date": "^3.5.4",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/dialog": {
+ "version": "3.5.10",
+ "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.10.tgz",
+ "integrity": "sha512-S9ga+edOLNLZw7/zVOnZdT5T40etpzUYBXEKdFPbxyPYnERvRxJAsC1/ASuBU9fQAXMRgLZzADWV+wJoGS/X9g==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.7",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/grid": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.6.tgz",
+ "integrity": "sha512-XfHenL2jEBUYrhKiPdeM24mbLRXUn79wVzzMhrNYh24nBwhsPPpxF+gjFddT3Cy8dt6tRInfT6pMEu9nsXwaHw==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/link": {
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.5.tgz",
+ "integrity": "sha512-G6P5WagHDR87npN7sEuC5IIgL1GsoY4WFWKO4734i2CXRYx24G9P0Su3AX4GA3qpspz8sK1AWkaCzBMmvnunfw==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/listbox": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.9.tgz",
+ "integrity": "sha512-S5G+WmNKUIOPZxZ4svWwWQupP3C6LmVfnf8QQmPDvwYXGzVc0WovkqUWyhhjJirFDswTXRCO9p0yaTHHIlkdwQ==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/menu": {
+ "version": "3.9.9",
+ "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.9.tgz",
+ "integrity": "sha512-FamUaPVs1Fxr4KOMI0YcR2rYZHoN7ypGtgiEiJ11v/tEPjPPGgeKDxii0McCrdOkjheatLN1yd2jmMwYj6hTDg==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.7",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/overlays": {
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.7.tgz",
+ "integrity": "sha512-zCOYvI4at2DkhVpviIClJ7bRrLXYhSg3Z3v9xymuPH3mkiuuP/dm8mUCtkyY4UhVeUTHmrQh1bzaOP00A+SSQA==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/progress": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.4.tgz",
+ "integrity": "sha512-JNc246sTjasPyx5Dp7/s0rp3Bz4qlu4LrZTulZlxWyb53WgBNL7axc26CCi+I20rWL9+c7JjhrRxnLl/1cLN5g==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/radio": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.1.tgz",
+ "integrity": "sha512-bK0gio/qj1+0Ldu/3k/s9BaOZvnnRgvFtL3u5ky479+aLG5qf1CmYed3SKz8ErZ70JkpuCSrSwSCFf0t1IHovw==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/select": {
+ "version": "3.9.4",
+ "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.4.tgz",
+ "integrity": "sha512-xI7dnOW2st91fPPcv6hdtrTdcfetYiqZuuVPZ5TRobY7Q10/Zqqe/KqtOw1zFKUj9xqNJe4Ov3xP5GSdcO60Eg==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/shared": {
+ "version": "3.23.1",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz",
+ "integrity": "sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/slider": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.3.tgz",
+ "integrity": "sha512-F8qFQaD2mqug2D0XeWMmjGBikiwbdERFlhFzdvNGbypPLz3AZICBKp1ZLPWdl0DMuy03G/jy6Gl4mDobl7RT2g==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/switch": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.3.tgz",
+ "integrity": "sha512-Nb6+J5MrPaFa8ZNFKGMzAsen/NNzl5UG/BbC65SLGPy7O0VDa/sUpn7dcu8V2xRpRwwIN/Oso4v63bt2sgdkgA==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/table": {
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.5.tgz",
+ "integrity": "sha512-fgM2j9F/UR4Anmd28CueghCgBwOZoCVyN8fjaIFPd2MN4gCwUUfANwxLav65gZk4BpwUXGoQdsW+X50L3555mg==",
+ "dependencies": {
+ "@react-types/grid": "^3.2.6",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/tabs": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.7.tgz",
+ "integrity": "sha512-ZdLe5xOcFX6+/ni45Dl2jO0jFATpTnoSqj6kLIS/BYv8oh0n817OjJkLf+DS3CLfNjApJWrHqAk34xNh6nRnEg==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/textfield": {
+ "version": "3.9.3",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.3.tgz",
+ "integrity": "sha512-DoAY6cYOL0pJhgNGI1Rosni7g72GAt4OVr2ltEx2S9ARmFZ0DBvdhA9lL2nywcnKMf27PEJcKMXzXc10qaHsJw==",
+ "dependencies": {
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
+ "node_modules/@react-types/tooltip": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.9.tgz",
+ "integrity": "sha512-wZ+uF1+Zc43qG+cOJzioBmLUNjRa7ApdcT0LI1VvaYvH5GdfjzUJOorLX9V/vAci0XMJ50UZ+qsh79aUlw2yqg==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.7",
+ "@react-types/shared": "^3.23.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
+ }
+ },
"node_modules/@remix-run/router": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz",
@@ -860,6 +3544,19 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
"dev": true
},
+ "node_modules/@types/lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ=="
+ },
+ "node_modules/@types/lodash.debounce": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz",
+ "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==",
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
"node_modules/@types/node": {
"version": "20.11.28",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz",
@@ -1155,7 +3852,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -1164,7 +3860,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -1175,6 +3870,28 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -1389,6 +4106,43 @@
"has-symbols": "^1.0.3"
}
},
+ "node_modules/autoprefixer": {
+ "version": "10.4.19",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
+ "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.23.0",
+ "caniuse-lite": "^1.0.30001599",
+ "fraction.js": "^4.3.7",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -1425,8 +4179,18 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/brace-expansion": {
"version": "1.1.11",
@@ -1442,7 +4206,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -1450,6 +4213,38 @@
"node": ">=8"
}
},
+ "node_modules/browserslist": {
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+ "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001587",
+ "electron-to-chromium": "^1.4.668",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
"node_modules/bufferutil": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz",
@@ -1501,10 +4296,18 @@
"node": ">=6"
}
},
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/caniuse-lite": {
- "version": "1.0.30001597",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
- "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==",
+ "version": "1.0.30001621",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
+ "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==",
"funding": [
{
"type": "opencollective",
@@ -1541,11 +4344,53 @@
"resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
"integrity": "sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g=="
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/client-only": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
},
+ "node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/color": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -1583,6 +4428,24 @@
"simple-swizzle": "^0.2.2"
}
},
+ "node_modules/color2k": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.3.tgz",
+ "integrity": "sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog=="
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/compute-scroll-into-view": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz",
+ "integrity": "sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg=="
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1593,7 +4456,6 @@
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -1603,6 +4465,17 @@
"node": ">= 8"
}
},
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -1696,6 +4569,16 @@
"node": ">=8"
}
},
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1708,6 +4591,11 @@
"node": ">=8"
}
},
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
"node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -1723,14 +4611,18 @@
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.779",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.779.tgz",
+ "integrity": "sha512-oaTiIcszNfySXVJzKcjxd2YjPxziAd+GmXyb2HbidCeFo6Z88ygOT7EimlrEQhM2U08VhSrbKhLOXP0kKUCZ6g==",
"dev": true
},
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
},
"node_modules/enhanced-resolve": {
"version": "5.16.0",
@@ -1893,6 +4785,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -2327,7 +5228,6 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -2343,7 +5243,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -2367,7 +5266,6 @@
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -2388,7 +5286,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2412,6 +5309,14 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
"node_modules/flat-cache": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
@@ -2445,7 +5350,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
"integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -2457,17 +5361,66 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/fraction.js": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "11.2.6",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.6.tgz",
+ "integrity": "sha512-XUrjjBt57e5YoHQtjwc3eNchFBuHvIgN/cS8SC4oIaAn2J/0+bLanUxXizidJKZVeHJam/JrmMnPRjYMglVn5g==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"dev": true
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2518,6 +5471,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/get-symbol-description": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
@@ -2551,7 +5512,6 @@
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
- "dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.5",
@@ -2573,7 +5533,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -2585,7 +5544,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -2594,7 +5552,6 @@
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -2751,7 +5708,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -2823,6 +5779,25 @@
"node": ">= 0.4"
}
},
+ "node_modules/intl-messageformat": {
+ "version": "10.5.14",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz",
+ "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.0.0",
+ "@formatjs/fast-memoize": "2.2.0",
+ "@formatjs/icu-messageformat-parser": "2.7.8",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
"node_modules/is-array-buffer": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
@@ -2871,6 +5846,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -2903,7 +5889,6 @@
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "dev": true,
"dependencies": {
"hasown": "^2.0.0"
},
@@ -2930,7 +5915,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2951,7 +5935,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -2975,7 +5958,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -3011,7 +5993,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -3177,8 +6158,7 @@
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"node_modules/iterator.prototype": {
"version": "1.1.2",
@@ -3197,7 +6177,6 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
"integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -3211,6 +6190,14 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
+ "node_modules/jiti": {
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3313,6 +6300,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
"node_modules/load-script": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
@@ -3333,12 +6333,42 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "node_modules/lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ },
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="
+ },
+ "node_modules/lodash.mapkeys": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mapkeys/-/lodash.mapkeys-4.6.0.tgz",
+ "integrity": "sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA=="
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "node_modules/lodash.omit": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
+ "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg=="
+ },
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -3354,7 +6384,6 @@
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
"integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
- "dev": true,
"engines": {
"node": "14 || >=16.14"
}
@@ -3384,7 +6413,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -3393,7 +6421,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -3427,7 +6454,6 @@
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
"integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -3438,6 +6464,16 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -3510,6 +6546,33 @@
}
}
},
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
"node_modules/node-gyp-build": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz",
@@ -3520,6 +6583,29 @@
"node-gyp-build-test": "build-test.js"
}
},
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -3528,6 +6614,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
@@ -3728,7 +6822,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -3736,14 +6829,12 @@
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-scurry": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dev": true,
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -3793,15 +6884,14 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -3809,6 +6899,22 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -3819,9 +6925,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"funding": [
{
"type": "opencollective",
@@ -3837,14 +6943,128 @@
}
],
"dependencies": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.7",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz",
+ "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
"node_modules/postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
@@ -3912,7 +7132,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -3984,6 +7203,51 @@
"react": ">=16.6.0"
}
},
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.10",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz",
+ "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.6",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-router": {
"version": "6.22.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz",
@@ -4014,6 +7278,63 @@
"react-dom": ">=16.8"
}
},
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-textarea-autosize": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
+ "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/reflect.getprototypeof": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz",
@@ -4038,8 +7359,7 @@
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "dev": true
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.2",
@@ -4063,7 +7383,6 @@
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -4098,7 +7417,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -4143,7 +7461,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -4205,6 +7522,14 @@
"loose-envify": "^1.1.0"
}
},
+ "node_modules/scroll-into-view-if-needed": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.0.10.tgz",
+ "integrity": "sha512-t44QCeDKAPf1mtQH3fYpWz8IM/DyvHLjs8wUvvwMYxk5moOqCzrMSxK6HQVD0QVmVjXFavoFIPRVrMuJPKAvtg==",
+ "dependencies": {
+ "compute-scroll-into-view": "^3.0.2"
+ }
+ },
"node_modules/semver": {
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
@@ -4310,7 +7635,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -4322,7 +7646,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -4349,7 +7672,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
"engines": {
"node": ">=14"
},
@@ -4375,9 +7697,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
@@ -4394,7 +7716,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -4412,7 +7733,6 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4425,14 +7745,12 @@
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/string-width/node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -4444,7 +7762,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -4524,7 +7841,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4537,7 +7853,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4588,6 +7903,27 @@
}
}
},
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -4604,7 +7940,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -4630,6 +7965,71 @@
"node": ">= 4.7.0"
}
},
+ "node_modules/tailwind-merge": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz",
+ "integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.24.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwind-variants": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.2.1.tgz",
+ "integrity": "sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==",
+ "peer": true,
+ "dependencies": {
+ "tailwind-merge": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=16.x",
+ "pnpm": ">=7.x"
+ },
+ "peerDependencies": {
+ "tailwindcss": "*"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz",
+ "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.0",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -4645,11 +8045,29 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4669,6 +8087,11 @@
"typescript": ">=4.2.0"
}
},
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
"node_modules/tsconfig-paths": {
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -4817,6 +8240,36 @@
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -4826,6 +8279,84 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "dependencies": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/utf-8-validate": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz",
@@ -4838,11 +8369,15 @@
"node": ">=6.14.2"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -4936,7 +8471,6 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -4954,7 +8488,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -4970,14 +8503,12 @@
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4991,7 +8522,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -5003,7 +8533,6 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -5015,7 +8544,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -5065,6 +8593,17 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
+ "node_modules/yaml": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz",
+ "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index d704fcc..222486f 100644
--- a/package.json
+++ b/package.json
@@ -9,13 +9,16 @@
"lint": "next lint"
},
"dependencies": {
+ "@nextui-org/react": "^2.3.6",
"@vercel/analytics": "^1.2.2",
"@vercel/postgres": "^0.7.2",
"@vercel/speed-insights": "^1.0.10",
"@vidstack/react": "^1.10.9",
"child_process": "^1.0.2",
+ "framer-motion": "^11.2.6",
"media-icons": "^1.1.2",
"next": "^14.2.2",
+ "next-themes": "^0.3.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-icons": "^5.0.1",
@@ -27,7 +30,10 @@
"devDependencies": {
"@types/node": "20.11.28",
"@types/react": "18.2.66",
+ "autoprefixer": "^10.4.19",
"eslint": "^8",
- "eslint-config-next": "^14.1.4"
+ "eslint-config-next": "^14.1.4",
+ "postcss": "^8.4.38",
+ "tailwindcss": "^3.4.3"
}
}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..33ad091
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/src/app/anime/[id]/page.jsx b/src/app/anime/[id]/page.jsx
index d338417..f8cbe0c 100644
--- a/src/app/anime/[id]/page.jsx
+++ b/src/app/anime/[id]/page.jsx
@@ -1,80 +1,49 @@
-import Image from "next/image";
+import { Chip, Image } from "@nextui-org/react";
import { anime_info } from "../data-fetch/request";
-import styles from "../styles/info.module.css";
-import EpisodesButtons from "../components/episode_buttons";
+import DescriptionTabs from "../components/infoTabs";
-import { preFetchVideoLinks } from "../components/cacher";
+import EpisodesContainer from "../components/vidButtonContainer";
const AnimeInfoHomepage = async ({ params }) => {
const id = params.id;
const data = await anime_info(id);
- const sliceLength = Math.min(data.episodes.length, 49);
- preFetchVideoLinks(data.episodes.slice(0, sliceLength));
-
return (
- <main className={styles.main}>
- <div>
- {data && (
- <section className={styles.AnimeInfo}>
- <div className={styles.AnimeHeroSection}>
- <Image
- src={data.image}
- width={180}
- height={280}
- alt="Anime Poster"
- priority
- />
- <div>
- <p className={styles.animeTitle} style={{color: "white"}}>
- {data.title || "Not Found"}
- </p>
- <p className={styles.animeDescription}>
- <strong>Description: </strong>
- {data.description || "Not Found"}
- </p>
- <hr style={{ borderColor: "gray" }} />
- <span>
- <strong style={{ marginRight: 5 }}>
- Genres:
- </strong>
- {data.genres &&
- data.genres.map((item, index) => (
- <span
- key={index}
- style={{ color: "#a3a3a3" }}
- >
- {item}
- {index !==
- data.genres.length - 1 &&
- ", "}
- </span>
- ))}
- </span>
- <p>
- <strong>Episodes:</strong>{" "}
- {data.totalEpisodes || "Not Found"}
- </p>
- <p>
- <strong>Release year:</strong>{" "}
- {data.releaseDate || "Not Found"}
- </p>
- <p>
- <strong>Status:</strong>{" "}
- {data.status || "Not Found"}
- </p>
- <p>
- <strong>Type:</strong>{" "}
- {data.type || "Not Found"}
- </p>
- </div>
- </div>
- </section>
- )}
+ <section className="pt-12 lg:w-9/12 m-auto">
+ <div className="flex items-center justify-center lg:justify-start md:justify-start">
+ <Image
+ isBlurred
+ width={190}
+ src={data.image.toString()}
+ alt="Anime Title Poster"
+ className="m-2"
+ />
+ <div className="mx-5">
+ <h4 className={`text-2xl`}>
+ <strong>{data.title}</strong>
+ </h4>
+ <div>
+ {data.genres &&
+ data.genres.map((item, index) => (
+ <Chip
+ key={index}
+ color="warning"
+ variant="faded"
+ className="mr-1 mb-1"
+ >
+ <p className="text-xs">{item}</p>
+ </Chip>
+ ))}
+ </div>
+ </div>
</div>
- <EpisodesButtons data={data} />
- </main>
+ <DescriptionTabs data={data} />
+ <EpisodesContainer data={data} />
+ <br />
+ <br />
+ <br />
+ </section>
);
};
diff --git a/src/app/anime/components/cacher.js b/src/app/anime/components/cacher.js
index d3008fa..164dafd 100644
--- a/src/app/anime/components/cacher.js
+++ b/src/app/anime/components/cacher.js
@@ -1,11 +1,11 @@
"use server";
-import { info_url, watch_url } from "../../../../utils/anime_urls";
+import { anime_info } from "../data-fetch/request";
export async function preFetchAnimeInfo(data) {
try {
const fetchPromises = data.results.map(async (element) => {
- await fetch(info_url(element.id), { next: { revalidate: 21600 } });
+ await anime_info(element.id);
});
await Promise.all(fetchPromises);
diff --git a/src/app/anime/components/episode_buttons.jsx b/src/app/anime/components/episode_buttons.jsx
index 013dee1..71f338f 100644
--- a/src/app/anime/components/episode_buttons.jsx
+++ b/src/app/anime/components/episode_buttons.jsx
@@ -202,4 +202,4 @@ function store_to_local(name, image, episode, id) {
}
}
-export default EpisodesButtons; \ No newline at end of file
+export default EpisodesButtons;
diff --git a/src/app/anime/components/infoTabs.jsx b/src/app/anime/components/infoTabs.jsx
new file mode 100644
index 0000000..68a1da1
--- /dev/null
+++ b/src/app/anime/components/infoTabs.jsx
@@ -0,0 +1,46 @@
+"use client";
+
+import { Tabs, Tab, Card, CardBody } from "@nextui-org/react";
+
+import { lexend, atkinson } from "../../../../config/fonts";
+
+export default function DescriptionTabs({ data: data }) {
+ return (
+ <div className="flex w-full flex-col">
+ <Tabs aria-label="Options" className={lexend.className}>
+ <Tab key="description" title="Description">
+ <Card>
+ <CardBody className={atkinson.className}>
+ {data.description || "No description found"}
+ </CardBody>
+ </Card>
+ </Tab>
+ <Tab key="episodes" title="Details">
+ <Card>
+ <CardBody className={atkinson.className}>
+ <h4>
+ <strong>Episodes</strong>:{" "}
+ <span>{data.totalEpisodes}</span>
+ </h4>
+ <h4>
+ <strong>Type</strong>: <span>{data.type}</span>
+ </h4>
+ <h4>
+ <strong>SUB/DUB</strong>:{" "}
+ <span>{data.subOrDub.toUpperCase()}</span>
+ </h4>
+ <h4>
+ <strong>Status</strong>:{" "}
+ <span>{data.status}</span>
+ </h4>
+ <h4>
+ <strong>Release Year</strong>:{" "}
+ <span>{data.releaseDate}</span>
+ </h4>
+ </CardBody>
+ </Card>
+ </Tab>
+ </Tabs>
+ </div>
+ );
+}
diff --git a/src/app/anime/components/popularAnimes.jsx b/src/app/anime/components/popularAnimes.jsx
deleted file mode 100644
index e62f70f..0000000
--- a/src/app/anime/components/popularAnimes.jsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import Link from "next/link";
-import Image from "next/image";
-import { Lexend_Deca } from "next/font/google";
-
-import styles from "../styles/pop_recent_top.module.css";
-import { popular } from "../data-fetch/request";
-import { preFetchAnimeInfo } from "./cacher";
-
-const lexend = Lexend_Deca({ subsets: ["latin"], weight: "400" });
-
-const PopularAnimes = async () => {
- const data = await popular();
-
- preFetchAnimeInfo(data);
-
- return (
- <main className={styles.Main}>
- <section>
- <h2 className={styles.AnimeHeaderText}>Popular Animes</h2>
- <div className={styles.AnimeContainer}>
- {data &&
- data.results.map((item, index) => (
- <Link
- key={index}
- href={`/anime/${item.id}`}
- shallow
- style={{
- color: "white",
- textDecoration: "none",
- }}
- className={lexend.className}
- title={item.title}
- >
- <section className={styles.AnimeEntry}>
- <Image
- src={item.image}
- width={180}
- height={300}
- alt="Anime Poster Image"
- />
- <p className={styles.AnimeTitle}>
- {item.title}
- </p>
- </section>
- </Link>
- ))}
- </div>
- </section>
- </main>
- );
-};
-
-export default PopularAnimes;
diff --git a/src/app/anime/components/recentEpisodes.jsx b/src/app/anime/components/recentEpisodes.jsx
deleted file mode 100644
index 9e7899f..0000000
--- a/src/app/anime/components/recentEpisodes.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import Link from "next/link";
-import Image from "next/image";
-import { Lexend_Deca } from "next/font/google";
-
-import styles from "../styles/pop_recent_top.module.css";
-import { recent } from "../data-fetch/request";
-import { preFetchAnimeInfo } from "./cacher";
-
-const lexend = Lexend_Deca({ subsets: ["latin"], weight: "400" });
-
-const RecentAnimes = async () => {
- const data = await recent();
-
- preFetchAnimeInfo(data);
-
- return (
- <main className={styles.Main}>
- <section>
- <h2 className={styles.AnimeHeaderText}>Recent Releases</h2>
- <div className={styles.AnimeContainer}>
- {data &&
- data.results.map((item, index) => (
- <Link
- key={index}
- href={`/anime/${item.id}`}
- shallow
- style={{
- color: "white",
- textDecoration: "none",
- }}
- className={lexend.className}
- title={item.title}
- >
- <section className={styles.AnimeEntry}>
- <Image
- src={item.image}
- width={180}
- height={300}
- alt="Anime Poster Image"
- />
- <p className={styles.AnimeTitle}>
- {item.title}
- </p>
- <p className={styles.AnimeReleasedEpisode}>{item.episodeNumber}</p>
- </section>
- </Link>
- ))}
- </div>
- </section>
- </main>
- );
-};
-
-export default RecentAnimes;
diff --git a/src/app/anime/components/saveToLocalStorage.js b/src/app/anime/components/saveToLocalStorage.js
new file mode 100644
index 0000000..313b157
--- /dev/null
+++ b/src/app/anime/components/saveToLocalStorage.js
@@ -0,0 +1,29 @@
+"use client";
+
+import { storeLocal } from "./storeHistory";
+
+export default function store_to_local(name, image, episode, id) {
+ const currentDate = new Date();
+
+ try {
+ let newData = {
+ name: name,
+ image: image,
+ episode: episode,
+ id: id,
+ type: "anime",
+ date: `${currentDate.getDate()}-${String(
+ currentDate.getMonth() + 1
+ ).padStart(2, "0")}`,
+ time: `${currentDate.getHours()}:${String(
+ currentDate.getMinutes()
+ ).padStart(2, "0")}`,
+ };
+ storeLocal(newData);
+ } catch (error) {
+ console.error(
+ "Some error occurred during the process of saving your watch history to local storage. Please try again or contact us on GitHub if this issue persists.",
+ error.message
+ );
+ }
+}
diff --git a/src/app/anime/components/search.jsx b/src/app/anime/components/search.jsx
index 0a780f8..0fe883b 100644
--- a/src/app/anime/components/search.jsx
+++ b/src/app/anime/components/search.jsx
@@ -2,37 +2,37 @@
import { FaSearch } from "react-icons/fa";
import { useState } from "react";
-import Link from "next/link";
+import { Input, Link, Button, Progress } from "@nextui-org/react";
-import styles from "../styles/search.module.css";
import SearchResults from "./search_results";
-const SearcBar = () => {
+const SearchBar = () => {
const [title, setTitle] = useState("");
const [searchResults, setSearchResults] = useState(null);
const [loading, setLoading] = useState(false);
const handleSearchInput = async (title) => {
setSearchResults(null);
- setLoading(true);
+ setLoading(
+ <Progress
+ size="sm"
+ isIndeterminate
+ aria-label="Loading..."
+ className="w-full mt-2 lg:w-1/2"
+ />
+ );
setSearchResults(await SearchResults(title));
setLoading(false);
};
return (
<main>
- <section className={styles.SearchBarContainer}>
- <div className={styles.SearchInputContainer}>
- <FaSearch color="white" size={22} />
- <input
- placeholder="Enter anime title"
- name="Anime Title"
+ <section>
+ <div className="flex w-full md:flex-nowrap gap-2 lg:w-1/2">
+ <Input
type="text"
- onChange={(event) => {
- if (event.target.value.trim() != "") {
- setTitle(event.target.value);
- }
- }}
+ label="Search for anime"
+ placeholder="Enter anime title here"
autoComplete="off"
onKeyDown={async (event) => {
if (
@@ -43,22 +43,23 @@ const SearcBar = () => {
await handleSearchInput(title);
}
}}
- ></input>
- <Link shallow href={"/anime/continueWatching"}>
- <button className={styles.animeHistoryButton}>
- History
- </button>
+ onChange={(event) => {
+ if (event.target.value.trim() != "") {
+ setTitle(event.target.value);
+ }
+ }}
+ startContent={<FaSearch />}
+ />
+
+ <Link href={"/anime/continueWatching"}>
+ <Button color="primary">History</Button>
</Link>
</div>
+ {loading}
</section>
- {loading && (
- <p className={styles.SearchLoading}>
- Please wait while we crunch up all the data.....
- </p>
- )}
- {searchResults}
+ <div className="mt-2">{searchResults}</div>
</main>
);
};
-export default SearcBar;
+export default SearchBar;
diff --git a/src/app/anime/components/search_results.jsx b/src/app/anime/components/search_results.jsx
index 051124d..3097a96 100644
--- a/src/app/anime/components/search_results.jsx
+++ b/src/app/anime/components/search_results.jsx
@@ -1,12 +1,9 @@
-import { Lexend_Deca } from "next/font/google";
-import Link from "next/link";
-import Image from "next/image";
-
-import styles from "../styles/search.module.css";
import { search_results } from "../data-fetch/request";
import { preFetchAnimeInfo } from "./cacher";
+import styles from "../../page.module.css";
-const lexend = Lexend_Deca({ subsets: ["latin"], weight: "400" });
+import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
+import NextImage from "next/image";
const SearchResults = async (title) => {
const data = await search_results(title);
@@ -14,25 +11,39 @@ const SearchResults = async (title) => {
preFetchAnimeInfo(data);
return (
- <section className={styles.SearchResultsContainer}>
+ <section
+ className={`flex items-center overflow-auto pb-2 ${styles.ScrollBarAdjuster}`}
+ >
{data &&
data.results.map((item, index) => (
<Link
- shallow
- href={`/anime/${item.id}`}
key={index}
- className={lexend.className}
- style={{ color: "white", textDecoration: "none" }}
+ href={`/anime/${item.id}`}
+ aria-label="anime redirection links"
+ className="flex flex-col items-center mx-1 "
>
- <div className={styles.AnimeEntry}>
- <Image
- src={item.image}
- width={180}
- height={300}
- alt="Anime Poster"
- />
- <p>{item.title}</p>
- </div>
+ <Card className="overflow-hidden" isPressable>
+ <CardBody>
+ <Image
+ as={NextImage}
+ isBlurred
+ alt="Anime Poster"
+ src={item.image}
+ width={190}
+ height={120}
+ shadow="lg"
+ className="h-64"
+ priority
+ />
+ </CardBody>
+ <CardHeader>
+ <h4
+ className={`antialiased text-small text-center uppercase w-44 overflow-hidden whitespace-nowrap text-ellipsis `}
+ >
+ {item.title}
+ </h4>
+ </CardHeader>
+ </Card>
</Link>
))}
</section>
diff --git a/src/app/anime/components/topAiring.jsx b/src/app/anime/components/topAiring.jsx
deleted file mode 100644
index 22e8c3b..0000000
--- a/src/app/anime/components/topAiring.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import Link from "next/link";
-import Image from "next/image";
-import { Lexend_Deca } from "next/font/google";
-
-import styles from "../styles/pop_recent_top.module.css";
-import { top_airing } from "../data-fetch/request";
-import { preFetchAnimeInfo } from "./cacher";
-
-const lexend = Lexend_Deca({ subsets: ["latin"], weight: "400" });
-
-const TopAiringAnimes = async () => {
- const data = await top_airing();
-
- preFetchAnimeInfo(data);
-
- return (
- <main className={styles.Main}>
- <section>
- <h2 className={styles.AnimeHeaderText}>Top Airing Animes</h2>
- <div className={styles.AnimeContainer}>
- {data &&
- data.results.map((item, index) => (
- <Link
- key={index}
- href={`/anime/${item.id}`}
- shallow
- style={{
- color: "white",
- textDecoration: "none",
- }}
- className={lexend.className}
- title={item.title}
- >
- <section className={styles.AnimeEntry}>
- <Image
- src={item.image}
- width={180}
- height={300}
- alt="Anime Poster Image"
- />
- <p className={styles.AnimeTitle}>
- {item.title}
- </p>
- <p className={styles.AnimeReleasedEpisode}>
- {item.episodeNumber}
- </p>
- </section>
- </Link>
- ))}
- </div>
- </section>
- </main>
- );
-};
-
-export default TopAiringAnimes;
diff --git a/src/app/anime/components/vidButtonContainer.jsx b/src/app/anime/components/vidButtonContainer.jsx
new file mode 100644
index 0000000..6b872d8
--- /dev/null
+++ b/src/app/anime/components/vidButtonContainer.jsx
@@ -0,0 +1,133 @@
+"use client";
+
+import { MediaPlayer, MediaProvider } from "@vidstack/react";
+import "@vidstack/react/player/styles/default/theme.css";
+import "@vidstack/react/player/styles/default/layouts/video.css";
+import {
+ defaultLayoutIcons,
+ DefaultVideoLayout,
+} from "@vidstack/react/player/layouts/default";
+import { Select, SelectItem, Button, Skeleton } from "@nextui-org/react";
+import { useState, useEffect } from "react";
+
+import { lexend } from "../../../../config/fonts";
+import { video_url } from "../data-fetch/request";
+import store_to_local from "./saveToLocalStorage";
+
+const EpisodesContainer = ({ data: data }) => {
+ const [videoLink, setVideoLink] = useState("");
+ const [buttonGroups, setButtonGroups] = useState(<></>);
+ const [videoLoading, setVideoLoading] = useState(<></>);
+
+ useEffect(() => {
+ setButtonGroups(createButtonGroups(0, 50));
+ }, []);
+
+ const groups = createGroups(data.episodes, 50);
+
+ function createButtonGroups(start, end) {
+ setButtonGroups(<></>);
+ return (
+ <div className={`${lexend.className} text-center`}>
+ {data.episodes &&
+ data.episodes.slice(start, end).map((item, index) => (
+ <Button
+ radius="sm"
+ color="default"
+ key={index}
+ className="mr-2 mt-2"
+ size="sm"
+ onClick={async () => {
+ await changeVideoLink(item.id);
+ store_to_local(
+ data.title,
+ data.image,
+ item.number,
+ data.id
+ );
+ }}
+ >
+ {item.number}
+ </Button>
+ ))}
+ </div>
+ );
+ }
+
+ function handleSelectChange(item) {
+ // console.log(item[item.length - 1].number);
+ const start_index = item[0].number;
+ const end_index = item[item.length - 1].number;
+ setButtonGroups(createButtonGroups(start_index - 1, end_index));
+ }
+
+ async function changeVideoLink(id) {
+ setVideoLink("");
+ setVideoLoading(
+ <div className="w-full flex items-center gap-3">
+ <div className="w-full flex flex-col gap-2">
+ <Skeleton className="h-44 rounded-lg lg:h-96" />
+ </div>
+ </div>
+ );
+ const videoURL = await video_url(id);
+ setVideoLoading(<></>);
+ setVideoLink(videoURL.sources[videoURL.sources.length - 2].url);
+ }
+
+ return (
+ <main>
+ {videoLoading}
+ {videoLink && (
+ <div>
+ <MediaPlayer
+ title={data.title}
+ src={videoLink}
+ aspectRatio="16/9"
+ load="eager"
+ playsInline
+ volume={0.8}
+ autoPlay
+ >
+ <MediaProvider />
+ <DefaultVideoLayout icons={defaultLayoutIcons} />
+ </MediaPlayer>
+ </div>
+ )}
+ {data.episodes && (
+ <div className="flex w-full flex-wrap md:flex-nowrap gap-4 my-2">
+ <Select
+ label="Select Episode Group"
+ className={`${lexend.className} max-w-xs`}
+ >
+ {groups &&
+ groups.map((item, index) => (
+ <SelectItem
+ key={index}
+ textValue={`${item[0].number} - ${
+ item[item.length - 1].number
+ }`}
+ onClick={() => handleSelectChange(item)}
+ className={lexend.className}
+ >
+ {item[0].number} -{" "}
+ {item[item.length - 1].number}
+ </SelectItem>
+ ))}
+ </Select>
+ </div>
+ )}
+ {buttonGroups}
+ </main>
+ );
+};
+
+function createGroups(array, size) {
+ const groups = [];
+ for (let i = 0; i < array.length; i += size) {
+ groups.push(array.slice(i, i + size));
+ }
+ return groups;
+}
+
+export default EpisodesContainer;
diff --git a/src/app/anime/continueWatching/page.jsx b/src/app/anime/continueWatching/page.jsx
index eb28a2f..69d06de 100644
--- a/src/app/anime/continueWatching/page.jsx
+++ b/src/app/anime/continueWatching/page.jsx
@@ -2,7 +2,6 @@
import React, { useState, useEffect } from "react";
import Image from "next/image";
-import styles from "../styles/cw.module.css";
import Link from "next/link";
const ContinueWatching = () => {
diff --git a/src/app/anime/loading.jsx b/src/app/anime/loading.jsx
deleted file mode 100644
index 00ce39c..0000000
--- a/src/app/anime/loading.jsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import styles from "./styles/loading.module.css";
-
-const Loading = async () => {
- return (
- <main className={styles.LoadingContainer}>
- <strong>Loading...</strong>
- </main>
- );
-};
-
-export default Loading;
diff --git a/src/app/anime/page.jsx b/src/app/anime/page.jsx
index 7143740..a2d5777 100644
--- a/src/app/anime/page.jsx
+++ b/src/app/anime/page.jsx
@@ -1,18 +1,101 @@
-import styles from "./styles/anime.module.css";
-import PopularAnimes from "./components/popularAnimes";
-import RecentAnimes from "./components/recentEpisodes";
-import TopAiringAnimes from "./components/topAiring";
-import SearcBar from "./components/search";
+import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
+import NextImage from "next/image";
+import styles from "../page.module.css";
+
+import { top_airing, recent, popular } from "./data-fetch/request";
+import SearchBar from "./components/search";
+import { preFetchAnimeInfo } from "./components/cacher";
+
const AnimeHomepage = async () => {
+ const popular_data = await popular();
+ const recent_data = await recent();
+ const airing_data = await top_airing();
+
+ const dataToBeLoaded = [popular_data, recent_data, airing_data];
+
+ for (let item of dataToBeLoaded) {
+ preFetchAnimeInfo(item);
+ }
+
+ const header = (title) => (
+ <>
+ <p className={`antialiased font-bold text-sky-400 text-2xl my-1`}>
+ {title}
+ </p>
+ </>
+ );
+
+ const format = (data) => (
+ <>
+ {data &&
+ data.results.map((item, index) => (
+ <Link
+ key={index}
+ href={`/anime/${item.id}`}
+ aria-label="anime redirection links"
+ className="flex flex-col items-center mx-1 "
+ >
+ <Card className="overflow-visible " isPressable>
+ <CardBody>
+ <Image
+ as={NextImage}
+ isBlurred
+ alt="Anime Poster"
+ src={item.image}
+ width={270}
+ height={160}
+ className="h-60 overflow-hidden"
+ shadow="lg"
+ priority
+ />
+ </CardBody>
+ <CardHeader>
+ <h4
+ className={`antialiased text-small text-center uppercase w-44 overflow-hidden whitespace-nowrap text-ellipsis `}
+ >
+ {item.title}
+ </h4>
+ </CardHeader>
+ </Card>
+ </Link>
+ ))}
+ </>
+ );
+
return (
- <main className={styles.Main}>
- <SearcBar />
- <TopAiringAnimes />
+ <section className="pt-12">
+ <div className="mx-2">
+ <SearchBar />
+ </div>
+
+ <div className="mx-2">
+ {header("Popular Animes")}
+ <div
+ className={`flex overflow-auto overflow-y-hidden pb-3 ${styles.ScrollBarAdjuster}`}
+ >
+ {format(popular_data)}
+ </div>
+ </div>
+
+ <div className="mx-2">
+ {header("Recent Animes")}
+ <div
+ className={`flex overflow-auto overflow-y-hidden pb-3 ${styles.ScrollBarAdjuster}`}
+ >
+ {format(recent_data)}
+ </div>
+ </div>
+ <div className="mx-2">
+ {header("Top Airing Animes")}
+ <div
+ className={`flex overflow-x-auto overflow-y-hidden pb-3 ${styles.ScrollBarAdjuster}`}
+ >
+ {format(airing_data)}
+ </div>
+ </div>
<br />
- <RecentAnimes />
<br />
- <PopularAnimes />
- </main>
+ </section>
);
};
diff --git a/src/app/anime/styles/anime.module.css b/src/app/anime/styles/anime.module.css
deleted file mode 100644
index e5d402a..0000000
--- a/src/app/anime/styles/anime.module.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.Main {
- max-width: 99%;
- margin: 65px auto;
-} \ No newline at end of file
diff --git a/src/app/anime/styles/buttons.module.css b/src/app/anime/styles/buttons.module.css
deleted file mode 100644
index d0b8e78..0000000
--- a/src/app/anime/styles/buttons.module.css
+++ /dev/null
@@ -1,98 +0,0 @@
-.animeButtonContainer {
- margin-top: 1rem;
-}
-
-.dramaButton {
- background-color: #1f1f1fd2;
- outline: none;
- border: none;
- color: white;
- font-family: "Atkinson Hyperlegible", serif;
- width: 50px;
- padding: 0.5rem;
- margin: 0 0.2rem 0.2rem 0;
- border-radius: 0.5rem;
- cursor: pointer;
- transition: background-color 200ms ease, scale 200ms ease;
-}
-
-.dramaButton:hover {
- background-color: #121212;
- scale: 0.95;
-}
-
-.dramaButton:focus {
- background-color: var(--soft-purple);
- scale: 0.95;
-}
-
-.Main {
- display: flex;
- align-items: center;
- flex-direction: column;
- text-align: center;
-}
-
-.SelectClass {
- text-align: center;
- outline: none;
- border: none;
- padding: 0.4rem;
- font-family: "Lexend Deca", serif;
- background-color: #1f1f1fd2;
- color: white;
- border-radius: 0.5rem;
-}
-
-.SelectClass::-webkit-scrollbar {
- width: 0;
-}
-
-/* Video Player */
-
-.videoPopUp {
- height: 100dvh;
- width: 100dvw;
- background-color: #141414ee;
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- z-index: 1;
- overflow-y: auto;
-}
-
-.closeButton {
- font-family: "Lexend Deca", serif;
- font-size: 16px;
- background-color: var(--pastel-red);
- padding: 0.5rem 1.5rem;
- border: 0;
- outline: 0;
- border-radius: 0.5rem;
- cursor: pointer;
- margin: 5px;
-}
-
-.video {
- width: 60vw;
-}
-
-.VideoPlayer {
- width: 100%;
-}
-
-@media screen and (max-width: 1024px) {
-
- .dramaButton {
- font-size: 14px;
- }
-
- .video {
- width: 100%;
- }
-} \ No newline at end of file
diff --git a/src/app/anime/styles/cw.module.css b/src/app/anime/styles/cw.module.css
deleted file mode 100644
index cb579c7..0000000
--- a/src/app/anime/styles/cw.module.css
+++ /dev/null
@@ -1,59 +0,0 @@
-.main {
- width: 99%;
- margin: 60px auto;
-}
-
-.mainText {
- color: white;
- font-size: 24px;
- margin: 0.2rem 0 0.2rem 0;
-}
-
-.animeContainer {
- font-size: 18px;
- margin: 0px;
-}
-
-.animeEntry {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 5px;
- margin-bottom: 0.5rem;
- border-radius: 0.4rem;
- background-color: #1f1f1f;
-}
-
-.animeEntry img {
- border-radius: 0.4rem;
- margin-left: 0.2rem;
-}
-
-.titleContainer {
- color: white;
- margin-left: 0.2rem;
-}
-
-.titleContainer h3 {
- margin: 0px;
-}
-
-.EpisodeCount {
- color: var(--soft-purple);
- margin: 0px;
-}
-
-.date {
- color: var(--neon-yellow);
- margin: 0px;
-}
-
-@media screen and (max-width: 768px) {
- .animeContainer {
- font-size: 14px;
- }
-
- .animeEntry img {
- width: 35%;
- }
-} \ No newline at end of file
diff --git a/src/app/anime/styles/info.module.css b/src/app/anime/styles/info.module.css
deleted file mode 100644
index afdc08f..0000000
--- a/src/app/anime/styles/info.module.css
+++ /dev/null
@@ -1,69 +0,0 @@
-.main {
- width: 50%;
- margin: 60px auto;
- color: white;
-}
-
-.AnimeHeroSection {
- display: flex;
- align-items: center;
-}
-
-.AnimeHeroSection strong {
- color: #38bdf8;
-}
-
-.AnimeHeroSection img {
- /* width: auto;
- height: auto; */
- padding: 0.5rem 0.7rem 0.5rem 0.7rem;
-}
-
-.animeDescription {
- max-height: 100px;
- overflow: auto;
-}
-
-.animeDescription::-webkit-scrollbar {
- width: 0px;
-}
-
-.AnimeHeroSection p {
- margin: 0;
- color: #a3a3a3;
-}
-
-.animeTitle {
- font-size: 26px;
- text-transform: uppercase;
-}
-
-@media screen and (max-width: 1024px) {
- .main {
- width: 100%;
- }
-
- .AnimeHeroSection {
- font-size: 14px;
- }
-
- .animeTitle {
- font-size: 24px;
- }
-
- .AnimeHeroSection img {
- padding: 0.4rem 0.4rem 0.4rem 0.4rem;
- }
-}
-
-@media screen and (max-width: 425px) {
- .AnimeHeroSection {
- display: flex;
- align-items: center;
- flex-direction: column;
- }
-
- .animeTitle {
- text-align: center;
- }
-} \ No newline at end of file
diff --git a/src/app/anime/styles/loading.module.css b/src/app/anime/styles/loading.module.css
deleted file mode 100644
index f0d0606..0000000
--- a/src/app/anime/styles/loading.module.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.LoadingContainer {
- height: 100vh;
- width: 100vw;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.LoadingContainer strong {
- color: white;
- font-size: 20px;
-} \ No newline at end of file
diff --git a/src/app/anime/styles/pop_recent_top.module.css b/src/app/anime/styles/pop_recent_top.module.css
deleted file mode 100644
index 253f60f..0000000
--- a/src/app/anime/styles/pop_recent_top.module.css
+++ /dev/null
@@ -1,95 +0,0 @@
-.AnimeHeaderText {
- color: white;
- margin: 0.4rem 0 0 0;
- text-transform: uppercase;
- font-size: 30px;
-}
-
-.AnimeContainer {
- margin: 0.2rem 0 0 0;
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
- grid-gap: 0.5rem;
-}
-
-/* .AnimeEntry {
- display: flex;
- align-items: center;
- justify-content: center;
- flex-direction: column;
- text-align: center;
- padding: 0.8rem;
- border-radius: 0.4rem;
- background-color: #1a1a1a;
- transition: opacity 200ms ease;
-} */
-
-.AnimeEntry {
- position: relative;
- display: inline-block;
- overflow: hidden;
- border-radius: 0.5rem;
- transition: opacity 200ms ease;
-
-}
-
-.AnimeContainer:hover .AnimeEntry {
- opacity: 0.5;
-}
-
-.AnimeContainer:hover .AnimeEntry:hover {
- opacity: 1;
-}
-
-.AnimeEntry img {
- display: block;
- transition: transform 200ms ease;
-}
-
-.AnimeEntry img:hover {
- transform: translateY(-5px) scale(1.04);
-}
-
-
-.AnimeTitle {
- position: absolute;
- bottom: 0;
- /* Adjust the value as needed */
- left: 50%;
- transform: translateX(-50%);
- margin: 0;
- color: white;
- padding: 5px;
- text-align: center;
- background-color: #121212ab;
- backdrop-filter: blur(10px);
- text-transform: uppercase;
- width: 100%;
- max-width: 170px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.AnimeReleasedEpisode {
- position: absolute;
- top: 0;
- margin: 0.2rem;
- padding: 0.5rem;
- background-color: #121212b2;
- border-radius: 0.4rem;
- backdrop-filter: blur(10px);
-}
-
-.AnimeContainer::-webkit-scrollbar {
- height: 0rem;
-}
-
-
-@media screen and (max-width: 768px) {
- .AnimeContainer {
- display: flex;
- overflow: auto;
- align-items: center;
- }
-} \ No newline at end of file
diff --git a/src/app/anime/styles/search.module.css b/src/app/anime/styles/search.module.css
deleted file mode 100644
index abed86c..0000000
--- a/src/app/anime/styles/search.module.css
+++ /dev/null
@@ -1,116 +0,0 @@
-.SearchBarContainer {
- padding: 1rem 0 0.8rem 0;
- display: flex;
- align-items: center;
- width: 100%;
-}
-
-.SearchInputContainer {
- display: flex;
- align-items: center;
- background-color: #1f1f1f;
- padding: 0.4rem;
- border-radius: 0.5rem;
- width: 40%;
-}
-
-.animeHistoryButton {
- font-family: "Lexend Deca", serif;
- outline: none;
- border: none;
- background-color: #121212;
- color: white;
- margin: 0 0.1rem 0 0.2rem;
- padding: 0.6rem;
- cursor: pointer;
- border-radius: 0.5rem;
-}
-
-.SearchInputContainer input {
- background-color: transparent;
- border: none;
- outline: none;
- color: white;
- margin-left: 0.5rem;
- font-size: 20px;
- font-family: "Atkinson Hyperlegible", serif;
- width: 100%;
-}
-
-.SearchLoading {
- color: white;
- text-align: center;
-}
-
-/* Search Results */
-
-.SearchResultsContainer {
- display: flex;
- align-items: center;
- overflow-x: auto;
- padding-bottom: 0.5rem;
-}
-
-.AnimeEntry {
- position: relative;
- display: inline-block;
- overflow: hidden;
- border-radius: 0.5rem;
- transition: opacity 200ms ease;
- margin: 0.4rem;
-}
-
-.SearchResultsContainer:hover .AnimeEntry {
- opacity: 0.5;
-}
-
-.SearchResultsContainer:hover .AnimeEntry:hover {
- opacity: 1;
-}
-
-.AnimeEntry p {
- position: absolute;
- bottom: 0;
- /* Adjust the value as needed */
- left: 50%;
- transform: translateX(-50%);
- margin: 0;
- color: white;
- padding: 5px;
- text-align: center;
- background-color: #121212ab;
- backdrop-filter: blur(10px);
- text-transform: uppercase;
- width: 100%;
- max-width: 170px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.AnimeEntry img {
- display: block;
- transition: transform 200ms ease;
-}
-
-.AnimeEntry img:hover {
- transform: translateY(-5px) scale(1.04);
-}
-
-
-.SearchResultsContainer::-webkit-scrollbar {
- height: 0.5rem;
-}
-
-.SearchResultsContainer::-webkit-scrollbar-thumb {
- background: rgb(83, 83, 83);
- border-radius: 1rem;
-}
-
-@media screen and (max-width: 768px) {
- .SearchInputContainer {
- width: 100%;
- }
-
-
-} \ No newline at end of file
diff --git a/src/app/components/header/header.jsx b/src/app/components/header/header.jsx
index 9e5fc69..3c7db2e 100644
--- a/src/app/components/header/header.jsx
+++ b/src/app/components/header/header.jsx
@@ -1,26 +1,43 @@
import Link from "next/link";
import styles from "../../page.module.css";
+import { ThemeSwitcher } from "../themeSwitcher";
export default async function Header() {
return (
- <main className={styles.main}>
- <div className={styles.header}>
- <div className={styles.left}>
- <Link
- href={"/"}
- style={{ textDecoration: "none", color: "white" }}
- >
- <p>Dramalama</p>
- </Link>
- </div>
- <div className={styles.right}>
- <Link href="/anime">Anime</Link>
- <Link href="/kdrama">Kdrama</Link>
- <Link href="/manga">Manga</Link>
- <Link href="/movies">Movies</Link>
- <Link href="/web-series">Series</Link>
- </div>
+ <div className="fixed top-0 w-full flex items-center justify-between z-50 dark:bg-black bg-white">
+ <h4 className="text-teal-400 text-2xl p-2">
+ <Link href={"/"}>Dramalama</Link>
+ </h4>
+ <div
+ className={`mx-2 flex items-center overflow-auto ${styles.ScrollBarAdjuster}`}
+ >
+ <ThemeSwitcher />
+
+ <Link href={"/anime"} className="mx-2 hover:text-sky-400">
+ <p>Anime</p>
+ </Link>
+ <Link href={"/kdrama"} className="mx-2 hover:text-sky-400">
+ <p>Kdrama</p>
+ </Link>
+ <Link
+ href={"/components/workInProgress/"}
+ className="mx-2 hover:text-sky-400"
+ >
+ <p>Manga</p>
+ </Link>
+ <Link
+ href={"/components/workInProgress/"}
+ className="mx-2 hover:text-sky-400"
+ >
+ <p>Series</p>
+ </Link>
+ <Link
+ href={"/components/workInProgress/"}
+ className="mx-2 hover:text-sky-400"
+ >
+ <p>Movies</p>
+ </Link>
</div>
- </main>
+ </div>
);
}
diff --git a/src/app/components/moonIcon.jsx b/src/app/components/moonIcon.jsx
new file mode 100644
index 0000000..6f20a38
--- /dev/null
+++ b/src/app/components/moonIcon.jsx
@@ -0,0 +1,17 @@
+import React from "react";
+export const MoonIcon = (props) => (
+ <svg
+ aria-hidden="true"
+ focusable="false"
+ height="1em"
+ role="presentation"
+ viewBox="0 0 24 24"
+ width="1em"
+ {...props}
+ >
+ <path
+ d="M21.53 15.93c-.16-.27-.61-.69-1.73-.49a8.46 8.46 0 01-1.88.13 8.409 8.409 0 01-5.91-2.82 8.068 8.068 0 01-1.44-8.66c.44-1.01.13-1.54-.09-1.76s-.77-.55-1.83-.11a10.318 10.318 0 00-6.32 10.21 10.475 10.475 0 007.04 8.99 10 10 0 002.89.55c.16.01.32.02.48.02a10.5 10.5 0 008.47-4.27c.67-.93.49-1.519.32-1.79z"
+ fill="currentColor"
+ />
+ </svg>
+);
diff --git a/src/app/components/sunIcon.jsx b/src/app/components/sunIcon.jsx
new file mode 100644
index 0000000..cc47cfa
--- /dev/null
+++ b/src/app/components/sunIcon.jsx
@@ -0,0 +1,17 @@
+import React from "react";
+export const SunIcon = (props) => (
+ <svg
+ aria-hidden="true"
+ focusable="false"
+ height="1em"
+ role="presentation"
+ viewBox="0 0 24 24"
+ width="1em"
+ {...props}
+ >
+ <g fill="currentColor">
+ <path d="M19 12a7 7 0 11-7-7 7 7 0 017 7z" />
+ <path d="M12 22.96a.969.969 0 01-1-.96v-.08a1 1 0 012 0 1.038 1.038 0 01-1 1.04zm7.14-2.82a1.024 1.024 0 01-.71-.29l-.13-.13a1 1 0 011.41-1.41l.13.13a1 1 0 010 1.41.984.984 0 01-.7.29zm-14.28 0a1.024 1.024 0 01-.71-.29 1 1 0 010-1.41l.13-.13a1 1 0 011.41 1.41l-.13.13a1 1 0 01-.7.29zM22 13h-.08a1 1 0 010-2 1.038 1.038 0 011.04 1 .969.969 0 01-.96 1zM2.08 13H2a1 1 0 010-2 1.038 1.038 0 011.04 1 .969.969 0 01-.96 1zm16.93-7.01a1.024 1.024 0 01-.71-.29 1 1 0 010-1.41l.13-.13a1 1 0 011.41 1.41l-.13.13a.984.984 0 01-.7.29zm-14.02 0a1.024 1.024 0 01-.71-.29l-.13-.14a1 1 0 011.41-1.41l.13.13a1 1 0 010 1.41.97.97 0 01-.7.3zM12 3.04a.969.969 0 01-1-.96V2a1 1 0 012 0 1.038 1.038 0 01-1 1.04z" />
+ </g>
+ </svg>
+);
diff --git a/src/app/components/themeSwitcher.jsx b/src/app/components/themeSwitcher.jsx
new file mode 100644
index 0000000..995dbbf
--- /dev/null
+++ b/src/app/components/themeSwitcher.jsx
@@ -0,0 +1,43 @@
+// app/components/ThemeSwitcher.tsx
+"use client";
+
+import { useTheme } from "next-themes";
+import { useEffect, useState } from "react";
+
+import React from "react";
+import { Switch } from "@nextui-org/react";
+import { SunIcon } from "./sunIcon";
+import { MoonIcon } from "./moonIcon";
+
+export function ThemeSwitcher() {
+ const [mounted, setMounted] = useState(false);
+ const { theme, setTheme } = useTheme();
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ if (!mounted) return null;
+
+ return (
+ <Switch
+ defaultSelected
+ size="sm"
+ color="secondary"
+ thumbIcon={({ isSelected, className }) =>
+ isSelected ? (
+ <SunIcon className={className} />
+ ) : (
+ <MoonIcon className={className} />
+ )
+ }
+ onClick={() => {
+ if (theme === "light") {
+ setTheme("dark");
+ } else {
+ setTheme("light");
+ }
+ }}
+ ></Switch>
+ );
+}
diff --git a/src/app/components/workInProgress/page.jsx b/src/app/components/workInProgress/page.jsx
new file mode 100644
index 0000000..0af0a98
--- /dev/null
+++ b/src/app/components/workInProgress/page.jsx
@@ -0,0 +1,12 @@
+const WorkInProgress = async () => {
+ return (
+ <main className="h-screen w-screen flex flex-col items-center justify-center">
+ <p className="text-sky-400 uppercase">
+ This section is undergoing a complete overhaul. Sorry for the
+ inconvenience.
+ </p>
+ </main>
+ );
+};
+
+export default WorkInProgress;
diff --git a/src/app/error.jsx b/src/app/error.jsx
index 7549925..348050b 100644
--- a/src/app/error.jsx
+++ b/src/app/error.jsx
@@ -1,7 +1,7 @@
"use client"; // Error components must be Client Components
import { useEffect } from "react";
-import styles from "./globals.module.css";
+import { Button } from "@nextui-org/react";
export default function Error({ error, reset }) {
useEffect(() => {
@@ -9,16 +9,11 @@ export default function Error({ error, reset }) {
}, [error]);
return (
- <div className={styles.ErrorContainer}>
+ <div className="w-screen h-screen flex items-center flex-col justify-center">
<p>Something went wrong!</p>
- <button
- onClick={
- // Attempt to recover by trying to re-render the segment
- () => reset()
- }
- >
+ <Button color="primary" onClick={() => reset()}>
Try again
- </button>
+ </Button>
</div>
);
}
diff --git a/src/app/globals.css b/src/app/globals.css
index bcf2a8b..c414701 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,3 +1,7 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
@import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400;1,700&family=Lexend+Deca&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
:root {
@@ -23,12 +27,6 @@
--light-sky: #CAF4FF;
}
-body {
- margin: 0;
- padding: 0;
- background-color: #121212;
-}
-
body::-webkit-scrollbar {
width: 0;
} \ No newline at end of file
diff --git a/src/app/kdrama/[id]/buttons.jsx b/src/app/kdrama/[id]/buttons.jsx
deleted file mode 100644
index 66292e7..0000000
--- a/src/app/kdrama/[id]/buttons.jsx
+++ /dev/null
@@ -1,86 +0,0 @@
-"use client";
-import styles from "../styles/info.module.css";
-import getVideoLink from "../components/videoLink";
-import React, { useState } from "react";
-import { MediaPlayer, MediaProvider } from "@vidstack/react";
-import "@vidstack/react/player/styles/default/theme.css";
-import "@vidstack/react/player/styles/default/layouts/video.css";
-import {
- defaultLayoutIcons,
- DefaultVideoLayout,
-} from "@vidstack/react/player/layouts/default";
-
-export default function EpisodesButtons({ data: episodeData, id: dramaId }) {
- const [videoLink, setVideoLink] = useState(null);
-
- async function test(a, b) {
- let link = await getVideoLink(a, b);
- setVideoLink(link);
- }
-
- return (
- <div>
- <div className={styles.EpisodesContainer}>
- <h2>Episodes</h2>
- <div className={styles.EpisodeButtons}>
- {episodeData && episodeData.length > 0 ? (
- episodeData.map((item, index) => (
- <button
- title={item.title}
- key={index}
- onClick={(event) => {
- test(item.id, dramaId, item.title);
- event.currentTarget.style.backgroundColor =
- "var(--soft-purple)";
- }}
- >
- <p>{item.title}</p>
- </button>
- ))
- ) : (
- <p style={{ color: "white" }}>
- No episodes are available at the moment but they
- will be made available soon. Thank you for your
- patience.
- </p>
- )}
- </div>
- </div>
-
- {videoLink && (
- <div
- className={styles.videoPopUp}
- id="popup"
- onKeyDown={(event) => {
- if (event.code === "Escape") {
- setVideoLink("");
- }
- }}
- >
- <div className={styles.video}>
- <MediaPlayer
- title="dramaPlayer"
- src={videoLink}
- load="eager"
- className={styles.VideoPlayer}
- playsInline
- id="videoPlayer"
- volume={0.8}
- >
- <MediaProvider />
- <DefaultVideoLayout icons={defaultLayoutIcons} />
- </MediaPlayer>
- <button
- className={styles.closeButton}
- onClick={() => {
- setVideoLink("");
- }}
- >
- Close
- </button>
- </div>
- </div>
- )}
- </div>
- );
-}
diff --git a/src/app/kdrama/[id]/page.jsx b/src/app/kdrama/[id]/page.jsx
index 9cb3cd8..d94810e 100644
--- a/src/app/kdrama/[id]/page.jsx
+++ b/src/app/kdrama/[id]/page.jsx
@@ -1,66 +1,46 @@
-import styles from "../styles/info.module.css";
-import Image from "next/image";
-import EpisodesButtons from "./buttons";
-import { PreFetchVideoLinks } from "../components/cacher";
+import { Chip, Image } from "@nextui-org/react";
+import DescriptionTabs from "../components/infoTabs";
+import { dramaInfo } from "../components/requests";
+import EpisodesContainer from "../components/episodesContainer";
export default async function DramaInfo({ params }) {
const id = decodeURIComponent(params.id);
- const info = await getDramaInfo(id);
-
- PreFetchVideoLinks(info.episodes, id);
+ const data = await dramaInfo(id);
return (
- <div className={styles.Main}>
- {info && (
- <div className={styles.DramaInfoContainer}>
- <div className={styles.TitleContainer}>
- <p>{info.title}</p>
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${info.image}`}
- width={175}
- height={256}
- alt="Drama Poster"
- priority
- />
- </div>
-
- {/* Drama description */}
- <div className={styles.DramaDescription}>
- <h2>Description</h2>
- <p>{info.description}</p>
- </div>
-
- {/* Genres */}
- <div className={styles.DramaGenre}>
- <span className={styles.genreMain}>Genres: </span>
- {info.genres &&
- info.genres.map((item, index) => (
- <p key={index}>{item}</p>
- ))}
- </div>
-
- {/* Other names */}
- <div className={styles.DramaGenre}>
- <span className={styles.genreMain}>AKA: </span>
- {info.otherNames &&
- info.otherNames.map((item, index) => (
- <p key={index}>{item}</p>
+ <section className="pt-12 lg:w-9/12 m-auto">
+ <div className="flex items-center justify-center lg:justify-start md:justify-start">
+ <Image
+ isBlurred
+ width={190}
+ src={data.image.toString()}
+ alt="Anime Title Poster"
+ className="m-2"
+ />
+ <div className="mx-5">
+ <h4 className={`text-2xl`}>
+ <strong>{data.title}</strong>
+ </h4>
+ <div className="mt-1">
+ {data.genres &&
+ data.genres.map((item, index) => (
+ <Chip
+ key={index}
+ color="warning"
+ variant="faded"
+ className="mr-1 mb-1"
+ >
+ <p className="text-xs">{item}</p>
+ </Chip>
))}
</div>
-
- {/* Episodes Buttons */}
- <EpisodesButtons data={info.episodes} id={id} />
</div>
- )}
- </div>
- );
-}
-
-async function getDramaInfo(id) {
- const res = await fetch(
- `https://consumet-jade.vercel.app/movies/dramacool/info?id=${id}`,
- { next: { revalidate: 21600 } }
+ </div>
+ <DescriptionTabs data={data} />
+ <EpisodesContainer data={data} />
+ <br />
+ <br />
+ <br />
+ </section>
);
- const data = await res.json();
- return data;
}
diff --git a/src/app/kdrama/components/cacher.js b/src/app/kdrama/components/cacher.js
index 860cdca..fdfa272 100644
--- a/src/app/kdrama/components/cacher.js
+++ b/src/app/kdrama/components/cacher.js
@@ -1,21 +1,6 @@
-// This function pre-fetches all the video links for a drama in the background
"use server";
-export async function PreFetchVideoLinks(data, dramaId) {
- try {
- const fetchPromises = data.map(async (element) => {
- const link = `https://consumet-jade.vercel.app/movies/dramacool/watch?episodeId=${element.id}&mediaId=${dramaId}`;
- await fetch(link, { cache: "force-cache" });
- });
-
- await Promise.all(fetchPromises);
- console.log("Video links pre-fetched successfully!");
- } catch (error) {
- console.error("Error occurred while pre-fetching video links:", error);
- }
-}
-
-export async function PreFetchAnimeInfo(data) {
+export async function PreFetchKdramaInfo(data) {
try {
const fetchPromises = data.results.map(async (element) => {
const link = `https://consumet-jade.vercel.app/movies/dramacool/info?id=${element.id}`;
diff --git a/src/app/kdrama/components/episodesContainer.jsx b/src/app/kdrama/components/episodesContainer.jsx
new file mode 100644
index 0000000..984ece5
--- /dev/null
+++ b/src/app/kdrama/components/episodesContainer.jsx
@@ -0,0 +1,83 @@
+"use client";
+
+import { MediaPlayer, MediaProvider } from "@vidstack/react";
+import "@vidstack/react/player/styles/default/theme.css";
+import "@vidstack/react/player/styles/default/layouts/video.css";
+import {
+ defaultLayoutIcons,
+ DefaultVideoLayout,
+} from "@vidstack/react/player/layouts/default";
+import { Select, SelectItem, Button, Skeleton } from "@nextui-org/react";
+import { useState, useEffect } from "react";
+
+import { lexend } from "../../../../config/fonts";
+import { videoLink } from "./requests";
+
+const EpisodesContainer = ({ data: data }) => {
+ const [videolink, setVideoLink] = useState("");
+ const [loading, setLoading] = useState(<></>);
+
+ async function handleSelectChange(episodeId) {
+ setVideoLink("");
+ setLoading(
+ <div className="w-full flex items-center gap-3">
+ <div className="w-full flex flex-col gap-2">
+ <Skeleton className="h-44 rounded-lg lg:h-96" />
+ </div>
+ </div>
+ );
+ const videoURL = await videoLink(episodeId, data.id);
+ setLoading(<></>);
+ setVideoLink(videoURL);
+ }
+
+ return (
+ <section>
+ <div className="flex w-full flex-wrap md:flex-nowrap gap-4 my-2">
+ <Select
+ label="Select Episode"
+ className={`${lexend.className} max-w-xs`}
+ >
+ {data.episodes && data.episodes.length > 0 ? (
+ data.episodes.map((item, index) => (
+ <SelectItem
+ key={index}
+ textValue={item.episode}
+ onClick={async () =>
+ await handleSelectChange(item.id)
+ }
+ className={lexend.className}
+ >
+ {item.episode}
+ </SelectItem>
+ ))
+ ) : (
+ <SelectItem disabled className={lexend.className}>
+ No episodes available right now
+ </SelectItem>
+ )}
+ </Select>
+ </div>
+
+ {loading}
+ {videolink && (
+ <div>
+ <MediaPlayer
+ title={data.title}
+ src={videolink}
+ aspectRatio="16/9"
+ load="eager"
+ playsInline
+ volume={0.8}
+ autoPlay
+ >
+ <MediaProvider />
+ <DefaultVideoLayout icons={defaultLayoutIcons} />
+ </MediaPlayer>
+ </div>
+ )}
+ </section>
+ );
+};
+
+export default EpisodesContainer;
diff --git a/src/app/kdrama/components/infoTabs.jsx b/src/app/kdrama/components/infoTabs.jsx
new file mode 100644
index 0000000..54c05ba
--- /dev/null
+++ b/src/app/kdrama/components/infoTabs.jsx
@@ -0,0 +1,51 @@
+"use client";
+
+import { Tabs, Tab, Card, CardBody } from "@nextui-org/react";
+
+import { lexend, atkinson } from "../../../../config/fonts";
+
+export default function DescriptionTabs({ data: data }) {
+ return (
+ <div className="flex w-full flex-col">
+ <Tabs aria-label="Options" className={lexend.className}>
+ <Tab key="description" title="Description">
+ <Card>
+ <CardBody className={atkinson.className}>
+ {data.description || "No description found"}
+ </CardBody>
+ </Card>
+ </Tab>
+ <Tab key="episodes" title="Details">
+ <Card>
+ <CardBody className={atkinson.className}>
+ <h4>
+ <strong>Episodes</strong>:{" "}
+ <span>{data.episodes.length}</span>
+ </h4>
+ <h4>
+ <strong>Duration</strong>:{" "}
+ <span>{data.duration || "not found"}</span>
+ </h4>
+ <h4>
+ <strong>Release Year</strong>:{" "}
+ <span>{data.releaseDate}</span>
+ </h4>
+ <h4>
+ <strong>Other Names</strong>:{" "}
+ {data.otherNames &&
+ data.otherNames.map((item, index) => (
+ <span key={index}>
+ {item}
+ {index <
+ data.otherNames.length - 1 &&
+ ", "}
+ </span>
+ ))}
+ </h4>
+ </CardBody>
+ </Card>
+ </Tab>
+ </Tabs>
+ </div>
+ );
+}
diff --git a/src/app/kdrama/components/popular.jsx b/src/app/kdrama/components/popular.jsx
deleted file mode 100644
index 21d8cc3..0000000
--- a/src/app/kdrama/components/popular.jsx
+++ /dev/null
@@ -1,47 +0,0 @@
-import styles from "../styles/popular.module.css";
-import Image from "next/image";
-import Link from "next/link";
-import { PreFetchAnimeInfo } from "./cacher";
-
-export default async function PopularDramas() {
- const popular = await getPopular();
- PreFetchAnimeInfo(popular);
-
- return (
- <div className={styles.Main}>
- <h2 className={styles.popDramasText}>Trending Dramas</h2>
-
- <div className={styles.AnimeContainer}>
- {popular &&
- popular.results.slice(0, 24).map((item, index) => (
- <Link
- href={`/kdrama/${encodeURIComponent(item.id)}`}
- key={index}
- style={{ textDecoration: "none" }}
- >
- <div
- className={styles.AnimeEntry}
- title={item.title}
- >
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
- width={167}
- height={267}
- alt="Drama Poster"
- />
- <p>{item.title}</p>
- </div>
- </Link>
- ))}
- </div>
- </div>
- );
-}
-
-async function getPopular() {
- const res = await fetch("https://dramacool-scraper.vercel.app/popular", {
- next: { revalidate: 21600 },
- });
- const data = await res.json();
- return data;
-}
diff --git a/src/app/kdrama/components/recent.jsx b/src/app/kdrama/components/recent.jsx
deleted file mode 100644
index 2b883d6..0000000
--- a/src/app/kdrama/components/recent.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import styles from "../styles/popular.module.css";
-import Image from "next/image";
-import Link from "next/link";
-import { PreFetchAnimeInfo } from "./cacher";
-
-export default async function RecentDramas() {
- const popular = await getPopular();
- PreFetchAnimeInfo(popular);
- return (
- <div className={styles.Main}>
- <h2 className={styles.popDramasText}>Recent Releases</h2>
-
- <div className={styles.AnimeContainer}>
- {popular &&
- popular.results.slice(0, 24).map((item, index) => (
- <Link
- href={`/kdrama/${encodeURIComponent(item.id)}`}
- key={index}
- style={{ textDecoration: "none" }}
- >
- <div
- className={styles.AnimeEntry}
- title={item.title}
- >
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
- width={167}
- height={267}
- alt="Drama Poster"
- />
- <p>{item.title}</p>
- </div>
- </Link>
- ))}
- </div>
- </div>
- );
-}
-
-async function getPopular() {
- const res = await fetch("https://dramacool-scraper.vercel.app/recent", {
- next: { revalidate: 21600 },
- });
- const data = await res.json();
- return data;
-}
diff --git a/src/app/kdrama/components/requests.js b/src/app/kdrama/components/requests.js
new file mode 100644
index 0000000..5609d79
--- /dev/null
+++ b/src/app/kdrama/components/requests.js
@@ -0,0 +1,44 @@
+"use server";
+
+import {
+ popular_dramas_url,
+ recent_drama_url,
+ search_drama_url,
+ drama_info_url,
+ videoURL,
+} from "../../../../utils/kdrama_urls";
+
+export const DramaDataFetcher = async (type) => {
+ const options = {
+ popular: popular_dramas_url,
+ recent: recent_drama_url,
+ };
+ const res = await fetch(options[type], { next: { revalidate: 21600 } });
+ const data = await res.json();
+ return data;
+};
+
+export const SearchedDramaData = async (title) => {
+ const res = await fetch(search_drama_url(title), {
+ next: { revalidate: 21600 },
+ });
+ const data = await res.json();
+ return data;
+};
+
+export const dramaInfo = async (id) => {
+ const res = await fetch(drama_info_url(id), {
+ next: { revalidate: 21600 },
+ });
+ const data = await res.json();
+ return data;
+};
+
+export const videoLink = async (epiId, mediaId) => {
+ const res = await fetch(videoURL(epiId, mediaId), {
+ next: { revalidate: 21600 },
+ });
+ const data = await res.json();
+ const videoLink = data.sources[0].url;
+ return videoLink;
+};
diff --git a/src/app/kdrama/components/search.jsx b/src/app/kdrama/components/search.jsx
deleted file mode 100644
index f44e4bb..0000000
--- a/src/app/kdrama/components/search.jsx
+++ /dev/null
@@ -1,65 +0,0 @@
-"use client";
-
-import styles from "../styles/search.module.css";
-import { useState } from "react";
-import { FaSearch } from "react-icons/fa";
-import FetchSearchTitle from "./searchQuery";
-import Image from "next/image";
-import Link from "next/link";
-import { PreFetchAnimeInfo } from "./cacher";
-
-export default function DramaSearch() {
- const [title, setTitle] = useState("");
- const [infoTitle, setInfoTitle] = useState(null);
- const [loadingText, setLoadingText] = useState(null);
-
- const handleSearch = async (title) => {
- setLoadingText(true);
- const data = await FetchSearchTitle(title);
- PreFetchAnimeInfo(data);
- setLoadingText(false);
- setInfoTitle(data);
- };
-
- return (
- <div className={styles.SearchContainer}>
- <div className={styles.Search}>
- <FaSearch color="white" size={16} />
- <input
- placeholder="Search for drama"
- onChange={(event) => setTitle(event.target.value)}
- onKeyDown={async (e) => {
- if ((e.key === "Enter" || e.code === 13) && title) {
- await handleSearch(e.target.value);
- }
- }}
- ></input>
- </div>
-
- {loadingText && (
- <p className={styles.LoadingText}>Wait a moment...</p>
- )}
-
- <div className={styles.SearchResults}>
- {infoTitle &&
- infoTitle.results.map((item, index) => (
- <Link
- href={`/kdrama/${encodeURIComponent(item.id)}`}
- style={{ textDecoration: "none" }}
- key={index}
- >
- <div className={styles.SearchEntry}>
- <p>{item.title}</p>
- <Image
- src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=${item.image}`}
- width={140}
- height={210}
- alt="Drama Poster"
- />
- </div>
- </Link>
- ))}
- </div>
- </div>
- );
-}
diff --git a/src/app/kdrama/components/searchBar.jsx b/src/app/kdrama/components/searchBar.jsx
new file mode 100644
index 0000000..5f5d89e
--- /dev/null
+++ b/src/app/kdrama/components/searchBar.jsx
@@ -0,0 +1,57 @@
+"use client";
+
+import React from "react";
+import { useState } from "react";
+import { Input, Progress } from "@nextui-org/react";
+
+import { SearchedDramaData } from "./requests";
+import SearchedDataFormatter from "./searchFormatter";
+import { PreFetchKdramaInfo } from "./cacher";
+
+export const Searchbar = () => {
+ const [loading, setLoading] = useState(<></>);
+ const [searchData, setSearchData] = useState(null);
+ const [searchTitle, setSearchTitle] = useState("");
+
+ async function handleSearchInput() {
+ setSearchData(null);
+ setLoading(
+ <Progress
+ size="sm"
+ isIndeterminate
+ aria-label="Loading..."
+ className="w-full"
+ />
+ );
+ const data = await SearchedDramaData(searchTitle);
+ PreFetchKdramaInfo(data);
+ const format = await SearchedDataFormatter(data);
+ setSearchData(format);
+ setLoading(<></>);
+ }
+
+ return (
+ <div>
+ <div className="flex w-full flex-wrap flex-col mt-2 md:flex-nowrap md:mx-2 gap-4 lg:w-1/2 lg:mx-2">
+ <Input
+ type="text"
+ label="Search for k-dramas here"
+ placeholder="Enter k-drama title"
+ color="default"
+ onChange={(event) => {
+ if (event.target.value.trim() !== "") {
+ setSearchTitle(event.target.value);
+ }
+ }}
+ onKeyDown={async (event) => {
+ if (event.key === "Enter" || event.code === "Enter") {
+ await handleSearchInput();
+ }
+ }}
+ />
+ {loading}
+ </div>
+ <div className="w-full mt-2">{searchData}</div>
+ </div>
+ );
+};
diff --git a/src/app/kdrama/components/searchFormatter.jsx b/src/app/kdrama/components/searchFormatter.jsx
new file mode 100644
index 0000000..bac2549
--- /dev/null
+++ b/src/app/kdrama/components/searchFormatter.jsx
@@ -0,0 +1,46 @@
+import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
+import NextImage from "next/image";
+
+import styles from "../../page.module.css";
+
+const SearchedDataFormatter = async (data) => {
+ return (
+ <section
+ className={`flex items-center overflow-auto pb-2 ${styles.ScrollBarAdjuster}`}
+ >
+ {data &&
+ data.results.length > 0 &&
+ data.results.map((item, index) => (
+ <Link
+ key={index}
+ href={`/kdrama/${encodeURIComponent(item.id)}`}
+ aria-label="anime redirection links"
+ className="flex flex-col items-center mx-1"
+ >
+ <Card className="overflow-hidden" isPressable>
+ <CardBody>
+ <Image
+ as={NextImage}
+ isBlurred
+ alt="Anime Poster"
+ src={item.image}
+ width={185}
+ height={120}
+ shadow="lg"
+ className="h-64"
+ priority
+ />
+ </CardBody>
+ <CardHeader>
+ <h4 className="antialiased text-small text-center uppercase w-44 overflow-hidden whitespace-nowrap text-ellipsis ">
+ {item.title}
+ </h4>
+ </CardHeader>
+ </Card>
+ </Link>
+ ))}
+ </section>
+ );
+};
+
+export default SearchedDataFormatter;
diff --git a/src/app/kdrama/components/searchQuery.js b/src/app/kdrama/components/searchQuery.js
deleted file mode 100644
index 18c06a9..0000000
--- a/src/app/kdrama/components/searchQuery.js
+++ /dev/null
@@ -1,10 +0,0 @@
-"use server";
-
-export default async function FetchSearchTitle(title) {
- const res = await fetch(
- `https://consumet-jade.vercel.app/movies/dramacool/${title}`,
- { cache: "force-cache" }
- );
- const data = await res.json();
- return data;
-}
diff --git a/src/app/kdrama/components/videoLink.js b/src/app/kdrama/components/videoLink.js
deleted file mode 100644
index e49ca18..0000000
--- a/src/app/kdrama/components/videoLink.js
+++ /dev/null
@@ -1,11 +0,0 @@
-"use server";
-export default async function getVideoLink(epiId, mediaId) {
- let videoLink;
- const res = await fetch(
- `https://consumet-jade.vercel.app/movies/dramacool/watch?episodeId=${epiId}&mediaId=${mediaId}`,
- { cache: "force-cache" }
- );
- const data = await res.json();
- videoLink = data.sources[0].url;
- return videoLink;
-}
diff --git a/src/app/kdrama/loading.jsx b/src/app/kdrama/loading.jsx
deleted file mode 100644
index 4d5e9bd..0000000
--- a/src/app/kdrama/loading.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import styles from "./styles/loading.module.css";
-
-export default async function Loading() {
- return (
- <div className={styles.Main}>
- <div className={styles.LoadingContainer}></div>
- </div>
- );
-}
diff --git a/src/app/kdrama/page.jsx b/src/app/kdrama/page.jsx
index b9cdb69..d5e2855 100644
--- a/src/app/kdrama/page.jsx
+++ b/src/app/kdrama/page.jsx
@@ -1,15 +1,95 @@
-import styles from "./styles/kdrama.module.css";
-import PopularDramas from "./components/popular";
-import RecentDramas from "./components/recent";
-import DramaSearch from "./components/search";
+import { Card, CardHeader, CardBody, Image, Link } from "@nextui-org/react";
+import NextImage from "next/image";
+
+import { DramaDataFetcher } from "./components/requests";
+import styles from "../page.module.css";
+import { Searchbar } from "./components/searchBar";
+import { PreFetchKdramaInfo } from "./components/cacher";
+
+const KdramaHomepage = async () => {
+ const recent_data = await DramaDataFetcher("recent");
+ const popular_data = await DramaDataFetcher("popular");
+
+ const dataToBeLoaded = [recent_data, popular_data];
+
+ for (let item of dataToBeLoaded) {
+ PreFetchKdramaInfo(item);
+ }
+
+ const header = (title) => (
+ <>
+ <p className="antialiased font-bold text-sky-400 text-2xl my-1">
+ {title}
+ </p>
+ </>
+ );
+
+ const format = (data) => (
+ <>
+ {data &&
+ data.results.map((item, index) => (
+ <Link
+ key={index}
+ href={`/kdrama/${encodeURIComponent(item.id)}`}
+ aria-label="anime redirection links"
+ className="flex flex-col items-center mx-1"
+ >
+ <Card className="overflow-visible " isPressable>
+ <CardBody>
+ <Image
+ as={NextImage}
+ isBlurred
+ alt="Anime Poster"
+ src={item.image}
+ width={270}
+ height={160}
+ className="h-60 overflow-hidden"
+ shadow="lg"
+ priority
+ />
+ </CardBody>
+ <CardHeader>
+ <h4
+ className={`antialiased text-small text-center uppercase w-44 overflow-hidden whitespace-nowrap text-ellipsis `}
+ >
+ {item.title}
+ </h4>
+ </CardHeader>
+ </Card>
+ </Link>
+ ))}
+ </>
+ );
-export default async function Kdrama() {
return (
- <div className={styles.Main}>
- <DramaSearch />
- <PopularDramas />
- <hr style={{ marginTop: 15, borderColor: "gray" }} />
- <RecentDramas />
- </div>
+ <section className="pt-12">
+ <div>
+ <Searchbar />
+ </div>
+ <div className="mx-2">
+ {header("Popular K-dramas")}
+ <div
+ className={`flex overflow-auto overflow-y-hidden pb-3 ${styles.ScrollBarAdjuster}`}
+ >
+ {format(popular_data)}
+ </div>
+ </div>
+ <div className="mx-2">
+ {header("Recent Releases")}
+ <div
+ className={`flex overflow-auto overflow-y-hidden pb-3 ${styles.ScrollBarAdjuster}`}
+ >
+ {format(recent_data)}
+ </div>
+ </div>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <br />
+ </section>
);
-}
+};
+
+export default KdramaHomepage;
diff --git a/src/app/kdrama/styles/info.module.css b/src/app/kdrama/styles/info.module.css
deleted file mode 100644
index 3b60fd2..0000000
--- a/src/app/kdrama/styles/info.module.css
+++ /dev/null
@@ -1,173 +0,0 @@
-.Main {
- max-width: 98%;
- margin: 60px auto;
-}
-
-.TitleContainer {
- display: flex;
- align-items: center;
- justify-content: space-between;
-}
-
-.TitleContainer p {
- color: white;
- font-size: 34px;
- font-weight: 500;
- color: var(--neon-green);
- margin: 0;
-}
-
-.TitleContainer img {
- border-radius: 0.4rem;
-}
-
-.DramaDescription h2 {
- color: gray;
-}
-
-.DramaDescription p {
- color: white;
- margin-top: -10px;
- color: rgba(255, 255, 255, 0.637);
-}
-
-.DramaGenre {
- display: flex;
- align-items: center;
- overflow-x: auto;
- color: white;
- margin-top: 1rem;
-}
-.DramaGenre p {
- background-color: #1f1f1f;
- margin: 0rem 0rem 0rem 0.4rem;
- padding: 0.4rem;
- border-radius: 0.2rem;
-}
-
-.DramaGenre::-webkit-scrollbar {
- height: 2px;
-}
-
-.DramaGenre::-webkit-scrollbar-thumb {
- background-color: var(--light-green);
- border-radius: 1rem;
-}
-
-.genreMain {
- color: var(--neon-green);
- font-size: 18px;
-}
-
-.EpisodesContainer {
- margin-top: -10px;
-}
-
-.EpisodesContainer h2 {
- color: gray;
-}
-
-.EpisodeButtons {
- margin: -10px 5px;
-}
-
-.EpisodeButtons button {
- margin: 3px;
- padding: 5px;
- border: none;
- outline: none;
- border-radius: 5px;
- background-color: #3d3d3d;
- transition: background-color 0.2s linear;
- color: white;
- cursor: pointer;
- width: 100px;
-}
-
-.EpisodeButtons button p {
- text-align: center;
- font-family: "Lexend Deca", serif;
- margin: 0;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
-}
-
-.EpisodeButtons button:hover {
- background-color: #1f1f1f;
- transition: background-color 0.2s linear;
-}
-
-.videoPopUp {
- height: 100dvh;
- width: 100dvw;
- background-color: #141414ea;
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- z-index: 1;
- overflow-y: auto;
-}
-
-.closeButton {
- font-family: "Lexend Deca", serif;
- font-size: 16px;
- background-color: var(--pastel-red);
- padding: 0.5rem 1.5rem;
- border: 0;
- outline: 0;
- border-radius: 0.5rem;
- cursor: pointer;
- margin: 5px;
-}
-
-.video {
- width: 60vw;
-}
-
-.VideoPlayer {
- width: 100%;
- height: auto;
-}
-
-@media screen and (max-width: 768px) {
- .video {
- width: 100%;
- }
-
- .EpisodeButtons button {
- font-size: 14px;
- width: 80px;
- }
-
- .TitleContainer {
- flex-direction: column;
- }
-
- .TitleContainer img {
- width: auto;
- height: auto;
- border-radius: 0.2rem;
- background-color: #121212;
- padding: 0.2rem;
- }
-
- .TitleContainer p {
- font-size: 30px;
- font-weight: 400;
- margin: 0 0 0.25rem 0
- }
-
- .EpisodesContainer {
- text-align: center;
- }
-
- .EpisodeButtons button {
- width: 90px;
- }
-}
diff --git a/src/app/kdrama/styles/kdrama.module.css b/src/app/kdrama/styles/kdrama.module.css
deleted file mode 100644
index deb3860..0000000
--- a/src/app/kdrama/styles/kdrama.module.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.Main {
- margin: 80px auto;
- width: 99%;
-}
diff --git a/src/app/kdrama/styles/loading.module.css b/src/app/kdrama/styles/loading.module.css
deleted file mode 100644
index 825c247..0000000
--- a/src/app/kdrama/styles/loading.module.css
+++ /dev/null
@@ -1,21 +0,0 @@
-.Main {
- height: 100dvh;
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.LoadingContainer {
- width: 50px;
- height: 50px;
- border-radius: 50%;
- border: 8px solid;
- border-color: #f4f4f4 #0000;
- animation: s1 1s infinite;
-}
-
-@keyframes s1 {
- to {
- transform: rotate(0.5turn);
- }
-}
diff --git a/src/app/kdrama/styles/popular.module.css b/src/app/kdrama/styles/popular.module.css
deleted file mode 100644
index ec76fb3..0000000
--- a/src/app/kdrama/styles/popular.module.css
+++ /dev/null
@@ -1,73 +0,0 @@
-.popDramasText {
- color: white;
- margin: 0 0 0.2rem 0;
-}
-
-.AnimeContainer {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
- grid-gap: 0.7rem;
- align-items: center;
-}
-
-.AnimeContainer::-webkit-scrollbar {
- height: 0px;
-}
-
-.AnimeContainer:hover .AnimeEntry {
- opacity: 0.5;
-}
-
-.AnimeContainer:hover .AnimeEntry:hover {
- opacity: 1;
- transform: scale(1.018);
- background-color: #272727;
-}
-
-.AnimeEntry {
- display: flex;
- flex-direction: column;
- align-items: center;
- background-color: #1f1f1fbb;
- padding: 0.5rem;
- transition: opacity 200ms ease, transform 200ms ease,
- background-color 200ms ease;
- cursor: grab;
- border-radius: 0.4rem;
- overflow: hidden;
-}
-
-.AnimeEntry img {
- border-radius: 0.4rem;
- box-shadow: 0 0 10px 5px rgba(18, 18, 18, 0.863);
-}
-
-.AnimeEntry p {
- text-align: center;
- color: white;
- width: auto;
- max-width: 160px;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis;
- margin: 0.5rem 0rem 0rem 0rem;
-}
-
-@media screen and (max-width: 768px) {
- .popDramasText {
- text-align: start;
- font-size: 26px;
- margin: 1rem 0 1rem 0;
- }
-
- .AnimeContainer {
- display: flex;
- overflow-x: auto;
- overflow-y: hidden;
- margin-top: -8px;
- }
-
- .AnimeEntry img {
- width: auto;
- }
-}
diff --git a/src/app/kdrama/styles/search.module.css b/src/app/kdrama/styles/search.module.css
deleted file mode 100644
index d7d28b2..0000000
--- a/src/app/kdrama/styles/search.module.css
+++ /dev/null
@@ -1,84 +0,0 @@
-
-.LoadingText {
- color: white;
- text-align: center;
- font-size: 18px;
-}
-
-.Search {
- padding: 5px;
- background-color: #121212;
- display: flex;
- align-items: center;
- max-width: 30%;
- border-radius: 0.5rem;
-}
-
-.SearchContainer input {
- margin-left: 5px;
- padding: 5px;
- border: none;
- outline: none;
- background-color: #121212;
- font-size: 16px;
- color: white;
- width: 100%;
- font-family: "Lexend Deca";
-}
-
-.SearchResults {
- display: flex;
- margin: 10px 0 10px 0;
- overflow-x: auto;
-}
-
-.SearchResults::-webkit-scrollbar {
- height: 5px;
-}
-
-.SearchResults::-webkit-scrollbar-track {
- background-color: #3333339d;
- border-radius: 5px;
-}
-
-.SearchResults::-webkit-scrollbar-thumb {
- background-color: rgb(68, 68, 68);
- border-radius: 5px;
-}
-
-.SearchEntry {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin: 5px;
- padding: 6px;
- background-color: #2e2e2eab;
- border-radius: 0.5rem;
- cursor: pointer;
- transition: opacity 200ms linear, background-color 200ms linear;
-}
-
-.SearchResults .SearchEntry {
- opacity: 0.5;
-}
-
-.SearchResults .SearchEntry:hover {
- opacity: 1;
- background-color: #333333c9;
-}
-
-.SearchEntry p {
- color: white;
- font-size: 18px;
- width: 45vh;
-}
-
-.SearchEntry img {
- border-radius: 0.5rem;
-}
-
-@media screen and (max-width: 768px) {
- .Search {
- max-width: 100%;
- }
-}
diff --git a/src/app/layout.jsx b/src/app/layout.jsx
index f16ed98..9673001 100644
--- a/src/app/layout.jsx
+++ b/src/app/layout.jsx
@@ -1,11 +1,11 @@
-import { Lexend_Deca } from "next/font/google";
import "./globals.css";
import Header from "./components/header/header";
import Footer from "./components/footer/page";
import { SpeedInsights } from "@vercel/speed-insights/next";
import { Analytics } from "@vercel/analytics/react";
-
-const lexend = Lexend_Deca({ subsets: ["latin"] });
+import { NextUIProvider } from "@nextui-org/react";
+import { ThemeProvider as NextThemesProvider } from "next-themes";
+import { lexend } from "../../config/fonts";
export const metadata = {
title: "Dramalama",
@@ -15,7 +15,21 @@ export const metadata = {
applicationName: "Dramalama",
authors: [{ name: "zephex", url: "https://github.com/real-zephex" }],
creator: "Zephex",
- keywords: ["Kdrama", "Anime", "Manga", "Watch Online"],
+ keywords: [
+ "Kdrama",
+ "Anime",
+ "Manga",
+ "Watch Online",
+ "watch kdrama free",
+ "watch anime free online",
+ "kdrama for free",
+ "watch online",
+ "read mangas for free",
+ "mangas online",
+ "movies online",
+ "free movies online",
+ "watch series for free",
+ ],
robots: {
index: true,
follow: true,
@@ -45,9 +59,12 @@ export default function RootLayout({ children }) {
<body>
<SpeedInsights />
<Analytics />
- <Header />
- {children}
- <Footer />
+ <NextUIProvider>
+ <NextThemesProvider attribute="class" defaultTheme="dark">
+ <Header />
+ <div>{children}</div>
+ </NextThemesProvider>
+ </NextUIProvider>
</body>
</html>
);
diff --git a/src/app/movies/components/popular.jsx b/src/app/movies/components/popular.jsx
index d2d5e36..3ef0501 100644
--- a/src/app/movies/components/popular.jsx
+++ b/src/app/movies/components/popular.jsx
@@ -10,7 +10,7 @@ export default async function POPULAR_MOVIES() {
return (
<main className={styles.Main}>
- <h1>Popular Movies</h1>
+ <h2>Popular Movies</h2>
<section className={styles.MovieContainer}>
{data &&
data.results &&
@@ -23,21 +23,12 @@ export default async function POPULAR_MOVIES() {
}}
key={index}
>
- <div
- style={{
- borderRadius: "0.5rem",
- overflow: "hidden",
- backgroundImage: `url(https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.backdrop_path})`,
- backgroundRepeat: "no-repeat",
- backgroundSize: "cover",
- }}
- className={styles.MovieEntryPrev}
- >
+ <div className={styles.MovieEntryPrev}>
<div className={styles.MovieEntry}>
<Image
src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.poster_path}`}
- width={167}
- height={247}
+ width={180}
+ height={300}
alt="Movie Poster"
priority
></Image>
diff --git a/src/app/movies/components/search.jsx b/src/app/movies/components/search.jsx
index 6514b76..dca163a 100644
--- a/src/app/movies/components/search.jsx
+++ b/src/app/movies/components/search.jsx
@@ -19,7 +19,7 @@ export default function SEARCH_COMPONENT() {
<FaSearch
color="white"
className={styles.SearchIcon}
- size={17}
+ size={22}
/>
<input
placeholder="Enter movie title here"
diff --git a/src/app/movies/components/trending.jsx b/src/app/movies/components/trending.jsx
index 5436dfa..8e20ba1 100644
--- a/src/app/movies/components/trending.jsx
+++ b/src/app/movies/components/trending.jsx
@@ -10,7 +10,7 @@ export default async function TREDNING_MOVIES() {
return (
<main className={styles.Main}>
- <h1>Trending Movies</h1>
+ <h2>Trending Movies</h2>
<section className={styles.MovieContainer}>
{data &&
data.results &&
@@ -23,21 +23,12 @@ export default async function TREDNING_MOVIES() {
}}
key={index}
>
- <div
- style={{
- borderRadius: "0.5rem",
- overflow: "hidden",
- backgroundImage: `url(https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.backdrop_path})`,
- backgroundRepeat: "no-repeat",
- backgroundSize: "cover",
- }}
- className={styles.MovieEntryPrev}
- >
+ <div className={styles.MovieEntryPrev}>
<div className={styles.MovieEntry}>
<Image
src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.poster_path}`}
- width={167}
- height={247}
+ width={180}
+ height={300}
alt="Movie Poster"
></Image>
<p>{item.title}</p>
diff --git a/src/app/movies/styles/pop_trend.module.css b/src/app/movies/styles/pop_trend.module.css
index 2e9ebd9..362debd 100644
--- a/src/app/movies/styles/pop_trend.module.css
+++ b/src/app/movies/styles/pop_trend.module.css
@@ -4,22 +4,16 @@
margin-right: 0.2rem;
}
-.Main h1 {
- margin: 0 0 0.5rem 0;
- text-align: center;
- color: transparent;
- background: linear-gradient(90deg,
- var(--neon-green) 40%,
- var(--light-green) 60%,
- var(--neon-yellow) 80%,
- var(--soft-purple) 100%);
- background-size: 60% 50%;
- background-clip: text;
+.Main h2 {
+ color: white;
+ margin: 0.4rem 0 0 0;
+ text-transform: uppercase;
+ font-size: 30px;
}
.MovieContainer {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 0.5rem;
align-items: center;
}
@@ -34,11 +28,12 @@
.MovieContainer:hover .MovieEntryPrev:hover {
opacity: 1;
- scale: 1.015;
+ transform: translateY(-5px) scale(1.02);
+
}
.MovieEntryPrev {
- transition: opacity 200ms ease, scale 200ms ease;
+ transition: opacity 200ms ease, transform 200ms ease;
}
.MovieEntry {
@@ -51,6 +46,8 @@
flex-direction: column;
cursor: pointer;
backdrop-filter: blur(10px);
+ border-radius: 0.5rem;
+ overflow: hidden;
}
.MovieEntry img {
@@ -58,6 +55,7 @@
box-shadow: 0px 0px 10px 8px rgb(32, 32, 32);
}
+
.MovieEntry p {
width: 160px;
overflow: hidden;
diff --git a/src/app/movies/styles/search.module.css b/src/app/movies/styles/search.module.css
index ea81e3f..d3b1a75 100644
--- a/src/app/movies/styles/search.module.css
+++ b/src/app/movies/styles/search.module.css
@@ -5,10 +5,12 @@
.InputContainer {
display: flex;
align-items: center;
- background-color: #121212;
- /* padding: 0.2rem; */
+ background-color: #1f1f1f;
+ padding: 0.4rem;
width: 40vw;
border-radius: 0.5rem;
+
+
}
.SearchIcon {
@@ -25,6 +27,7 @@
font-size: large;
color: white;
width: 100%;
+ font-size: 20px;
}
/* Search Results */
diff --git a/src/app/page.jsx b/src/app/page.jsx
index b2bcc5f..29c4857 100644
--- a/src/app/page.jsx
+++ b/src/app/page.jsx
@@ -1,54 +1,54 @@
-import styles from "./page.module.css";
-import Link from "next/link";
+import {
+ Card,
+ CardHeader,
+ CardBody,
+ Divider,
+ Link,
+ Image,
+} from "@nextui-org/react";
export default async function Home() {
- return (
- <main className={styles.newbg}>
- <div className={styles.content}>
- <div className={styles.contentContainer}>
- <Link
- href={"/anime"}
- title="Click here to get redirected to the anime webpage"
- >
- <div className={styles.anime}>
- <h2>Anime</h2>
- </div>
- </Link>
- <Link
- href={"/manga"}
- title="Click here to get redirected to the manga webpage"
- >
- <div className={styles.manga}>
- <h2>Manga</h2>
- </div>
- </Link>
- <Link
- href={"/kdrama"}
- title="Click here to get redirected to the kdrama webpage"
- >
- <div className={styles.kdrama}>
- <h2>Kdrama</h2>
- </div>
- </Link>
- <Link
- href={"/movies"}
- title="Click here to get redirected to the movie webpage"
- >
- <div className={styles.movies}>
- <h2>Movies</h2>
+ const homePageCards = (title, message, url) => {
+ return (
+ <Link href={`/${title}`} className="my-1">
+ <Card className="max-w-[400px] border-1 border-gray-500">
+ <CardHeader className="flex gap-3">
+ <Image
+ alt="nextui logo"
+ height={40}
+ width={40}
+ radius="sm"
+ src={url}
+ />
+ <div className="flex flex-col">
+ <p className="text-md">{title}</p>
+ <p className="text-small text-default-500">
+ dramalama/{title}
+ </p>
</div>
- </Link>
- <Link
- href={"/web-series"}
- title="Click here to get redirected to the series webpage"
- >
- <div className={styles.series}>
- <h2>Series</h2>
- </div>
- </Link>
- </div>
- </div>
- </main>
+ </CardHeader>
+ <Divider className="bg-slate-400" />
+ <CardBody>
+ <p>{message}</p>
+ </CardBody>
+ </Card>
+ </Link>
+ );
+ };
+
+ return (
+ <section className="h-screen w-screen flex flex-col items-center justify-center ">
+ {homePageCards(
+ "anime",
+ "Gravity of anime constant state of falling into the depths of happiness and joy",
+ "https://i.ibb.co/bLJzm3T/Whats-App-Image-2024-05-23-at-22-05-59-09933e5f.jpg"
+ )}
+ {homePageCards(
+ "kdrama",
+ "Infinity loop I'll watch just one k-drama, ok one more, ok wait...",
+ "https://ih1.redbubble.net/image.2656505524.2951/poster,504x498,f8f8f8-pad,600x600,f8f8f8.jpg"
+ )}
+ </section>
);
}
diff --git a/src/app/page.module.css b/src/app/page.module.css
index e0b9a60..6620bc9 100644
--- a/src/app/page.module.css
+++ b/src/app/page.module.css
@@ -1,154 +1,8 @@
-.newbg {
- background: rgb(37, 37, 37);
- background: radial-gradient(circle,
- rgb(41, 41, 41) 2%,
- rgb(12, 12, 12) 30%);
+.ScrollBarAdjuster::-webkit-scrollbar {
+ height: 0.4rem;
}
-.header {
- position: fixed;
- top: 0;
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- background-color: #1212129d;
- backdrop-filter: blur(10px);
- z-index: 999;
-}
-
-.left {
- color: white;
-}
-
-.left p {
- margin: 0;
- font-size: 1.5rem;
- padding: 1rem;
- color: transparent;
- background: linear-gradient(90deg,
- rgba(0, 151, 255, 0.9976365546218487) 3%,
- rgba(115, 154, 242, 1) 21%,
- rgba(255, 159, 224, 1) 40%,
- rgba(255, 194, 133, 1) 60%,
- rgba(245, 242, 81, 0.884) 80%,
- rgba(255, 179, 0, 0.842) 100%);
- background-size: 150% 50%;
- background-clip: text;
- animation: colorChange 3s linear infinite alternate-reverse;
-}
-
-@keyframes colorChange {
- 0% {
- background-position: 0 50%;
- }
-
- 100% {
- background-position: 100% 100%;
- }
-}
-
-.right {
- overflow: auto;
-}
-
-.right::-webkit-scrollbar {
- height: 0;
-}
-
-.right a {
- text-decoration: none;
- color: white;
- margin: 0 0.4rem 0 0.5rem;
- transition: opacity 400ms ease;
- font-size: 1rem;
-}
-
-.header:hover>.right a {
- opacity: 0.5;
-}
-
-.header:hover>.right a:hover {
- opacity: 1;
- cursor: pointer;
-}
-
-.footer {
- bottom: 0;
- width: 100%;
- position: fixed;
- background-color: #1212129a;
- backdrop-filter: blur(10px);
- color: white;
- font-family: "Poppins", serif;
- z-index: 999;
-}
-
-.footer p {
- text-align: center;
- font-size: 14px;
- margin: 0;
- padding: 0.2rem;
- font-family: "Poppins", serif;
-}
-
-.content {
- height: 100vh;
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.contentContainer {
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.contentContainer a {
- text-decoration: none;
- color: white;
-}
-
-.manga,
-.anime,
-.kdrama,
-.movies,
-.series {
- background-color: #121212e0;
- color: white;
- border-radius: 0.5rem;
- transition: opacity 200ms ease, transform 200ms ease;
- padding: 0.4rem 2rem;
- margin: 0.2rem 0.2rem 0 0.2rem;
- border-color: rgb(80, 80, 80);
- border-style: groove;
- border-width: 0.1rem;
- text-align: center;
-}
-
-.content:hover>.contentContainer div {
- opacity: 0.5;
-}
-
-.content:hover>.contentContainer div:hover {
- opacity: 1;
- cursor: pointer;
- transform: scale(0.95) rotateX(12deg) rotateY(-8deg);
-}
-
-@media screen and (max-width: 1024px) {
- .contentContainer {
- display: block;
- }
-
- .content:hover>.contentContainer div {
- opacity: 0.5;
- }
-
- .content:hover>.contentContainer div:hover {
- opacity: 1;
- cursor: pointer;
- transform: scale(0.95);
- }
+.ScrollBarAdjuster::-webkit-scrollbar-thumb {
+ background-color: rgb(95, 95, 95);
+ border-radius: 1rem;
} \ No newline at end of file
diff --git a/src/app/web-series/[id]/page.jsx b/src/app/web-series/[id]/page.jsx
index 63fcc3a..3d36883 100644
--- a/src/app/web-series/[id]/page.jsx
+++ b/src/app/web-series/[id]/page.jsx
@@ -13,7 +13,7 @@ const SeriesInfoPage = async ({ params }) => {
<main
style={{
// backgroundImage: `url(https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${data.backdrop_path})`,
- background: `linear-gradient(to bottom, rgba(0, 0, 0, 0) 70%, rgba(0, 0, 0, 1) 100%),
+ background: `linear-gradient(to bottom, rgba(0, 0, 0, 0) 70%, #121212 100%),
url(https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${data.backdrop_path}) no-repeat center center fixed`,
backgroundSize: "cover",
}}
diff --git a/src/app/web-series/components/HomePageModules.jsx b/src/app/web-series/components/HomePageModules.jsx
index 90af2f8..91d90bf 100644
--- a/src/app/web-series/components/HomePageModules.jsx
+++ b/src/app/web-series/components/HomePageModules.jsx
@@ -39,8 +39,8 @@ const Pages = async ({ type: type }) => {
<section className={styles.SeriesEntry}>
<Image
src={`https://sup-proxy.zephex0-f6c.workers.dev/api-content?url=https://image.tmdb.org/t/p/original${item.poster_path}`}
- width={167}
- height={267}
+ width={180}
+ height={300}
alt="Series Poster"
priority
/>
diff --git a/src/app/web-series/components/searchBar.jsx b/src/app/web-series/components/searchBar.jsx
index 81dd25f..42531bc 100644
--- a/src/app/web-series/components/searchBar.jsx
+++ b/src/app/web-series/components/searchBar.jsx
@@ -23,7 +23,7 @@ const SearchBar = () => {
<FaSearch
color="white"
className={styles.SearchIcon}
- size={17}
+ size={22}
/>
<input
placeholder="Enter series title here"
diff --git a/src/app/web-series/styles/info.module.css b/src/app/web-series/styles/info.module.css
index 8873b41..d60023d 100644
--- a/src/app/web-series/styles/info.module.css
+++ b/src/app/web-series/styles/info.module.css
@@ -1,5 +1,4 @@
.Main {
- min-height: 100vh;
margin-top: 60px;
}
diff --git a/src/app/web-series/styles/pages.module.css b/src/app/web-series/styles/pages.module.css
index 631f7db..8f15de2 100644
--- a/src/app/web-series/styles/pages.module.css
+++ b/src/app/web-series/styles/pages.module.css
@@ -1,10 +1,13 @@
.main h2 {
color: white;
+ /* margin: 0.4rem 0 0 0; */
+ text-transform: uppercase;
+ font-size: 30px;
}
.SeriesContainer {
display: grid;
- grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 0.5rem;
align-items: center;
margin: -1rem 0 0 0;
@@ -23,13 +26,13 @@
}
.SeriesEntry p {
- width: 160px;
+ width: 170px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: center;
margin: 0.3rem 0 0 0;
- font-family: "Atkinson Hyperlegible", serif;
+ font-family: "Lexend Deca", serif;
}
.SeriesEntry img {
diff --git a/src/app/web-series/styles/search.module.css b/src/app/web-series/styles/search.module.css
index 145a2aa..fdf46e3 100644
--- a/src/app/web-series/styles/search.module.css
+++ b/src/app/web-series/styles/search.module.css
@@ -1,9 +1,10 @@
.InputContainer {
display: flex;
align-items: center;
- background-color: #121212;
+ background-color: #1f1f1f;
width: 40vw;
border-radius: 0.5rem;
+ padding: 0.4rem;
}
.SearchIcon {
@@ -16,6 +17,7 @@
border: none;
padding: 0.4rem;
font-family: "Lexend Deca", serif;
+ font-size: 20px;
margin-left: 0.2rem;
font-size: large;
color: white;
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..ad61c55
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,21 @@
+// tailwind.config.js
+const { nextui } = require("@nextui-org/react");
+
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: [
+ // ...
+ "./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}",
+ "./app/**/*.{js,ts,jsx,tsx,mdx}",
+ "./pages/**/*.{js,ts,jsx,tsx,mdx}",
+ "./components/**/*.{js,ts,jsx,tsx,mdx}",
+
+ // Or if using `src` directory:
+ "./src/**/*.{js,ts,jsx,tsx,mdx}",
+ ],
+ theme: {
+ extend: {},
+ },
+ darkMode: "class",
+ plugins: [nextui()],
+};
diff --git a/utils/kdrama_urls.js b/utils/kdrama_urls.js
new file mode 100644
index 0000000..f671839
--- /dev/null
+++ b/utils/kdrama_urls.js
@@ -0,0 +1,15 @@
+const base_url_one = "https://dramacool-scraper.vercel.app";
+const base_url_two = "https://consumet-jade.vercel.app/movies/dramacool";
+const proxy_url = "https://sup-proxy.zephex0-f6c.workers.dev/api-json?url=";
+
+export const popular_dramas_url = `${base_url_one}/popular`;
+
+export const recent_drama_url = `${base_url_one}/recent`;
+
+export const search_drama_url = (title) => `${base_url_two}/${title}`;
+
+export const drama_info_url = (id) => `${base_url_two}/info?id=${id}`;
+
+export const videoURL = (episodeId, mediaId) => {
+ return `https://consumet-jade.vercel.app/movies/dramacool/watch?episodeId=${episodeId}&mediaId=${mediaId}`;
+};