diff --git a/i18n-config.ts b/i18n-config.ts index dc0ace05..9aec1fab 100644 --- a/i18n-config.ts +++ b/i18n-config.ts @@ -1,6 +1,21 @@ +export const localesDetailed = { + en: { + name: "English", + nativeName: "English", + country: "GB", + flag: "https://flagcdn.com/gb.svg", + }, + fr: { + name: "French", + nativeName: "Français", + country: "FR", + flag: "https://flagcdn.com/fr.svg", + }, +} as const + export const i18n = { defaultLocale: "en", - locales: ["en", "fr"], + locales: Object.keys(localesDetailed) as Array, } as const export type Locale = (typeof i18n)["locales"][number] diff --git a/next.config.mjs b/next.config.mjs index 61ebff5f..bd798832 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -12,6 +12,36 @@ const config = { { source: "/api/ping", destination: "/api/health" }, ] }, + redirects() { + //? Permanent redirects only in prod env + return [ + { source: "/signin", destination: "/sign-in", permanent: process.env.ENV === "production" ? true : false }, + { source: "/login", destination: "/sign-in", permanent: process.env.ENV === "production" ? true : false }, + { source: "/signup", destination: "/sign-up", permanent: process.env.ENV === "production" ? true : false }, + { source: "/register", destination: "/sign-up", permanent: process.env.ENV === "production" ? true : false }, + + { + source: "/:lang/signin", + destination: "/:lang/sign-in", + permanent: process.env.ENV === "production" ? true : false, + }, + { + source: "/:lang/login", + destination: "/:lang/sign-in", + permanent: process.env.ENV === "production" ? true : false, + }, + { + source: "/:lang/signup", + destination: "/:lang/sign-up", + permanent: process.env.ENV === "production" ? true : false, + }, + { + source: "/:lang/register", + destination: "/:lang/sign-up", + permanent: process.env.ENV === "production" ? true : false, + }, + ] + }, } export default config diff --git a/package-lock.json b/package-lock.json index 2f8855ca..63489318 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,15 +12,8 @@ "@formatjs/intl-localematcher": "^0.5.0", "@hookform/resolvers": "^3.2.0", "@next-auth/prisma-adapter": "^1.0.7", + "@nextui-org/react": "^2.2.9", "@prisma/client": "^5.6.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-alert-dialog": "^1.0.5", - "@radix-ui/react-collapsible": "^1.0.3", - "@radix-ui/react-dropdown-menu": "^2.0.5", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-select": "^2.0.0", - "@radix-ui/react-slot": "^1.0.2", - "@radix-ui/react-tooltip": "^1.0.6", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^11.0.0", "@semantic-release/git": "^10.0.1", @@ -42,11 +35,12 @@ "cron": "^3.0.0", "crypto-js": "^4.2.0", "dotenv": "^16.3.1", + "framer-motion": "^10.16.5", "ioredis": "^5.3.2", "lucide-react": "^0.292.0", "negotiator": "^0.6.3", "next": "^14.0.0", - "next-auth": "^4.23.1", + "next-auth": "^4.24.5", "next-themes": "^0.2.1", "nodemailer": "^6.9.5", "react": "^18.2.0", @@ -2450,39 +2444,41 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.0.tgz", - "integrity": "sha512-x5Ly1Eiyqt9aR38XzhraoWxgtQtvy3mVChWMZIr49XFyvIhNuqUxZKXBRoI5WiMRaaAZezCauJaEISu3z5y8sg==", + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz", + "integrity": "sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==", "dependencies": { - "@floating-ui/utils": "^0.1.0" + "@formatjs/intl-localematcher": "0.5.2", + "tslib": "^2.4.0" } }, - "node_modules/@floating-ui/dom": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.0.tgz", - "integrity": "sha512-9jPin5dTlcEN+nXzBRhdreCzlJBIYWeMXpJJ5VnO1l9dLcP7uQNPbmwmIoHpHpH6GPYMYtQA7GfkvsSj/CQPwg==", + "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": { - "@floating-ui/core": "^1.4.0", - "@floating-ui/utils": "^0.1.0" + "tslib": "^2.4.0" } }, - "node_modules/@floating-ui/react-dom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.1.tgz", - "integrity": "sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==", + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.3.tgz", + "integrity": "sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw==", "dependencies": { - "@floating-ui/dom": "^1.3.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "@formatjs/ecma402-abstract": "1.18.0", + "@formatjs/icu-skeleton-parser": "1.7.0", + "tslib": "^2.4.0" } }, - "node_modules/@floating-ui/utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.0.tgz", - "integrity": "sha512-ZSlli/beGZdvoqT3/Y9oOW79XSEpBfxt8UY6vjyWJW0B8d/M+MKlkQ3kBzLKDXaSsB84IVj6QntQfHLzesB4mA==" + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.7.0.tgz", + "integrity": "sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.0", + "tslib": "^2.4.0" + } }, "node_modules/@formatjs/intl-localematcher": { "version": "0.5.2", @@ -2533,6 +2529,39 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@internationalized/date": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.0.tgz", + "integrity": "sha512-nw0Q+oRkizBWMioseI8+2TeUPEyopJVz5YxoYVzR0W1v+2YytiYah7s/ot35F149q/xAg4F1gT/6eTd+tsUpFQ==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.1.tgz", + "integrity": "sha512-ZgHxf5HAPIaR0th+w0RUD62yF6vxitjlprSxmLJ1tam7FOekqRSDELMg4Cr/DdszG5YLsp5BG3FgHgqquQZbqw==", + "dependencies": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.4.0.tgz", + "integrity": "sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.1.tgz", + "integrity": "sha512-fvSr6YRoVPgONiVIUhgCmIAlifMVCeej/snPZVzbzRPxGpHl3o1GRe+d/qh92D8KhgOciruDUH8I5mjdfdjzfA==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@ioredis/commands": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", @@ -3466,202 +3495,1492 @@ "node": ">= 10" } }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", - "dev": true, - "optional": true, - "peer": true + "node_modules/@nextui-org/accordion": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.0.28.tgz", + "integrity": "sha512-WzD7sscL+4K0TFyUutTn1AhU0wcS68TqNCTNv7KgON6ODdwieydilMxAyXvwo3RgXeWG+8BbdxJC/6W+/iLBTg==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/divider": "2.0.25", + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-accordion": "2.0.2", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/button": "^3.8.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/tree": "^3.7.3", + "@react-types/accordion": "3.0.0-alpha.17", + "@react-types/shared": "^3.21.0" + }, + "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.15", + "resolved": "https://registry.npmjs.org/@nextui-org/aria-utils/-/aria-utils-2.0.15.tgz", + "integrity": "sha512-4M4jeJ/ghGaia9064yS+mEZ3sFPH80onmjNGWJZkkZDmUV4R88lNkqe/XYBK1tbxfl4Kxa8jc/ALsZkUkkvR5w==", + "dependencies": { + "@nextui-org/react-rsc-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system": "2.0.15", + "@react-aria/utils": "^3.21.1", + "@react-stately/collections": "^3.10.2", + "@react-types/overlays": "^3.8.3", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/autocomplete": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@nextui-org/autocomplete/-/autocomplete-2.0.9.tgz", + "integrity": "sha512-ViPXrZnP35k7LF+TBA4w8nqu0OEj9p1z9Rt7rwrACmY2VmDGY6h6a6nDCMjhuTVXptftRvzxfIPsIyzBYqxb0g==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/button": "2.0.26", + "@nextui-org/input": "2.1.16", + "@nextui-org/listbox": "2.1.16", + "@nextui-org/popover": "2.1.14", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/scroll-shadow": "2.1.12", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/spinner": "2.0.24", + "@nextui-org/use-aria-button": "2.0.6", + "@react-aria/combobox": "^3.7.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/combobox": "^3.7.1", + "@react-types/combobox": "^3.8.1", + "@react-types/shared": "^3.21.0" + }, + "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/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, + "node_modules/@nextui-org/avatar": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/avatar/-/avatar-2.0.24.tgz", + "integrity": "sha512-3QUn8v61iNvAYogUbEDVnhDjBK6WBxxFYLp95a0H52zN0p2LHXe+UNwdGZYFo5QNWx6CHGH3vh2AHlLLy3WFSQ==", "dependencies": { - "eslint-scope": "5.1.1" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-image": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1" + }, + "peerDependencies": { + "@nextui-org/system": ">=2.0.0", + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, + "node_modules/@nextui-org/badge": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/badge/-/badge-2.0.24.tgz", + "integrity": "sha512-FA3XgqEbyKWepMXqMZg7D+1IRf7flrb2LzFvTbkmsbvWQ4yYz1LqJXZ/HDmoCydvh2pOnc+1zPK3BpB7vGrrwA==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/@nextui-org/breadcrumbs": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/breadcrumbs/-/breadcrumbs-2.0.4.tgz", + "integrity": "sha512-SAE0+QRgA7vxUHPL65TKz3MRj7u2mbSwk8Eifkwo6hPcF0d34zv2QDupTGyphIjoGCSrQHFIq/CPAkXyaOXZxw==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@react-aria/breadcrumbs": "^3.5.7", + "@react-aria/focus": "^3.14.3", + "@react-aria/utils": "^3.21.1", + "@react-types/breadcrumbs": "^3.7.1", + "@react-types/shared": "^3.21.0" + }, + "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.26", + "resolved": "https://registry.npmjs.org/@nextui-org/button/-/button-2.0.26.tgz", + "integrity": "sha512-mDrSII1oneY4omwDdxUhl5oLa3AhoWCchwV/jt7egunnAFie32HbTqfFYGpLGiJw3JMMh3WDUthrI1islVTRKA==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/ripple": "2.0.24", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/spinner": "2.0.24", + "@nextui-org/use-aria-button": "2.0.6", + "@react-aria/button": "^3.8.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/button": "^3.9.0", + "@react-types/shared": "^3.21.0" + }, + "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/card": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/card/-/card-2.0.24.tgz", + "integrity": "sha512-16uAS0i6+EO+u8aqtmaCXatjovsyuTq51JwCLBlB67OldfgXoYcYl3GaE2VoZdEwxVu1G/qypDfXv29k46nZuA==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/ripple": "2.0.24", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-button": "2.0.6", + "@react-aria/button": "^3.8.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/shared": "^3.21.0" + }, + "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.25", + "resolved": "https://registry.npmjs.org/@nextui-org/checkbox/-/checkbox-2.0.25.tgz", + "integrity": "sha512-X6WkwPbZlDvioEcXF6HhKH21wD6OK+3+FSroKkzMPQLJrj2KYUIYGbiuw9rT9aCtdjbT+6HUCv+FA8/cBQr7cA==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/checkbox": "^3.11.2", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-stately/checkbox": "^3.5.1", + "@react-stately/toggle": "^3.6.3", + "@react-types/checkbox": "^3.5.2", + "@react-types/shared": "^3.21.0" + }, + "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.25", + "resolved": "https://registry.npmjs.org/@nextui-org/chip/-/chip-2.0.25.tgz", + "integrity": "sha512-hfVSaq5JWzGn97s3K2Ac/xOopHWelaUW3eus0O0wns/6+NCI0QUjgwNt2bAQSNvnE6vjvYLJTqGG/jFHyFJjOg==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/checkbox": "^3.5.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==", + "node_modules/@nextui-org/code": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/code/-/code-2.0.24.tgz", + "integrity": "sha512-Kw/uOQtdytRWY99zMQuGHqMAAGXWBAxHlyMMge1OCckpadCDfX6plPjqoS18SGM0orJ4fox+a1FM8VhnRQ2kQw==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" + "node_modules/@nextui-org/divider": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@nextui-org/divider/-/divider-2.0.25.tgz", + "integrity": "sha512-yEvHqYlhNBwmF68pfjJKdzC8gVQtL+txxD5COBGF9uFyfxA5hVw2D6GmYgOH514bxrFBuWOLcQX6gyljgcN3bA==", + "dependencies": { + "@nextui-org/react-rsc-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/dropdown": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@nextui-org/dropdown/-/dropdown-2.1.16.tgz", + "integrity": "sha512-3KINNvC7Cz+deQltCM8gaB7iJCfU4Qsp1fwnoy1wUEjeZhEtPOPR59oTyqT+gPaPIisP1+LLOfcqRl4jNQoVXw==", + "dependencies": { + "@nextui-org/menu": "2.0.17", + "@nextui-org/popover": "2.1.14", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/menu": "^3.11.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/menu": "^3.5.6", + "@react-types/menu": "^3.9.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/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@nextui-org/framer-transitions": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@nextui-org/framer-transitions/-/framer-transitions-2.0.15.tgz", + "integrity": "sha512-UlWMCAFdrq8wKrYFGwc+O4kFhKCkL4L9ZadBkP0PqjmfyAC2gA3ygRbNqtKhFMWeKbBAiC8qQ9aTBEA/+0r/EA==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system": "2.0.15" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "engines": { - "node": ">= 18" + "node_modules/@nextui-org/image": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/image/-/image-2.0.24.tgz", + "integrity": "sha512-bps5D5ki7PoLldb8wcJEf6C4EUFZm3PocLytNaGa7dNxFfaCOD78So+kq+K+0IRusK3yn94K8r31qMvpI3Gg2Q==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-image": "2.0.4" + }, + "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.16", + "resolved": "https://registry.npmjs.org/@nextui-org/input/-/input-2.1.16.tgz", + "integrity": "sha512-nUTlAvsXj5t88ycvQdICxf78/pko6Wznx2OomvYjb3E45eb77twQcWUDhydkJCWIh3b4AhGHSMM6GYxwWUgMDA==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/textfield": "^3.12.2", + "@react-aria/utils": "^3.21.1", + "@react-stately/utils": "^3.8.0", + "@react-types/shared": "^3.21.0", + "@react-types/textfield": "^3.8.1", + "react-textarea-autosize": "^8.5.2" + }, + "peerDependencies": { + "@nextui-org/system": ">=2.0.0", + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "node_modules/@nextui-org/kbd": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@nextui-org/kbd/-/kbd-2.0.25.tgz", + "integrity": "sha512-cYwbEjp/+/tjtOdmiRy2UHjfBhP3bqd5e+JFTa5sY1HotckUZrCintATyBcg9bPa3iSPUI44M6Cb9e0oAUUeMA==", "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11", + "@react-aria/utils": "^3.21.1" }, - "engines": { - "node": ">= 18" + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "node_modules/@nextui-org/link": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/@nextui-org/link/-/link-2.0.26.tgz", + "integrity": "sha512-X8zX3U5MWfiStOCd45oIZ2YKZG0GoUio6PcMFYjpOPsEG7wV58CuhUSxpyx3QTF8JavVSO/p/cl4Pc9pukVDUg==", "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-link": "2.0.15", + "@react-aria/focus": "^3.14.3", + "@react-aria/link": "^3.6.1", + "@react-aria/utils": "^3.21.1", + "@react-types/link": "^3.5.1" }, - "engines": { - "node": ">= 18" + "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.16", + "resolved": "https://registry.npmjs.org/@nextui-org/listbox/-/listbox-2.1.16.tgz", + "integrity": "sha512-5PmUCoHFgAr+1nAU3IlqPFTgyHo7zsTcNeja4wcErD/KseCF2h7Uk5OqUX5hQDN9B9fZuGjPrkG4yoK/6pqcUQ==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/divider": "2.0.25", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@nextui-org/use-is-mobile": "2.0.6", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/listbox": "^3.11.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/list": "^3.10.0", + "@react-types/menu": "^3.9.5", + "@react-types/shared": "^3.21.0" + }, + "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.17", + "resolved": "https://registry.npmjs.org/@nextui-org/menu/-/menu-2.0.17.tgz", + "integrity": "sha512-qr/BPDbBvg5tpAZZLkLx8eNnvYwJYM3Q72fmRYbzwmG3upNtdjln0QYxSwPXUz7RYqTKEFWc9JPxq2pgPM15Wg==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/divider": "2.0.25", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@nextui-org/use-is-mobile": "2.0.6", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/menu": "^3.11.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/menu": "^3.5.6", + "@react-stately/tree": "^3.7.3", + "@react-types/menu": "^3.9.5", + "@react-types/shared": "^3.21.0" + }, + "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.28", + "resolved": "https://registry.npmjs.org/@nextui-org/modal/-/modal-2.0.28.tgz", + "integrity": "sha512-unfP0EMF3FDg5CkRqou03s4/BopWbaBTeVIMZeA2A1WF5teHUOmpLdp44Z1KOoWB1RVMDVd4JeoauNHNhJMp0g==", + "dependencies": { + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-button": "2.0.6", + "@nextui-org/use-aria-modal-overlay": "2.0.6", + "@nextui-org/use-disclosure": "2.0.6", + "@react-aria/dialog": "^3.5.7", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/overlays": "^3.18.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/overlays": "^3.6.3", + "@react-types/overlays": "^3.8.3", + "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/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "node_modules/@nextui-org/modal/node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" }, "engines": { - "node": ">= 18" + "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/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + "node_modules/@nextui-org/navbar": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/@nextui-org/navbar/-/navbar-2.0.27.tgz", + "integrity": "sha512-iP4Pn4ItQkAW1nbu1Jmrh5l9pMVG43lDxq9rbx6DbLjLnnZOOrE6fURb8uN5NVy3ooV5dF02zKAoxlkE5fN/xw==", + "dependencies": { + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-toggle-button": "2.0.6", + "@nextui-org/use-scroll-position": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/overlays": "^3.18.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/toggle": "^3.6.3", + "@react-stately/utils": "^3.8.0", + "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/@octokit/plugin-paginate-rest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", - "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", + "node_modules/@nextui-org/navbar/node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", "dependencies": { - "@octokit/types": "^12.0.0" + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" }, "engines": { - "node": ">= 18" + "node": ">=10" }, "peerDependencies": { - "@octokit/core": ">=5" + "@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/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", - "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" - }, - "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", - "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "node_modules/@nextui-org/pagination": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/@nextui-org/pagination/-/pagination-2.0.26.tgz", + "integrity": "sha512-OVpkpXqUKRuMRIcYESBAL95d3pqZ17SKAyNINMiJ/DwWnrzJu/LXGmFwTuYRoBdqHFlm7guGqZbHmAkcS/Fgow==", "dependencies": { - "@octokit/openapi-types": "^19.0.0" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@nextui-org/use-pagination": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "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.14", + "resolved": "https://registry.npmjs.org/@nextui-org/popover/-/popover-2.1.14.tgz", + "integrity": "sha512-fqqktFQ/chIBS9Y3MghL6KX6qAy3hodtXUDchnxLa1GL+oi6TCBLUjo+wgI5EMJrTTbqo/eFLui/Ks00JfCj+A==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/button": "2.0.26", + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-button": "2.0.6", + "@react-aria/dialog": "^3.5.7", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/overlays": "^3.18.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/overlays": "^3.6.3", + "@react-types/button": "^3.9.0", + "@react-types/overlays": "^3.8.3", + "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/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "node_modules/@nextui-org/popover/node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "bottleneck": "^2.15.3" + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" }, "engines": { - "node": ">= 18" + "node": ">=10" }, "peerDependencies": { - "@octokit/core": ">=5" + "@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/@octokit/plugin-throttling": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.0.0.tgz", - "integrity": "sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==", + "node_modules/@nextui-org/progress": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/progress/-/progress-2.0.24.tgz", + "integrity": "sha512-RPVsFCF8COFClS/8PqEepzryhDFtIcJGQLu/P+qAr7jIDlXizXaBDrp0X34GVtQsapNeE9ExxX9Kt+QIspuHHQ==", "dependencies": { - "@octokit/types": "^12.0.0", - "bottleneck": "^2.15.3" + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-is-mounted": "2.0.4", + "@react-aria/i18n": "^3.8.4", + "@react-aria/progress": "^3.4.7", + "@react-aria/utils": "^3.21.1", + "@react-types/progress": "^3.5.0" }, - "engines": { - "node": ">= 18" + "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.25", + "resolved": "https://registry.npmjs.org/@nextui-org/radio/-/radio-2.0.25.tgz", + "integrity": "sha512-vRX0ppM5Tlzu0HoqTG6LdmQnMjk8RRl66BH1+QaosvZRXA1iIdA3BduqQYqn5ZZHBBlJ2u9QzaD3lTAlWIHvNg==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/radio": "^3.8.2", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-stately/radio": "^3.9.1", + "@react-types/radio": "^3.5.2", + "@react-types/shared": "^3.21.0" }, "peerDependencies": { - "@octokit/core": "^5.0.0" + "@nextui-org/system": ">=2.0.0", + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/react": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@nextui-org/react/-/react-2.2.9.tgz", + "integrity": "sha512-QHkUQTxI9sYoVjrvTpYm5K68pMDRqD13+DVzdsrkJuETGhbvE2c2CCGc4on9EwXC3JsOxuP/OyqaAmOIuHhYkA==", + "dependencies": { + "@nextui-org/accordion": "2.0.28", + "@nextui-org/autocomplete": "2.0.9", + "@nextui-org/avatar": "2.0.24", + "@nextui-org/badge": "2.0.24", + "@nextui-org/breadcrumbs": "2.0.4", + "@nextui-org/button": "2.0.26", + "@nextui-org/card": "2.0.24", + "@nextui-org/checkbox": "2.0.25", + "@nextui-org/chip": "2.0.25", + "@nextui-org/code": "2.0.24", + "@nextui-org/divider": "2.0.25", + "@nextui-org/dropdown": "2.1.16", + "@nextui-org/image": "2.0.24", + "@nextui-org/input": "2.1.16", + "@nextui-org/kbd": "2.0.25", + "@nextui-org/link": "2.0.26", + "@nextui-org/listbox": "2.1.16", + "@nextui-org/menu": "2.0.17", + "@nextui-org/modal": "2.0.28", + "@nextui-org/navbar": "2.0.27", + "@nextui-org/pagination": "2.0.26", + "@nextui-org/popover": "2.1.14", + "@nextui-org/progress": "2.0.24", + "@nextui-org/radio": "2.0.25", + "@nextui-org/ripple": "2.0.24", + "@nextui-org/scroll-shadow": "2.1.12", + "@nextui-org/select": "2.1.20", + "@nextui-org/skeleton": "2.0.24", + "@nextui-org/slider": "2.2.5", + "@nextui-org/snippet": "2.0.30", + "@nextui-org/spacer": "2.0.24", + "@nextui-org/spinner": "2.0.24", + "@nextui-org/switch": "2.0.25", + "@nextui-org/system": "2.0.15", + "@nextui-org/table": "2.0.28", + "@nextui-org/tabs": "2.0.26", + "@nextui-org/theme": "2.1.17", + "@nextui-org/tooltip": "2.0.29", + "@nextui-org/user": "2.0.25", + "@react-aria/visually-hidden": "^3.8.6" + }, + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" } }, - "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", - "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" + "node_modules/@nextui-org/react-rsc-utils": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@nextui-org/react-rsc-utils/-/react-rsc-utils-2.0.10.tgz", + "integrity": "sha512-LNePDEThUF9PAbJW4T8k7EgSfqwlvGku5fIqJ1IA9+OpVy5LqhrUQehjvgXe63N1RupC7Pt+XvaaxkGu9U2FiQ==" }, - "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", - "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "node_modules/@nextui-org/react-utils": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@nextui-org/react-utils/-/react-utils-2.0.10.tgz", + "integrity": "sha512-bcA+k7ZdcgcK+r/8nrCtbdgHo0SD6jicbazWIokknFwjb97JQ7ooaMwxnLt5E5sswCAv0XeLwybOmrgm7JA5TA==", "dependencies": { - "@octokit/openapi-types": "^19.0.0" + "@nextui-org/react-rsc-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/ripple": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/ripple/-/ripple-2.0.24.tgz", + "integrity": "sha512-PCvAk9ErhmPX46VRmhsg8yMxw3Qd9LY7BDkRRfIF8KftgRDyOpG2vV8DxvSOxQu1/aqBWkkHNUuEjM/EvSEung==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4" + }, + "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.12", + "resolved": "https://registry.npmjs.org/@nextui-org/scroll-shadow/-/scroll-shadow-2.1.12.tgz", + "integrity": "sha512-uxT8D+WCWeBy4xaFDfqVpBgjjHZUwydXsX5HhbzZCBir/1eRG5GMnUES3w98DSwcUVadG64gAVsyGW4HmSZw1Q==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-data-scroll-overflow": "2.1.2" + }, + "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.20", + "resolved": "https://registry.npmjs.org/@nextui-org/select/-/select-2.1.20.tgz", + "integrity": "sha512-GCO9uzyYnFIdJTqIe6aDe2NnYlclcdYfZnECFAze/R2MW0jpoysk5ysGBDjVDmZis6tLu+BOFXJbIlYEi+LoUQ==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/listbox": "2.1.16", + "@nextui-org/popover": "2.1.14", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/scroll-shadow": "2.1.12", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/spinner": "2.0.24", + "@nextui-org/use-aria-button": "2.0.6", + "@nextui-org/use-aria-multiselect": "2.1.3", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-types/shared": "^3.21.0" + }, + "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.6", + "resolved": "https://registry.npmjs.org/@nextui-org/shared-icons/-/shared-icons-2.0.6.tgz", + "integrity": "sha512-Mw5utPJAclFaeKAZowznEgabI5gdhXrW0iMaMA18Y4zcZRTidAc0WFeGYUlX876NxYLPc1Zk4bZUhQvMe+7uWg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/shared-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/shared-utils/-/shared-utils-2.0.4.tgz", + "integrity": "sha512-Ms7A6UCvo/SZt/9Nmb7cZwHe9fZFw+EPsieTnC1vtpvDNCasxrTB0hj9VWFoYfWOaCzzqxl1AL9maIz/gMvckQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/skeleton": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/skeleton/-/skeleton-2.0.24.tgz", + "integrity": "sha512-bsb+lYugSfQV3RHrEHLbHhkkeslaxybnnT4z485Y/GBYTENOiHIOnWFWntfxCbjZ6vCewGlfgnphj6zeqlk20g==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11" + }, + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/slider": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@nextui-org/slider/-/slider-2.2.5.tgz", + "integrity": "sha512-dC6HHMmtn2WvxDmbY/Dq51XJjQ7cAnjZsuYVIvhwIiCLDG8QnEIhmYN0DQp/6oeZsCHnyMHC4DmtgOiJL0eXrQ==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/tooltip": "2.0.29", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/i18n": "^3.8.4", + "@react-aria/interactions": "^3.19.1", + "@react-aria/slider": "^3.7.2", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-stately/slider": "^3.4.4" + }, + "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.30", + "resolved": "https://registry.npmjs.org/@nextui-org/snippet/-/snippet-2.0.30.tgz", + "integrity": "sha512-8hKxqKpbJIMqFVedzYj90T4td+TkWdOdyYD9+VjywMdezAjsWdr8tqQj7boaMFjVNVSG+Pnw55Pgg/vkpc21aw==", + "dependencies": { + "@nextui-org/button": "2.0.26", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/tooltip": "2.0.29", + "@nextui-org/use-clipboard": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/utils": "^3.21.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/spacer": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/spacer/-/spacer-2.0.24.tgz", + "integrity": "sha512-bLnhPRnoyHQXhLneHjbRqZNxJWMFOBYOZkuX83uy59/FFUY07BcoNsb2s80tN3GoVxsaZ2jB6NxxVbaCJwoPog==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11" + }, + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/spinner": { + "version": "2.0.24", + "resolved": "https://registry.npmjs.org/@nextui-org/spinner/-/spinner-2.0.24.tgz", + "integrity": "sha512-s/q2FmxGPNEqA0ifWfc7xgs5a5D9c3xKkxL3n7jDoRnWo0NPlRsa6QRJGiSL5dHNoUqspRf/lNw2V94Bxk86Pg==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/system-rsc": "2.0.11" + }, + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/switch": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@nextui-org/switch/-/switch-2.0.25.tgz", + "integrity": "sha512-U7g68eReMSkgG0bBOSdzRLK+npv422YK6WYHpYOSkEBDqGwQ7LCeMRQreT/KxN0QFxIKmafebdLHAbuKc/X+5Q==", + "dependencies": { + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/switch": "^3.5.6", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-stately/toggle": "^3.6.3", + "@react-types/shared": "^3.21.0" + }, + "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.0.15", + "resolved": "https://registry.npmjs.org/@nextui-org/system/-/system-2.0.15.tgz", + "integrity": "sha512-WFDq+Rx6D+gmK1YGEG2RBARPK9EOYonQDt5Tq2tUchzOOqj3kXXcM5Z0F3fudM59eIncLa/tX/ApJSTLry+hsw==", + "dependencies": { + "@nextui-org/system-rsc": "2.0.11", + "@react-aria/i18n": "^3.8.4", + "@react-aria/overlays": "^3.18.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/utils": "^3.8.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/system-rsc": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@nextui-org/system-rsc/-/system-rsc-2.0.11.tgz", + "integrity": "sha512-1QqZ+GM7Ii0rsfSHXS6BBjzKOoLIWwb72nm4h4WgjlMXbRKLZcCQasRHVe5HMSBMvN0JUo7qyGExchfDFl/Ubw==", + "dependencies": { + "clsx": "^1.2.1" + }, + "peerDependencies": { + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "tailwind-variants": ">=0.1.13" + } + }, + "node_modules/@nextui-org/system-rsc/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/@nextui-org/table": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/@nextui-org/table/-/table-2.0.28.tgz", + "integrity": "sha512-qH/7jdV5+tiMDDvBfMrUZN4jamds0FsL5Ak+ighoKIUYRFTSXOroi+63ZzzAh/mZAsUALCPPcfbXt4r4aBFDzg==", + "dependencies": { + "@nextui-org/checkbox": "2.0.25", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-icons": "2.0.6", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/spacer": "2.0.24", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/table": "^3.13.1", + "@react-aria/utils": "^3.21.1", + "@react-aria/visually-hidden": "^3.8.6", + "@react-stately/table": "^3.11.2", + "@react-stately/virtualizer": "^3.6.4", + "@react-types/grid": "^3.2.2", + "@react-types/table": "^3.9.0" + }, + "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.26", + "resolved": "https://registry.npmjs.org/@nextui-org/tabs/-/tabs-2.0.26.tgz", + "integrity": "sha512-GjERgBYUAY1KD4GqNVy0cRi6GyQnf62q0ddcN4je3sEM6rsq3PygEXhkN5pxxFPacoYM/UE6rBswHSKlbjJjgw==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@nextui-org/use-is-mounted": "2.0.4", + "@nextui-org/use-update-effect": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/tabs": "^3.8.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/tabs": "^3.6.1", + "@react-types/shared": "^3.21.0", + "@react-types/tabs": "^3.3.3", + "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.1.17", + "resolved": "https://registry.npmjs.org/@nextui-org/theme/-/theme-2.1.17.tgz", + "integrity": "sha512-/WeHcMrAcWPGsEVn9M9TnvxKkaYkCocBH9JrDYCEFQoJgleUzHd4nVk7MWtpSOYJXLUzUMY1M9AqAK3jBkw+5g==", + "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.18" + }, + "peerDependencies": { + "tailwindcss": "*" + } + }, + "node_modules/@nextui-org/tooltip": { + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/@nextui-org/tooltip/-/tooltip-2.0.29.tgz", + "integrity": "sha512-LaFyS5bXhcZFXP9rnh6pTKsYX6siWjzEe5z72FIOyAV2yvv2yhkRiO/mEHKI8moo+/tScW/6muFXsvbEalPefg==", + "dependencies": { + "@nextui-org/aria-utils": "2.0.15", + "@nextui-org/framer-transitions": "2.0.15", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@react-aria/interactions": "^3.19.1", + "@react-aria/overlays": "^3.18.1", + "@react-aria/tooltip": "^3.6.4", + "@react-aria/utils": "^3.21.1", + "@react-stately/tooltip": "^3.4.5", + "@react-types/overlays": "^3.8.3", + "@react-types/tooltip": "^3.4.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/use-aria-accordion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-accordion/-/use-aria-accordion-2.0.2.tgz", + "integrity": "sha512-ebYr4CdvWifuTM/yyhQLKCa7aUqbVrWyR0SB6VNCGDID/kvRUW52puWnY9k24xdwY0cKbW3JRciKtQkrokRQwg==", + "dependencies": { + "@react-aria/button": "^3.8.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/selection": "^3.17.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/tree": "^3.7.3", + "@react-types/accordion": "3.0.0-alpha.17", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-button": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-button/-/use-aria-button-2.0.6.tgz", + "integrity": "sha512-38DZ3FK/oPZ3sppfM5EtgJ4DITOajNwSKkAMePBmuSZl+bsW7peP8g5JNd9uPOEz3edCOppT60AQSICsYiH3cg==", + "dependencies": { + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/button": "^3.9.0", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-link": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-link/-/use-aria-link-2.0.15.tgz", + "integrity": "sha512-znzOeTZ10o3O5F2nihi8BR8rAhRHgrRWcEBovV7OqJeFzvTQwsHl9/xy45zBfwJQksBtfcBfQf+GEHXeDwfigA==", + "dependencies": { + "@nextui-org/use-aria-press": "2.0.1", + "@react-aria/focus": "^3.14.3", + "@react-aria/interactions": "^3.19.1", + "@react-aria/utils": "^3.21.1", + "@react-types/link": "^3.5.1", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-modal-overlay": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-modal-overlay/-/use-aria-modal-overlay-2.0.6.tgz", + "integrity": "sha512-JfhXvH2RObWpHeLmxdIBDPF2SDzV4SqBvEh01yRvg/EuZ3HDRfCnTDh+5HD0ziUVdk/kWuy/hZLX59sMX7QHWA==", + "dependencies": { + "@react-aria/overlays": "^3.18.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/overlays": "^3.6.3", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-multiselect": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-multiselect/-/use-aria-multiselect-2.1.3.tgz", + "integrity": "sha512-OM1lj2jdl0Q2Zme/ds6qyT4IIGsBJSGNjvkM6pEnpdyoej/HwTKsSEpEFTDGJ5t9J9DWWCEt3hz0uJxOPnZ66Q==", + "dependencies": { + "@react-aria/i18n": "^3.8.4", + "@react-aria/interactions": "^3.19.1", + "@react-aria/label": "^3.7.2", + "@react-aria/listbox": "^3.11.1", + "@react-aria/menu": "^3.11.1", + "@react-aria/selection": "^3.17.1", + "@react-aria/utils": "^3.21.1", + "@react-stately/list": "^3.10.0", + "@react-stately/menu": "^3.5.6", + "@react-types/button": "^3.9.0", + "@react-types/overlays": "^3.8.3", + "@react-types/select": "^3.8.4", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-press": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-press/-/use-aria-press-2.0.1.tgz", + "integrity": "sha512-T3MjHH5TU9qnkf872GmhcfQK16ITMmMW9zir6xsSsz0w6ay9Y0XTSPrI2zRL6ociFyfJjP840XCLtSx6VBfEBQ==", + "dependencies": { + "@react-aria/interactions": "^3.19.1", + "@react-aria/ssr": "^3.8.0", + "@react-aria/utils": "^3.21.1", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-aria-toggle-button": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nextui-org/use-aria-toggle-button/-/use-aria-toggle-button-2.0.6.tgz", + "integrity": "sha512-6Sjp7a0HQjmboLKNZu9AtZmyHz8+vhqcDwJDYTZjrrna0udxEXG+6C14YZzQxoJcvuaMimr5E8Aq0AxyRAr0MQ==", + "dependencies": { + "@nextui-org/use-aria-button": "2.0.6", + "@react-aria/utils": "^3.21.1", + "@react-stately/toggle": "^3.6.3", + "@react-types/button": "^3.9.0", + "@react-types/shared": "^3.21.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-callback-ref": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-callback-ref/-/use-callback-ref-2.0.4.tgz", + "integrity": "sha512-GF50SzOFU/R0gQT1TmjbEUiS8CQ87qiV5Rp/TD5pqys1xprVgGLUUNQzlh+YDS2JHNu5FGlZc4sJKhtf2xF5aw==", + "dependencies": { + "@nextui-org/use-safe-layout-effect": "2.0.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-clipboard": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-clipboard/-/use-clipboard-2.0.4.tgz", + "integrity": "sha512-rMcaX0QsolOJ1BQbp1T/FVsSPn2m0Ss4Z+bbdS7eM6EFKtJdVJWlpbrST0/kR2UcW1KWeK27NYmtNPF5+hgZMA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-data-scroll-overflow": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nextui-org/use-data-scroll-overflow/-/use-data-scroll-overflow-2.1.2.tgz", + "integrity": "sha512-3h9QX+dWkfqnqciQc2KeeR67e77hobjefNHGBTDuB4LhJSJ180ToZH09SQNHaUmKRLTU/RABjGWXxdbORI0r6g==", + "dependencies": { + "@nextui-org/shared-utils": "2.0.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-disclosure": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nextui-org/use-disclosure/-/use-disclosure-2.0.6.tgz", + "integrity": "sha512-pazzLsAGKjUD4cMVySTivItmIgpsfIf4baP/02K0Xc8tbFAH4K1n7cUnEEjs+MTXy1Bprvz3pfAHDGZRDI1yYg==", + "dependencies": { + "@nextui-org/use-callback-ref": "2.0.4", + "@react-aria/utils": "^3.21.1", + "@react-stately/utils": "^3.8.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-image": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-image/-/use-image-2.0.4.tgz", + "integrity": "sha512-tomOkrhlhTA45qA/MLh1YmiWVGgJ2KeM0qBSLP1ikVcppc/e9UtkIJjHIGdNCnHZTjoPEh53HzyJeUMlYUM9uw==", + "dependencies": { + "@nextui-org/use-safe-layout-effect": "2.0.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-is-mobile": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mobile/-/use-is-mobile-2.0.6.tgz", + "integrity": "sha512-HeglWUoq6Ln8P5n6s1SZvBRatLYMKsiXQM7Mk2l+6jFByzZh3VWtZ05xmuX8te/1rGmeUxjeXtW6x+F7/f/JoA==", + "dependencies": { + "@react-aria/ssr": "^3.8.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-is-mounted": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-is-mounted/-/use-is-mounted-2.0.4.tgz", + "integrity": "sha512-NSQwQjg8+k02GVov9cDwtAdop1Cr90eDgB0MAdvu7QCMgfBZjy88IdQnx3Yo7bG4wP45xC0vLjqDBanaK+11hw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-pagination": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-pagination/-/use-pagination-2.0.4.tgz", + "integrity": "sha512-EETHzhh+LW8u2bm93LkUABbu0pIoWBCeY8hmvgjhhNMkILuwZNGYnp9tdF2rcS2P4KDlHQkIQcoiOGrGMqBUaQ==", + "dependencies": { + "@nextui-org/shared-utils": "2.0.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-safe-layout-effect": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-safe-layout-effect/-/use-safe-layout-effect-2.0.4.tgz", + "integrity": "sha512-K7ppEhTfzdVOzbgKaNFEBi4HwRfQ8j+kRBQqsU5yo8bSM+5uv8OUy/mjpEf4i02PUDIBmsgJC4En9S537DXrwg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-scroll-position": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-scroll-position/-/use-scroll-position-2.0.4.tgz", + "integrity": "sha512-5ugiHqQ1OptBmujOsJGigbUt/rQ826+8RKYSpBp1uax1eF7TlpigXt6mS1PDsJIyEauHi8rjH5B3weOn1//tug==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/use-update-effect": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nextui-org/use-update-effect/-/use-update-effect-2.0.4.tgz", + "integrity": "sha512-HycSl9Eopmy3ypZQxXVR7eov2D0q0zcgldgbIPvlKExbj8OInaIImc9zLMI9oQgfmg/YdvLeFSrfwc5BPrIvlg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@nextui-org/user": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@nextui-org/user/-/user-2.0.25.tgz", + "integrity": "sha512-Ykh65O0ynJBlstlZowM8KrX6zv/VLfDgYX892Dk0goLwU8gcSILPZE7yGIBZi1XsNN7mE3dmTp/APLFDbkzzXw==", + "dependencies": { + "@nextui-org/avatar": "2.0.24", + "@nextui-org/react-utils": "2.0.10", + "@nextui-org/shared-utils": "2.0.4", + "@react-aria/focus": "^3.14.3", + "@react-aria/utils": "^3.21.1" + }, + "peerDependencies": { + "@nextui-org/system": ">=2.0.0", + "@nextui-org/theme": ">=2.1.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "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==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", + "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.0.0", + "@octokit/request": "^8.0.2", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", + "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "dependencies": { + "@octokit/types": "^11.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", + "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "dependencies": { + "@octokit/request": "^8.0.1", + "@octokit/types": "^11.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", + "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", + "dependencies": { + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", + "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "dependencies": { + "@octokit/openapi-types": "^19.0.0" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", + "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^11.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.0.0.tgz", + "integrity": "sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==", + "dependencies": { + "@octokit/types": "^12.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5.0.0" + } + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", + "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", + "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "dependencies": { + "@octokit/openapi-types": "^19.0.0" } }, "node_modules/@octokit/request": { @@ -3734,897 +5053,1147 @@ "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://opencollective.com/unts" + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@prisma/client": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz", + "integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz", + "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==", + "devOptional": true, + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz", + "integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw==" + }, + "node_modules/@react-aria/breadcrumbs": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.8.tgz", + "integrity": "sha512-jeek23igeqXct7S3ShW2jtFUc5g3fS9ZEBZkF64FWBrwfCiaZwb8TcKkK/xFw36/q5mxEt+seNiqnNzvsICJuQ==", + "dependencies": { + "@react-aria/i18n": "^3.9.0", + "@react-aria/link": "^3.6.2", + "@react-aria/utils": "^3.22.0", + "@react-types/breadcrumbs": "^3.7.2", + "@react-types/shared": "^3.22.0", + "@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.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.9.0.tgz", + "integrity": "sha512-Jri4OCN+4YmpJDPNQvk1DJoskKD9sdTxZaWWWJdAwoSIunZk3IEBXVvRfKzsEAVtI+UJN25zC2kyjXbVPS2XAA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/toggle": "^3.7.0", + "@react-types/button": "^3.9.1", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/checkbox": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.12.0.tgz", + "integrity": "sha512-CyFZoI+z9hhyB3wb7IBsZxE30vXfYO2vSyET16zlkJ4qiFMqMiVLE4ekq034MHltCdpAczgP5yfKgNnJOmj7vQ==", + "dependencies": { + "@react-aria/form": "^3.0.0", + "@react-aria/label": "^3.7.3", + "@react-aria/toggle": "^3.9.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/checkbox": "^3.6.0", + "@react-stately/form": "^3.0.0", + "@react-stately/toggle": "^3.7.0", + "@react-types/checkbox": "^3.6.0", + "@react-types/shared": "^3.22.0", + "@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.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.8.0.tgz", + "integrity": "sha512-lInzzZrH4vFlxmvDpXgQRkkREm7YIx258IRpQqll8Bny2vKMmZoF06zWMbcHP0CjFqYxExQeTjSYx0OTRRxkCQ==", + "dependencies": { + "@react-aria/i18n": "^3.9.0", + "@react-aria/listbox": "^3.11.2", + "@react-aria/live-announcer": "^3.3.1", + "@react-aria/menu": "^3.11.2", + "@react-aria/overlays": "^3.19.0", + "@react-aria/selection": "^3.17.2", + "@react-aria/textfield": "^3.13.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/collections": "^3.10.3", + "@react-stately/combobox": "^3.8.0", + "@react-stately/form": "^3.0.0", + "@react-types/button": "^3.9.1", + "@react-types/combobox": "^3.9.0", + "@react-types/shared": "^3.22.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/dialog": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.8.tgz", + "integrity": "sha512-KIc1FORdHhZ3bWom4qHO0hmlL4e5Hup6N25EY8HP5I7Ftv9EBBGaO5grtxZ2fX8kiCJNI4y+k67ZZ71wKJvMiA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/overlays": "^3.19.0", + "@react-aria/utils": "^3.22.0", + "@react-types/dialog": "^3.5.7", + "@react-types/shared": "^3.22.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/focus": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.15.0.tgz", + "integrity": "sha512-nnxRyfqHuAjRwdQ4BpQyZPtGFKZmRU6cnaIb3pqWFCqEyJQensV7MA3TJ4Jhadq67cy1Ji5SYSlr1duBwjoYvw==", + "dependencies": { + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/focus/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/@react-aria/form": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.0.tgz", + "integrity": "sha512-APeGph9oTO8nro4ZObuy1hk+0hpF/ji9O3odPGhLkzP/HvW2J7NI9pjKJOINfgtYr2yvVUZf/MbTMxPwtAxhaQ==", + "dependencies": { + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/form": "^3.0.0", + "@react-types/shared": "^3.22.0", + "@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.8.5", + "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.8.5.tgz", + "integrity": "sha512-0p+Bbs9rpQeOy8b75DamlzVPKylBoe/z0XwkeeTChHP2TK3TwPXh6J5EmisQx6K8zsb3iZULQRcP4QibvnMbrg==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/live-announcer": "^3.3.1", + "@react-aria/selection": "^3.17.2", + "@react-aria/utils": "^3.22.0", + "@react-stately/collections": "^3.10.3", + "@react-stately/grid": "^3.8.3", + "@react-stately/selection": "^3.14.1", + "@react-stately/virtualizer": "^3.6.5", + "@react-types/checkbox": "^3.6.0", + "@react-types/grid": "^3.2.3", + "@react-types/shared": "^3.22.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/i18n": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.9.0.tgz", + "integrity": "sha512-ebGP/sVG0ZtNF4RNFzs/W01tl7waYpBManh1kKWgA4roDPFt/odkgkDBzKGl+ggBb7TQRHsfUFHuqKsrsMy9TA==", + "dependencies": { + "@internationalized/date": "^3.5.0", + "@internationalized/message": "^3.1.1", + "@internationalized/number": "^3.4.0", + "@internationalized/string": "^3.1.1", + "@react-aria/ssr": "^3.9.0", + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@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.20.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.20.0.tgz", + "integrity": "sha512-JCCEyK2Nb4mEHucrgmqhTHTNAEqhsiM07jJmmY22eikxnCQnsEfdwXyg9cgZLG79D5V7jyqVRqOp2OsG7Qx7kQ==", + "dependencies": { + "@react-aria/ssr": "^3.9.0", + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@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.3", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.3.tgz", + "integrity": "sha512-v1zuqbpYyYaPjrBWpceGjMpwP4ne6fLoOXdoIZoKLux2jkAcyIF2kIJFiyYoPQYQJWGRNo7q1oSwamxmng4xJw==", + "dependencies": { + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@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.6.2", + "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.6.2.tgz", + "integrity": "sha512-v9gXgQ3Gev0JOlg2MAXcubDMgX+0BlJ+hTyFYFMuN/4jVBlAe426WKbjg+6MMzxwukWg9C3Q08JzqdFTi4cBng==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-types/link": "^3.5.2", + "@react-types/shared": "^3.22.0", + "@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.11.2", + "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.11.2.tgz", + "integrity": "sha512-FXdoqYLUTJn16OxodyS518PIcwzFkCfW5bxQepoy88NDMGtqp6u8fvEPpAoZbomvw/pV9MuEaMAw9qLyfkD4DA==", + "dependencies": { + "@react-aria/interactions": "^3.20.0", + "@react-aria/label": "^3.7.3", + "@react-aria/selection": "^3.17.2", + "@react-aria/utils": "^3.22.0", + "@react-stately/collections": "^3.10.3", + "@react-stately/list": "^3.10.1", + "@react-types/listbox": "^3.4.6", + "@react-types/shared": "^3.22.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/live-announcer": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.1.tgz", + "integrity": "sha512-hsc77U7S16trM86d+peqJCOCQ7/smO1cybgdpOuzXyiwcHQw8RQ4GrXrS37P4Ux/44E9nMZkOwATQRT2aK8+Ew==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-aria/menu": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.11.2.tgz", + "integrity": "sha512-I4R5FOvRtwIQW+0naXav5giZBp935X2tXB2xBg/cSAYDXgfLmFPLHkyPbO77hR6FwazfFfJoKdn0pVcRox3lrQ==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/overlays": "^3.19.0", + "@react-aria/selection": "^3.17.2", + "@react-aria/utils": "^3.22.0", + "@react-stately/collections": "^3.10.3", + "@react-stately/menu": "^3.5.7", + "@react-stately/tree": "^3.7.4", + "@react-types/button": "^3.9.1", + "@react-types/menu": "^3.9.6", + "@react-types/shared": "^3.22.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/overlays": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.19.0.tgz", + "integrity": "sha512-VN5GkB8+uZ2cfXljBtkqmrsAhBdGoj4un/agH0Qyihi2dazsMeafczSNnqzbpVgB4Zt2UHPJUkKwihgzXRxJJA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/ssr": "^3.9.0", + "@react-aria/utils": "^3.22.0", + "@react-aria/visually-hidden": "^3.8.7", + "@react-stately/overlays": "^3.6.4", + "@react-types/button": "^3.9.1", + "@react-types/overlays": "^3.8.4", + "@react-types/shared": "^3.22.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/progress": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.8.tgz", + "integrity": "sha512-Nah3aj5BNRa0+urQZimzb0vuKQK7lsc8BrUwJuHTwGRBSWUjCADExrJYdhDIR/nLUV2TCmAQl+GJtTgbEEj0DQ==", + "dependencies": { + "@react-aria/i18n": "^3.9.0", + "@react-aria/label": "^3.7.3", + "@react-aria/utils": "^3.22.0", + "@react-types/progress": "^3.5.1", + "@react-types/shared": "^3.22.0", + "@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.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.9.0.tgz", + "integrity": "sha512-kr3+OQ1YU/3mURZfCsYaQmJ/c15qOm8uScaDRC39qz97bLNASakQqMImIaS+GluPKx1PEW3y2ErAgLplH28zZw==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/form": "^3.0.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/label": "^3.7.3", + "@react-aria/utils": "^3.22.0", + "@react-stately/radio": "^3.10.0", + "@react-types/radio": "^3.6.0", + "@react-types/shared": "^3.22.0", + "@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.17.2", + "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.17.2.tgz", + "integrity": "sha512-AXXY3eOIWnITabMn6c0bpLPXkSX7040LOZU+7pQgtZJwDdZorLuKw4i7WS5i71LcV71ywG4mtqc9mOb/GfhUbg==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/selection": "^3.14.1", + "@react-types/shared": "^3.22.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/slider": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.3.tgz", + "integrity": "sha512-AbrTD9UzMn0CwxFjOhJHz2ms2zdJlBL3XnbvqkpsmpXUl0u8WT1QAEaMnS5+792gnSGZs/ARDmse53o+IO8wTA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/label": "^3.7.3", + "@react-aria/utils": "^3.22.0", + "@react-stately/slider": "^3.4.5", + "@react-types/shared": "^3.22.0", + "@react-types/slider": "^3.7.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.0.tgz", + "integrity": "sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg==", + "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.5.7", + "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.5.7.tgz", + "integrity": "sha512-zBEsB071zzhQ82RwAA42pFLXHgrpya0OoRAsTO6jHZwiaYMsyqJI2eiXd7F6rqklpgyO6k7jOQklGUuoSJW4pA==", + "dependencies": { + "@react-aria/toggle": "^3.9.0", + "@react-stately/toggle": "^3.7.0", + "@react-types/switch": "^3.5.0", + "@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.13.2", + "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.13.2.tgz", + "integrity": "sha512-bJgMx2SZ8SFmTosbv6k1lZ1a0Yw3f8tzWhpIQodCaMHhtI7izA6YqDNx47NeBNYpVm9DFfAoWbb79HFJ+OKIJA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/grid": "^3.8.5", + "@react-aria/i18n": "^3.9.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/live-announcer": "^3.3.1", + "@react-aria/utils": "^3.22.0", + "@react-aria/visually-hidden": "^3.8.7", + "@react-stately/collections": "^3.10.3", + "@react-stately/flags": "^3.0.0", + "@react-stately/table": "^3.11.3", + "@react-stately/virtualizer": "^3.6.5", + "@react-types/checkbox": "^3.6.0", + "@react-types/grid": "^3.2.3", + "@react-types/shared": "^3.22.0", + "@react-types/table": "^3.9.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/tabs": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.8.2.tgz", + "integrity": "sha512-zDfeEEyJmcnH9TFvJECWIrJpxX4SmREFV1/P8hN6ZUJPYoeiGMXYYFvjcRb1r3LN8XKlbwR37AQ3Cn1/yhrUwQ==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/i18n": "^3.9.0", + "@react-aria/selection": "^3.17.2", + "@react-aria/utils": "^3.22.0", + "@react-stately/tabs": "^3.6.2", + "@react-types/shared": "^3.22.0", + "@react-types/tabs": "^3.3.4", + "@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.13.0", + "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.13.0.tgz", + "integrity": "sha512-sUlinDE+k/WhbskyqVOkuffuhiQpjgvp+iGRoralStVgb8Tcb+POxgAlw5jS4tNjdivCb3IjVJemUNJM7xsxxA==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/form": "^3.0.0", + "@react-aria/label": "^3.7.3", + "@react-aria/utils": "^3.22.0", + "@react-stately/form": "^3.0.0", + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@react-types/textfield": "^3.9.0", + "@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.9.0", + "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.9.0.tgz", + "integrity": "sha512-2YMWYQUEmcoAXtrAE86QXBS9XlmJyV6IFRlMTBNaeLTdH3AmACExgsyU66Tt0sKl6LMDMI376ItMFqAz27BBdQ==", + "dependencies": { + "@react-aria/focus": "^3.15.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/toggle": "^3.7.0", + "@react-types/checkbox": "^3.6.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dev": true, + "node_modules/@react-aria/tooltip": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.6.5.tgz", + "integrity": "sha512-hXw4Z8nYLOWz3QOQ807wWZdvDwR3gofsmZhAehg2HPRwdRfCQK+1cjVKeUd9cKCAxs0Cay7dV0oUdilLbCQ2Gg==", "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "@react-aria/focus": "^3.15.0", + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-stately/tooltip": "^3.4.6", + "@react-types/shared": "^3.22.0", + "@react-types/tooltip": "^3.4.6", + "@swc/helpers": "^0.5.0" }, - "engines": { - "node": ">=14.16" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.22.0.tgz", + "integrity": "sha512-Qi/m65GFFljXA/ayj1m5g3KZdgbZY3jacSSqD5vNUOEGiKsn4OQcsw8RfC2c0SgtLV1hLzsfvFI1OiryPlGCcw==", + "dependencies": { + "@react-aria/ssr": "^3.9.0", + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0", + "clsx": "^1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "node_modules/@react-aria/utils/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": ">=12.22.0" + "node": ">=6" } }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/@react-aria/visually-hidden": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.7.tgz", + "integrity": "sha512-OuIGMVQIt7GC43h4x35BgkZid8lhoPu7Xz4TQRP8nvOJWb1lH7ehrRRuGdUsK3y90nwpxTdNdg4DILblg+VaLw==", "dependencies": { - "graceful-fs": "4.2.10" + "@react-aria/interactions": "^3.20.0", + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, - "engines": { - "node": ">=12.22.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "node_modules/@react-stately/checkbox": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.0.tgz", + "integrity": "sha512-e1ChMwGovcOEDcdizqXDT6eDZixIMiPQOzNV5wPQ91SlGaIry9b0lQnK18tHg3yv2iiS6Ipj96cGBUKLJqQ+cQ==", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "@react-stately/form": "^3.0.0", + "@react-stately/utils": "^3.9.0", + "@react-types/checkbox": "^3.6.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@prisma/client": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz", - "integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==", - "hasInstallScript": true, + "node_modules/@react-stately/collections": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.10.3.tgz", + "integrity": "sha512-fA28HIApAIz9sNGeOVXZJPgV5Kig6M72KI1t9sUbnRUr9Xq9OMJTR6ElDMXNe0iTeZffRFDOPYyqnX9zkxof6Q==", "dependencies": { - "@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" - }, - "engines": { - "node": ">=16.13" + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "prisma": "*" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@prisma/engines": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz", - "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==", - "devOptional": true, - "hasInstallScript": true - }, - "node_modules/@prisma/engines-version": { - "version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz", - "integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw==" + "node_modules/@react-stately/combobox": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.8.0.tgz", + "integrity": "sha512-F74Avf7+8ruRqEB+3Lh6/C5jXc3ESJbRf9ovUxhmNAzBGeFKesPn5HpEpo87C+3OukGb+/Buvi3Rhib9+HVBKA==", + "dependencies": { + "@react-stately/collections": "^3.10.3", + "@react-stately/form": "^3.0.0", + "@react-stately/list": "^3.10.1", + "@react-stately/menu": "^3.5.7", + "@react-stately/select": "^3.6.0", + "@react-stately/utils": "^3.9.0", + "@react-types/combobox": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } }, - "node_modules/@radix-ui/number": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", - "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "node_modules/@react-stately/flags": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.0.tgz", + "integrity": "sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@swc/helpers": "^0.4.14" } }, - "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "node_modules/@react-stately/flags/node_modules/@swc/helpers": { + "version": "0.4.36", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz", + "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==", "dependencies": { - "@babel/runtime": "^7.13.10" + "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14", + "tslib": "^2.4.0" } }, - "node_modules/@radix-ui/react-accordion": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", - "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collapsible": "1.0.3", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-stately/form": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.0.0.tgz", + "integrity": "sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ==", + "dependencies": { + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-alert-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.0.5.tgz", - "integrity": "sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==", + "node_modules/@react-stately/grid": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.8.3.tgz", + "integrity": "sha512-JceGSJcuO6Zv+Aq5s2NZvmbMjdPjTtGNQR9kTgXKC/pOfM6FJ58bJiOmEllyN6oawqh4Ey8Xdqk9NuW4l2ctuw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dialog": "1.0.5", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@react-stately/collections": "^3.10.3", + "@react-stately/selection": "^3.14.1", + "@react-types/grid": "^3.2.3", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "node_modules/@react-stately/list": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.10.1.tgz", + "integrity": "sha512-iVarLMd7FmMT0H20dRWsFOHHX5+c4gK51AXP2BSr1VtDSfbL4dgaGgu7IaAMVc/rO0au1e1tPM2hutiIFvPcnA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@react-stately/collections": "^3.10.3", + "@react-stately/selection": "^3.14.1", + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-collapsible": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", - "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "node_modules/@react-stately/menu": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.5.7.tgz", + "integrity": "sha512-bzTmAqzcMNatvyruWlvOdZSmMhz3+mkdxtqaZzYHq+DpR6ka57lIRj8dBnZWQGwV3RypMZfz+X6aIX4kruGVbw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@react-stately/overlays": "^3.6.4", + "@react-types/menu": "^3.9.6", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.4.tgz", + "integrity": "sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA==", + "dependencies": { + "@react-stately/utils": "^3.9.0", + "@react-types/overlays": "^3.8.4", + "@swc/helpers": "^0.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "node_modules/@react-stately/radio": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.0.tgz", + "integrity": "sha512-d8IgZtUq/4vhE7YhyBVg1QdVoFS0caIcvPumXqtp/5vlDgpUsVy9jSeWtbk0H4FyUcmJlQhRcTylKB9THXY1YQ==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@react-stately/form": "^3.0.0", + "@react-stately/utils": "^3.9.0", + "@react-types/radio": "^3.6.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/select": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.0.tgz", + "integrity": "sha512-GvSE4DXmcvdRNUc+ciPU7gedt7LfRO8FFFIzhB/bCQhUlK6/xihUPrGXayzqxLeTQKttMH323LuYFKfwpJRhsA==", + "dependencies": { + "@react-stately/form": "^3.0.0", + "@react-stately/list": "^3.10.1", + "@react-stately/menu": "^3.5.7", + "@react-types/select": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "node_modules/@react-stately/selection": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.14.1.tgz", + "integrity": "sha512-96/CerrB6yH4Ad9FkzBzyVerSPjcIj1NBTWTFHo1N+oHECvyGsDxZl7Y4LQR++teFK66FhX5KjCJQGae4IZd6A==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-stately/collections": "^3.10.3", + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "node_modules/@react-stately/slider": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.4.5.tgz", + "integrity": "sha512-lJPZC8seYbnZDqAlZm3/QC95I5iluG8ouwkPMmvtWCz1baayV/jJtfxA/74zR7Vcob9Fe7O57g8Edhz/hv9xOQ==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@react-types/slider": "^3.7.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-stately/table": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.11.3.tgz", + "integrity": "sha512-r0rzSKbtMG4tjFpCGtXb8p6hOuek03c6rheJE88z4I/ujZ5EmEO6Ps8q0JMNEDCY2qigvKM+ODisMBeZCEkIJg==", + "dependencies": { + "@react-stately/collections": "^3.10.3", + "@react-stately/flags": "^3.0.0", + "@react-stately/grid": "^3.8.3", + "@react-stately/selection": "^3.14.1", + "@react-stately/utils": "^3.9.0", + "@react-types/grid": "^3.2.3", + "@react-types/shared": "^3.22.0", + "@react-types/table": "^3.9.1", + "@swc/helpers": "^0.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-stately/tabs": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.6.2.tgz", + "integrity": "sha512-f+U4D1FAVfVVcNRbtKIv4GrO37CLFClYQlXx9zIuSXjHsviapVD2IQSyAmpKo/CbgXhYRMdGwENZdOsmF/Ns7g==", + "dependencies": { + "@react-stately/list": "^3.10.1", + "@react-types/shared": "^3.22.0", + "@react-types/tabs": "^3.3.4", + "@swc/helpers": "^0.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "node_modules/@react-stately/toggle": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.7.0.tgz", + "integrity": "sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-stately/utils": "^3.9.0", + "@react-types/checkbox": "^3.6.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "node_modules/@react-stately/tooltip": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.4.6.tgz", + "integrity": "sha512-uL93bmsXf+OOgpKLPEKfpDH4z+MK2CuqlqVxx7rshN0vjWOSoezE5nzwgee90+RpDrLNNNWTNa7n+NkDRpI1jA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@react-stately/overlays": "^3.6.4", + "@react-types/tooltip": "^3.4.6", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", - "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "node_modules/@react-stately/tree": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.7.4.tgz", + "integrity": "sha512-0yvVODBS8WnSivLFX5ccEjCl2NA/8lbEt1E48wVcY1xcXgISNpw5MSGK5jC6YrtJPIqVolQIkNSbMreXGBktIg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-menu": "2.0.6", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@react-stately/collections": "^3.10.3", + "@react-stately/selection": "^3.14.1", + "@react-stately/utils": "^3.9.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "node_modules/@react-stately/utils": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.9.0.tgz", + "integrity": "sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "node_modules/@react-stately/virtualizer": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.6.5.tgz", + "integrity": "sha512-v0cZeNCGPMeo3LP4UrGuDo3Xpq7ufNaZyGObgSvdrIW49qK5F02kczcKy6NKg+QfOgC/+Nc9Tof/2S8dcxDrCA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@react-aria/utils": "^3.22.0", + "@react-types/shared": "^3.22.0", + "@swc/helpers": "^0.5.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "node_modules/@react-types/accordion": { + "version": "3.0.0-alpha.17", + "resolved": "https://registry.npmjs.org/@react-types/accordion/-/accordion-3.0.0-alpha.17.tgz", + "integrity": "sha512-Wsp31bYRu9wy4zAAV2W8FLvVGFF3Vk/JKn2MxqhzaSHwHBw/dfgJTvRRUW+OmBgnqVN97ur893TP9A3odpoZEg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@react-types/shared": "^3.21.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-label": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", - "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "node_modules/@react-types/breadcrumbs": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.2.tgz", + "integrity": "sha512-esl6RucDW2CNMsApJxNYfMtDaUcfLlwKMPH/loYsOBbKxGl2HsgVLMcdpjEkTRs2HCTNCbBXWpeU8AY77t+bsw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@react-types/link": "^3.5.2", + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", - "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-types/button": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.9.1.tgz", + "integrity": "sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw==", + "dependencies": { + "@react-types/shared": "^3.22.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-types/checkbox": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.6.0.tgz", + "integrity": "sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw==", + "dependencies": { + "@react-types/shared": "^3.22.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "node_modules/@react-types/combobox": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.9.0.tgz", + "integrity": "sha512-VAQWM2jrIWROgcTKxj4k37WWpK/1zRjj1HfGeuenAQyOQwImqDwCHx5YxQR1GiUEFne4v1yXe2khT0T5Kt2vDg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "node_modules/@react-types/dialog": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.7.tgz", + "integrity": "sha512-geYoqAyQaTLG43AaXdMUVqZXYgkSifrD9cF7lR2kPAT0uGFv0YREi6ieU+aui8XJ83EW0xcxP+EPWd2YkN4D4w==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@react-types/overlays": "^3.8.4", + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "node_modules/@react-types/grid": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.3.tgz", + "integrity": "sha512-GQM4RDmYhstcYZ0Odjq+xUwh1fhLmRebG6qMM8OXHTPQ77nhl3wc1UTGRhZm6mzEionplSRx4GCpEMEHMJIU0w==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-types/link": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.2.tgz", + "integrity": "sha512-/s51/WejmpLiyxOgP89s4txgxYoGaPe8pVDItVo1h4+BhU1Puyvgv/Jx8t9dPvo6LUXbraaN+SgKk/QDxaiirw==", + "dependencies": { + "@react-types/shared": "^3.22.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-select": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", - "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-types/listbox": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.6.tgz", + "integrity": "sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ==", + "dependencies": { + "@react-types/shared": "^3.22.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@react-types/menu": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.6.tgz", + "integrity": "sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@react-types/overlays": "^3.8.4", + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", - "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "node_modules/@react-types/overlays": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.4.tgz", + "integrity": "sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w==", + "dependencies": { + "@react-types/shared": "^3.22.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "node_modules/@react-types/progress": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.1.tgz", + "integrity": "sha512-CqsUjczUK/SfuFzDcajBBaXRTW0D3G9S/yqLDj9e8E0ii+lGDLt1PHj24t1J7E88U2rVYqmM9VL4NHTt8o3IYA==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "node_modules/@react-types/radio": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.6.0.tgz", + "integrity": "sha512-VOZzegxxZS55gHRVyWu278Q4y/rEQGiAVQCUqi25GmpbMe4MlHrzg16c76RiZMUK9PPoyv+XNUgAaPmxebkn7g==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "node_modules/@react-types/select": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.0.tgz", + "integrity": "sha512-0nalGmcoma4jreICLSJae/uKAuMiVyWgqWjGrGiUGGcdDchH4limKVEqNDaBwLvxVT6NB5LLsaipCTCAEEl4Rg==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "node_modules/@react-types/shared": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.22.0.tgz", + "integrity": "sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@react-types/slider": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.0.tgz", + "integrity": "sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "node_modules/@react-types/switch": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.0.tgz", + "integrity": "sha512-/wNmUGjk69bP6t5k2QkAdrNN5Eb9Rz4dOyp0pCPmoeE+5haW6sV5NmtkvWX1NSc4DQz1xL/a5b+A0vxPCP22Jw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "node_modules/@react-types/table": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.9.1.tgz", + "integrity": "sha512-3e+Oouw9jGqNDg+JRg7v7fgPqDZd6DtST9S/UPp81f32ntnQ8Wsu7S/J4eyLHu5CVQDqcHkf4xPeeXBgPx4qmw==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" + "@react-types/grid": "^3.2.3", + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "node_modules/@react-types/tabs": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.4.tgz", + "integrity": "sha512-4mCTtFrwMRypyGTZCvNYVT9CkknexO/UYvqwDm2jMYb8JgjRvxnomu776Yh7uyiYKWyql2upm20jqasEOm620w==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "node_modules/@react-types/textfield": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.9.0.tgz", + "integrity": "sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA==", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@react-types/shared": "^3.22.0" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, - "node_modules/@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "node_modules/@react-types/tooltip": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.6.tgz", + "integrity": "sha512-RaZewdER7ZcsNL99RhVHs8kSLyzIBkwc0W6eFZrxST2MD9J5GzkVWRhIiqtFOd5U1aYnxdJ6woq72Ef+le6Vfw==", "dependencies": { - "@babel/runtime": "^7.13.10" + "@react-types/overlays": "^3.8.4", + "@react-types/shared": "^3.22.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, "node_modules/@rushstack/eslint-patch": { @@ -5731,7 +7300,7 @@ "version": "18.2.15", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.15.tgz", "integrity": "sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==", - "devOptional": true, + "dev": true, "dependencies": { "@types/react": "*" } @@ -6655,17 +8224,6 @@ "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==" }, - "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -7736,6 +9294,11 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/color2k": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.2.tgz", + "integrity": "sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7765,6 +9328,11 @@ "dot-prop": "^5.1.0" } }, + "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", @@ -8417,7 +9985,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10527,6 +12094,14 @@ "micromatch": "^4.0.2" } }, + "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.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10581,6 +12156,44 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "10.16.5", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.5.tgz", + "integrity": "sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==", + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -11287,6 +12900,17 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "10.5.8", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.8.tgz", + "integrity": "sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.18.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.3", + "tslib": "^2.4.0" + } + }, "node_modules/into-stream": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", @@ -13647,14 +15271,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13942,6 +15558,15 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/legacy-swc-helpers": { + "name": "@swc/helpers", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -14077,6 +15702,16 @@ "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" }, + "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.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -14098,6 +15733,16 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "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.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -14110,6 +15755,11 @@ "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/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -14561,6 +16211,14 @@ } } }, + "node_modules/next-auth/node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/next-themes": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz", @@ -17983,11 +19641,11 @@ } }, "node_modules/openid-client": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.3.tgz", - "integrity": "sha512-sVQOvjsT/sbSfYsQI/9liWQGVZH/Pp3rrtlGEwgk/bbHfrUDZ24DN57lAagIwFtuEu+FM9Ev7r85s8S/yPjimQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", + "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", "dependencies": { - "jose": "^4.14.4", + "jose": "^4.15.1", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" @@ -17996,6 +19654,14 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/openid-client/node_modules/jose": { + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/openid-client/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -19099,30 +20765,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, - "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "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.4", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", @@ -19166,6 +20808,22 @@ } } }, + "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/react-toastify": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", @@ -19865,6 +21523,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/semantic-release": { "version": "22.0.5", "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.5.tgz", @@ -21018,6 +22684,30 @@ "url": "https://github.com/sponsors/dcastil" } }, + "node_modules/tailwind-variants": { + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.18.tgz", + "integrity": "sha512-yoydMYm3FbZRw7wak+E2sqwYv2Uo3YWRqVZR03DGqDGm0ytzDrEnWO/Q/GMHdhaz8adOvycKw/bwCgQFCfmfhg==", + "dependencies": { + "tailwind-merge": "^1.14.0" + }, + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwindcss": "*" + } + }, + "node_modules/tailwind-variants/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/tailwindcss": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", @@ -21884,6 +23574,43 @@ } } }, + "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", diff --git a/package.json b/package.json index 9695eae1..f69fb4aa 100644 --- a/package.json +++ b/package.json @@ -29,15 +29,8 @@ "@formatjs/intl-localematcher": "^0.5.0", "@hookform/resolvers": "^3.2.0", "@next-auth/prisma-adapter": "^1.0.7", + "@nextui-org/react": "^2.2.9", "@prisma/client": "^5.6.0", - "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-alert-dialog": "^1.0.5", - "@radix-ui/react-collapsible": "^1.0.3", - "@radix-ui/react-dropdown-menu": "^2.0.5", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-select": "^2.0.0", - "@radix-ui/react-slot": "^1.0.2", - "@radix-ui/react-tooltip": "^1.0.6", "@semantic-release/changelog": "^6.0.3", "@semantic-release/commit-analyzer": "^11.0.0", "@semantic-release/git": "^10.0.1", @@ -59,11 +52,12 @@ "cron": "^3.0.0", "crypto-js": "^4.2.0", "dotenv": "^16.3.1", + "framer-motion": "^10.16.5", "ioredis": "^5.3.2", "lucide-react": "^0.292.0", "negotiator": "^0.6.3", "next": "^14.0.0", - "next-auth": "^4.23.1", + "next-auth": "^4.24.5", "next-themes": "^0.2.1", "nodemailer": "^6.9.5", "react": "^18.2.0", diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..718d6fea Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/app/[lang]/(not-protected)/page.tsx b/src/app/[lang]/(not-protected)/page.tsx index c9838d7c..e3ac0e8b 100644 --- a/src/app/[lang]/(not-protected)/page.tsx +++ b/src/app/[lang]/(not-protected)/page.tsx @@ -1,7 +1,6 @@ -import Link from "next/link" +import { Button, Link } from "@nextui-org/react" import LocaleSwitcher from "@/components/locale-switcher" import { ThemeSwitch } from "@/components/theme/theme-switch" -import { buttonVariants } from "@/components/ui/button" import { authRoutes } from "@/lib/auth/constants" import { getDictionary } from "@/lib/langs" import { Locale } from "i18n-config" @@ -17,31 +16,31 @@ export default async function Home({ return ( <> -
+

{dictionary.homePage.title}

-
- +
+
) diff --git a/src/app/[lang]/(protected)/profile/page.tsx b/src/app/[lang]/(protected)/examples/profile/page.tsx similarity index 78% rename from src/app/[lang]/(protected)/profile/page.tsx rename to src/app/[lang]/(protected)/examples/profile/page.tsx index a01ee3dc..36bc12fb 100644 --- a/src/app/[lang]/(protected)/profile/page.tsx +++ b/src/app/[lang]/(protected)/examples/profile/page.tsx @@ -1,12 +1,14 @@ +import { Card, CardBody, CardHeader } from "@nextui-org/react" import { getServerSession } from "next-auth" import DeleteAccountButton from "@/components/auth/delete-account-button" import SignoutButton from "@/components/auth/sign-out-button" import VerifyEmailButton from "@/components/auth/verify-email-button" import ProfileDetails from "@/components/profile/profile-details" import UserActiveSessions from "@/components/profile/sessions/user-active-sessions" -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import CardTitle from "@/components/ui/card" import { nextAuthOptions } from "@/lib/auth" import { getDictionary } from "@/lib/langs" +import { serverTrpc } from "@/lib/trpc/server" import { Locale } from "i18n-config" export default async function Profile({ @@ -18,27 +20,28 @@ export default async function Profile({ }) { const dictionary = await getDictionary(lang) const session = await getServerSession(nextAuthOptions) + const serverAccount = await serverTrpc.me.getAccount() return ( -
+
{dictionary.profile} - +

{dictionary.profilePage.serverSideData}

               {JSON.stringify(session, null, 2)}
             
- {session && } + {session && } {dictionary.deleteAccount} {dictionary.signOut}
- + -
+
diff --git a/src/app/[lang]/(protected)/layout.tsx b/src/app/[lang]/(protected)/layout.tsx index e1314f62..978a8974 100644 --- a/src/app/[lang]/(protected)/layout.tsx +++ b/src/app/[lang]/(protected)/layout.tsx @@ -17,9 +17,9 @@ export default async function ProtectedLayout({ return ( <> {children} -
- +
+
) diff --git a/src/app/[lang]/(sys-auth)/forgot-password/form.tsx b/src/app/[lang]/(sys-auth)/forgot-password/form.tsx index 6368d55d..d2aec03b 100644 --- a/src/app/[lang]/(sys-auth)/forgot-password/form.tsx +++ b/src/app/[lang]/(sys-auth)/forgot-password/form.tsx @@ -1,6 +1,7 @@ "use client" import { zodResolver } from "@hookform/resolvers/zod" +import { Button, Tooltip } from "@nextui-org/react" import { Clock } from "lucide-react" import { useRouter } from "next/navigation" import { useState } from "react" @@ -8,11 +9,7 @@ import { useForm } from "react-hook-form" import { toast } from "react-toastify" import { z } from "zod" import AutoRefresh from "@/components/auto-refresh" -import { Button } from "@/components/ui/button" -import { Form } from "@/components/ui/form" -import FormField from "@/components/ui/form-field" -import { Label } from "@/components/ui/label" -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" +import FormField from "@/components/ui/form" import { TDictionary } from "@/lib/langs" import { forgotPasswordSchema } from "@/lib/schemas/user" import { trpc } from "@/lib/trpc/client" @@ -53,55 +50,43 @@ export default function ForgotPasswordForm({ dictionary }: { dictionary: TDictio const isDisabled = isLoading || (latestEmailSentAt && retryInValue ? retryInValue.getTime() > 0 : false) return ( -
- -
- - + + + {latestEmailSentAt !== null && ( + + { + const retryInValue = retryIn() + const retryInFormatted = + retryInValue && retryInValue.getTime() > 0 + ? `${Math.floor(retryInValue.getTime() / 1000 / 60)}:${ + Math.floor(retryInValue.getTime() / 1000) % 60 + }` + : null + return ( +
+ + {retryInFormatted} +
+ ) + }} + interval={1000} /> -
- - {latestEmailSentAt !== null && ( - - - - { - const retryInValue = retryIn() - const retryInFormatted = - retryInValue && retryInValue.getTime() > 0 - ? `${Math.floor(retryInValue.getTime() / 1000 / 60)}:${ - Math.floor(retryInValue.getTime() / 1000) % 60 - }` - : null - return ( -
- - {retryInFormatted} -
- ) - }} - interval={1000} - /> -
- -

{dictionary.timeUntilYouCanRequestAnotherEmail}

-
-
-
- )} -
- + + )} + ) } diff --git a/src/app/[lang]/(sys-auth)/forgot-password/page.tsx b/src/app/[lang]/(sys-auth)/forgot-password/page.tsx index 49a3f4f5..a2a969f0 100644 --- a/src/app/[lang]/(sys-auth)/forgot-password/page.tsx +++ b/src/app/[lang]/(sys-auth)/forgot-password/page.tsx @@ -14,7 +14,7 @@ export default async function ForgotPassword({ const dictionary = await getDictionary(lang) return ( -
+

{dictionary.forgotPasswordTitle}

{dictionary.forgotPasswordDescription}

diff --git a/src/app/[lang]/(sys-auth)/login/page.tsx b/src/app/[lang]/(sys-auth)/login/page.tsx deleted file mode 100644 index 7f76f885..00000000 --- a/src/app/[lang]/(sys-auth)/login/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { redirect } from "next/navigation" -import { authRoutes } from "@/lib/auth/constants" - -export default function LoginRedirect() { - redirect(authRoutes.signIn[0]) -} diff --git a/src/app/[lang]/(sys-auth)/privacy-acceptance.tsx b/src/app/[lang]/(sys-auth)/privacy-acceptance.tsx index d9f96aab..c4ddc64a 100644 --- a/src/app/[lang]/(sys-auth)/privacy-acceptance.tsx +++ b/src/app/[lang]/(sys-auth)/privacy-acceptance.tsx @@ -1,15 +1,15 @@ -import Link from "next/link" +import { Link } from "@nextui-org/react" import { TDictionary } from "@/lib/langs" export default function PrivacyAcceptance({ dictionary }: { dictionary: TDictionary }) { return (

{dictionary.auth.clickingAggreement}{" "} - + {dictionary.auth.termsOfService} {" "} {dictionary.and}{" "} - + {dictionary.auth.privacyPolicy} . diff --git a/src/app/[lang]/(sys-auth)/providers.tsx b/src/app/[lang]/(sys-auth)/providers.tsx index 9dec90e8..d031c3a8 100644 --- a/src/app/[lang]/(sys-auth)/providers.tsx +++ b/src/app/[lang]/(sys-auth)/providers.tsx @@ -1,8 +1,7 @@ import { redirect } from "next/navigation" import { getServerSession } from "next-auth" -import { getProviders } from "next-auth/react" import GithubSignIn from "@/components/auth/github-sign-in" -import { nextAuthOptions } from "@/lib/auth" +import { nextAuthOptions, providersByName } from "@/lib/auth" import { TDictionary } from "@/lib/langs" export default async function Providers({ @@ -12,15 +11,21 @@ export default async function Providers({ dictionary: TDictionary searchParams: { [key: string]: string | string[] | undefined } }) { - const providers = await getProviders() const session = await getServerSession(nextAuthOptions) const callbackUrl = searchParams.callbackUrl ? searchParams.callbackUrl.toString() : undefined //? If session and callbackUrl, redirect to callbackUrl if (session && callbackUrl) { + console.log("redirect", session, callbackUrl) redirect(callbackUrl) } - return <>{providers?.github && } + return ( + <> + {providersByName.GitHub !== undefined && ( + + )} + + ) } diff --git a/src/app/[lang]/(sys-auth)/reset-password/[token]/form.tsx b/src/app/[lang]/(sys-auth)/reset-password/[token]/form.tsx index 7754dfcb..bb8b829b 100644 --- a/src/app/[lang]/(sys-auth)/reset-password/[token]/form.tsx +++ b/src/app/[lang]/(sys-auth)/reset-password/[token]/form.tsx @@ -1,14 +1,12 @@ "use client" import { zodResolver } from "@hookform/resolvers/zod" +import { Button } from "@nextui-org/react" import { useRouter } from "next/navigation" import { useForm } from "react-hook-form" import { toast } from "react-toastify" import { z } from "zod" -import { Button } from "@/components/ui/button" -import { Form } from "@/components/ui/form" -import FormField from "@/components/ui/form-field" -import { Label } from "@/components/ui/label" +import FormField from "@/components/ui/form" import { authRoutes } from "@/lib/auth/constants" import { TDictionary } from "@/lib/langs" import { resetPasswordSchema } from "@/lib/schemas/user" @@ -45,34 +43,26 @@ export default function ResetPasswordForm({ dictionary, token }: { dictionary: T const isLoading = resetPasswordMutation.isLoading return ( -

- -
- - -
-
- - -
- -
- +
+ + + + ) } diff --git a/src/app/[lang]/(sys-auth)/reset-password/[token]/page.tsx b/src/app/[lang]/(sys-auth)/reset-password/[token]/page.tsx index ee43cf90..2e769249 100644 --- a/src/app/[lang]/(sys-auth)/reset-password/[token]/page.tsx +++ b/src/app/[lang]/(sys-auth)/reset-password/[token]/page.tsx @@ -15,7 +15,7 @@ export default async function ForgotPassword({ const dictionary = await getDictionary(lang) return ( -
+

{dictionary.resetPasswordTitle}

{dictionary.resetPasswordDescription}

diff --git a/src/app/[lang]/(sys-auth)/sign-in/page.tsx b/src/app/[lang]/(sys-auth)/sign-in/page.tsx index 0c7b64c8..adecc822 100644 --- a/src/app/[lang]/(sys-auth)/sign-in/page.tsx +++ b/src/app/[lang]/(sys-auth)/sign-in/page.tsx @@ -1,6 +1,6 @@ +import { Button } from "@nextui-org/react" import Link from "next/link" import { LoginUserAuthForm } from "@/components/auth/login-user-auth-form" -import { buttonVariants } from "@/components/ui/button" import { authRoutes } from "@/lib/auth/constants" import { getDictionary } from "@/lib/langs" import { cn } from "@/lib/utils" @@ -20,21 +20,21 @@ export default async function SignInPage({ const dictionary = await getDictionary(lang) return ( -
- + +

{dictionary.signInPage.loginToYourAccount}

-

{dictionary.signInPage.enterDetails}

+

{dictionary.signInPage.enterDetails}

@@ -43,7 +43,7 @@ export default async function SignInPage({
- {dictionary.auth.orContinueWith} + {dictionary.auth.orContinueWith}
diff --git a/src/app/[lang]/(sys-auth)/sign-up/credentials/page.tsx b/src/app/[lang]/(sys-auth)/sign-up/credentials/page.tsx index ffeede14..65503ff5 100644 --- a/src/app/[lang]/(sys-auth)/sign-up/credentials/page.tsx +++ b/src/app/[lang]/(sys-auth)/sign-up/credentials/page.tsx @@ -1,9 +1,9 @@ +import { Button, Card, CardBody, CardHeader } from "@nextui-org/react" import { ChevronRight } from "lucide-react" import Link from "next/link" import { redirect } from "next/navigation" import { RegisterUserAuthForm } from "@/components/auth/register-user-auth-form" -import { Button } from "@/components/ui/button" -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import CardTitle from "@/components/ui/card" import { authRoutes } from "@/lib/auth/constants" import { getDictionary } from "@/lib/langs" import { Locale } from "i18n-config" @@ -25,9 +25,9 @@ export default async function SignupByCredentials({ } return ( -
+
- @@ -35,9 +35,9 @@ export default async function SignupByCredentials({ {dictionary.signUpPage.createAnAccount} - + - +
) diff --git a/src/app/[lang]/(sys-auth)/sign-up/page.tsx b/src/app/[lang]/(sys-auth)/sign-up/page.tsx index ce01e93f..ef3aaee4 100644 --- a/src/app/[lang]/(sys-auth)/sign-up/page.tsx +++ b/src/app/[lang]/(sys-auth)/sign-up/page.tsx @@ -1,6 +1,6 @@ +import { Button } from "@nextui-org/react" import Link from "next/link" import { RegisterUserAuthForm } from "@/components/auth/register-user-auth-form" -import { buttonVariants } from "@/components/ui/button" import { authRoutes } from "@/lib/auth/constants" import { getDictionary } from "@/lib/langs" import { cn } from "@/lib/utils" @@ -20,21 +20,21 @@ export default async function SignUpPage({ const dictionary = await getDictionary(lang) return ( -
- + +

{dictionary.signUpPage.createAnAccount}

-

{dictionary.signUpPage.enterEmail}

+

{dictionary.signUpPage.enterEmail}

@@ -43,7 +43,7 @@ export default async function SignUpPage({
- {dictionary.auth.orContinueWith} + {dictionary.auth.orContinueWith}
diff --git a/src/app/[lang]/(sys-auth)/signin/page.tsx b/src/app/[lang]/(sys-auth)/signin/page.tsx deleted file mode 100644 index b2a0190d..00000000 --- a/src/app/[lang]/(sys-auth)/signin/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { redirect } from "next/navigation" -import { authRoutes } from "@/lib/auth/constants" - -export default function SignInRedirect() { - redirect(authRoutes.signIn[0]) -} diff --git a/src/app/[lang]/(sys-auth)/verify-email/[token]/form.tsx b/src/app/[lang]/(sys-auth)/verify-email/[token]/form.tsx index 12af9c52..f5e9235c 100644 --- a/src/app/[lang]/(sys-auth)/verify-email/[token]/form.tsx +++ b/src/app/[lang]/(sys-auth)/verify-email/[token]/form.tsx @@ -1,8 +1,8 @@ "use client" +import { Button } from "@nextui-org/react" import { useRouter } from "next/navigation" import { toast } from "react-toastify" -import { Button } from "@/components/ui/button" import { authRoutes } from "@/lib/auth/constants" import { TDictionary } from "@/lib/langs" @@ -28,7 +28,7 @@ export default function VerifyEmailButton({ dictionary, token }: { dictionary: T return (
-
diff --git a/src/app/[lang]/(sys-auth)/verify-email/[token]/page.tsx b/src/app/[lang]/(sys-auth)/verify-email/[token]/page.tsx index 65642e0c..04964119 100644 --- a/src/app/[lang]/(sys-auth)/verify-email/[token]/page.tsx +++ b/src/app/[lang]/(sys-auth)/verify-email/[token]/page.tsx @@ -15,7 +15,7 @@ export default async function VerifyEmail({ const dictionary = await getDictionary(lang) return ( -
+

{dictionary.emailVerificationTitle}

{dictionary.emailVerificationDescription}

diff --git a/src/app/[lang]/layout.tsx b/src/app/[lang]/layout.tsx index cc946c4a..6eceec34 100644 --- a/src/app/[lang]/layout.tsx +++ b/src/app/[lang]/layout.tsx @@ -3,9 +3,12 @@ import React from "react" import "../globals.css" import { NextAuthProvider } from "@/components/auth/provider" import { ThemeProvider } from "@/components/theme/theme-provider" +import { fontSans } from "@/lib/fonts" import TrpcProvider from "@/lib/trpc/provider" +import { cn } from "@/lib/utils" import { i18n } from "i18n-config" import Toaster from "./toaster" +import UIProvider from "./ui-provider" export const metadata: Metadata = { title: "Home", @@ -19,15 +22,17 @@ export async function generateStaticParams() { export default function RootLayout({ children, params }: { children: React.ReactNode; params: { lang: string } }) { return ( - - - - - {children} - - - - + + + + + + {children} + + + + + ) diff --git a/src/app/[lang]/not-found.tsx b/src/app/[lang]/not-found.tsx index b04da83b..c0a69467 100644 --- a/src/app/[lang]/not-found.tsx +++ b/src/app/[lang]/not-found.tsx @@ -1,14 +1,13 @@ -import Link from "next/link" +import { Button, Link } from "@nextui-org/react" import React from "react" -import { buttonVariants } from "@/components/ui/button" export default async function Page404MatchAll() { return ( -
+

Not found

- +
) } diff --git a/src/app/[lang]/toaster.tsx b/src/app/[lang]/toaster.tsx index cd2acb93..b74fe130 100644 --- a/src/app/[lang]/toaster.tsx +++ b/src/app/[lang]/toaster.tsx @@ -7,12 +7,5 @@ import "react-toastify/dist/ReactToastify.css" export default function Toaster() { const { resolvedTheme } = useTheme() - return ( - - ) + return } diff --git a/src/app/[lang]/ui-provider.tsx b/src/app/[lang]/ui-provider.tsx new file mode 100644 index 00000000..495cd2da --- /dev/null +++ b/src/app/[lang]/ui-provider.tsx @@ -0,0 +1,10 @@ +"use client" + +import { NextUIProvider } from "@nextui-org/react" +import { useRouter } from "next/navigation" + +export default function UIProvider({ children }: { children: React.ReactNode }) { + const router = useRouter() + + return {children} +} diff --git a/src/app/globals.css b/src/app/globals.css index 88d72b36..c79b29d5 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -2,68 +2,13 @@ @tailwind components; @tailwind utilities; - -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 222.2 84% 4.9%; - --card: 0 0% 100%; - --card-foreground: 222.2 84% 4.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 84% 4.9%; - --primary: 221.2 83.2% 53.3%; - --primary-foreground: 210 40% 98%; - --secondary: 210 40% 96.1%; - --secondary-foreground: 222.2 47.4% 11.2%; - --muted: 210 40% 96.1%; - --muted-foreground: 215.4 16.3% 46.9%; - --accent: 210 40% 96.1%; - --accent-foreground: 222.2 47.4% 11.2%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 210 40% 98%; - --border: 214.3 31.8% 91.4%; - --input: 214.3 31.8% 91.4%; - --ring: 221.2 83.2% 53.3%; - --radius: 0.5rem; - - --toastify-color-info: hsl(var(--primary)); - --toastify-color-light: hsl(var(--background)); - --toastify-color-dark: hsl(var(--background)); - --toastify-text-color-light: hsl(var(--foreground)); - --toastify-text-color-dark: hsl(var(--foreground)); - --toastify-color-progress-light: var(--toastify-color-info); - --toastify-color-progress-dark: var(--toastify-color-info); - } - - .dark { - --background: 222.2 84% 4.9%; - --foreground: 210 40% 98%; - --card: 222.2 84% 4.9%; - --card-foreground: 210 40% 98%; - --popover: 222.2 84% 4.9%; - --popover-foreground: 210 40% 98%; - --primary: 217.2 91.2% 59.8%; - --primary-foreground: 222.2 47.4% 11.2%; - --secondary: 217.2 32.6% 17.5%; - --secondary-foreground: 210 40% 98%; - --muted: 217.2 32.6% 17.5%; - --muted-foreground: 215 20.2% 65.1%; - --accent: 217.2 32.6% 17.5%; - --accent-foreground: 210 40% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 210 40% 98%; - --border: 217.2 32.6% 17.5%; - --input: 217.2 32.6% 17.5%; - --ring: 224.3 76.3% 48%; - } -} - - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } +:root { + --toastify-color-progress-light: hsl(var(--nextui-primary)); + --toastify-color-progress-dark: hsl(var(--nextui-primary)); + --toastify-color-progress-success: hsl(var(--nextui-success)); + --toastify-icon-color-success: hsl(var(--nextui-success)); + --toastify-color-progress-warning: hsl(var(--nextui-warning)); + --toastify-icon-color-warning: hsl(var(--nextui-warning)); + --toastify-color-progress-error: hsl(var(--nextui-danger)); + --toastify-icon-color-error: hsl(var(--nextui-danger)); } diff --git a/src/components/auth/delete-account-button.tsx b/src/components/auth/delete-account-button.tsx index 52b350aa..27a5f6ff 100644 --- a/src/components/auth/delete-account-button.tsx +++ b/src/components/auth/delete-account-button.tsx @@ -1,23 +1,14 @@ "use client" +import { Button, Modal, ModalContent, ModalFooter } from "@nextui-org/react" import { useRouter } from "next/navigation" import { useState } from "react" import { toast } from "react-toastify" -import { - AlertDialog, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, - AlertDialogTrigger, -} from "@/components/ui/alert-dialog" import { authRoutes } from "@/lib/auth/constants" import { TDictionary } from "@/lib/langs" import { trpc } from "@/lib/trpc/client" import { handleMutationError } from "@/lib/utils/client-utils" -import { Button } from "../ui/button" +import { ModalDescription, ModalHeader, ModalTitle } from "../ui/modal" export default function DeleteAccountButton({ children, @@ -44,25 +35,33 @@ export default function DeleteAccountButton({ deleteAccountMutation.mutate() } + const [showModal, setShowModal] = useState(false) + return ( - - - - - - - {dictionary.deleteAccountConfirmationTitle} - {dictionary.deleteAccountConfirmationDescription} - - - {dictionary.cancel} - - - - + <> + + setShowModal(open)} backdrop="blur"> + + {(onClose) => ( + <> + + {dictionary.deleteAccountConfirmationTitle} + {dictionary.deleteAccountConfirmationDescription} + + + + + + + )} + + + ) } diff --git a/src/components/auth/github-sign-in.tsx b/src/components/auth/github-sign-in.tsx index 851c0be6..5c663b25 100644 --- a/src/components/auth/github-sign-in.tsx +++ b/src/components/auth/github-sign-in.tsx @@ -1,30 +1,21 @@ "use client" -import { ClientSafeProvider, signIn } from "next-auth/react" +import { Button } from "@nextui-org/react" +import { signIn } from "next-auth/react" import { useState } from "react" import { toast } from "react-toastify" import { authRoutes } from "@/lib/auth/constants" import { TDictionary } from "@/lib/langs" import { logger } from "@/lib/logger" import { Icons } from "../icons" -import { Button } from "../ui/button" -export default function GithubSignIn({ - provider, - dictionary, -}: { - provider: ClientSafeProvider - dictionary: TDictionary -}) { +export default function GithubSignIn({ providerId, dictionary }: { providerId: string; dictionary: TDictionary }) { const [isLoading, setIsLoading] = useState(false) async function handleSignIn() { setIsLoading(true) try { - const sp = new URLSearchParams() - sp.set("redirectOnClient", authRoutes.redirectAfterSignIn) - // window.location.href = "?" + sp.toString() - const res = await signIn(provider.id, { + const res = await signIn(providerId, { callbackUrl: `${window.location.origin}${authRoutes.redirectAfterSignIn}`, }) @@ -52,7 +43,7 @@ export default function GithubSignIn({ } return ( - diff --git a/src/components/auth/login-user-auth-form.tsx b/src/components/auth/login-user-auth-form.tsx index bcddee85..d9438571 100644 --- a/src/components/auth/login-user-auth-form.tsx +++ b/src/components/auth/login-user-auth-form.tsx @@ -1,12 +1,11 @@ "use client" import { zodResolver } from "@hookform/resolvers/zod" +import { Button, Card, CardBody, Link } from "@nextui-org/react" import { ArrowBigDown, BadgeInfo } from "lucide-react" -import Link from "next/link" import { useRouter } from "next/navigation" import * as React from "react" import { useForm } from "react-hook-form" -import { toast } from "react-toastify" import * as z from "zod" import { authRoutes } from "@/lib/auth/constants" import { handleSignError, handleSignIn } from "@/lib/auth/handle-sign" @@ -14,11 +13,8 @@ import { TDictionary } from "@/lib/langs" import { signInSchema } from "@/lib/schemas/auth" import { cn, ensureRelativeUrl } from "@/lib/utils" import { env } from "env.mjs" -import { Alert, AlertDescription, AlertTitle } from "../ui/alert" -import { Button } from "../ui/button" -import { Form } from "../ui/form" -import FormField from "../ui/form-field" -import { Label } from "../ui/label" +import Copiable from "../ui/copiable" +import FormField from "../ui/form" type UserAuthFormProps = React.HTMLAttributes & { dictionary: TDictionary @@ -62,41 +58,21 @@ export function LoginUserAuthForm({ dictionary, searchParams, ...props }: UserAu } } - const copyToClipboard = (value?: string) => { - if (!value) return - navigator.clipboard.writeText(value) - toast(dictionary.copiedToClipboard) - } - return ( -
- - {env.NEXT_PUBLIC_IS_DEMO && ( - - - {dictionary.auth.demoMode} - + + {env.NEXT_PUBLIC_IS_DEMO && ( + + +

+ + {dictionary.auth.demoMode} +

+

- {dictionary.email}:{" "} - { - copyToClipboard(env.NEXT_PUBLIC_DEMO_EMAIL) - }} - > - {env.NEXT_PUBLIC_DEMO_EMAIL} - + {dictionary.email}:

- {dictionary.password}:{" "} - { - copyToClipboard(env.NEXT_PUBLIC_DEMO_PASSWORD) - }} - > - {env.NEXT_PUBLIC_DEMO_PASSWORD} - + {dictionary.password}:

- - - )} -
- - -
-
- - -
- - {dictionary.forgotPassword} - - - - +
+
+
+ )} + + + + {dictionary.forgotPassword} + + + ) } diff --git a/src/components/auth/register-user-auth-form.tsx b/src/components/auth/register-user-auth-form.tsx index 622a7aa2..049fea34 100644 --- a/src/components/auth/register-user-auth-form.tsx +++ b/src/components/auth/register-user-auth-form.tsx @@ -1,6 +1,7 @@ "use client" import { zodResolver } from "@hookform/resolvers/zod" +import { Button } from "@nextui-org/react" import Link from "next/link" import { useRouter } from "next/navigation" import * as React from "react" @@ -14,10 +15,7 @@ import { signUpSchema } from "@/lib/schemas/auth" import { trpc } from "@/lib/trpc/client" import { cn } from "@/lib/utils" import { handleMutationError } from "@/lib/utils/client-utils" -import { Button, buttonVariants } from "../ui/button" -import { Form } from "../ui/form" -import FormField from "../ui/form-field" -import { Label } from "../ui/label" +import FormField from "../ui/form" type UserAuthFormProps = React.HTMLAttributes & { dictionary: TDictionary @@ -58,7 +56,7 @@ export function RegisterUserAuthForm({ dictionary, isMinimized, searchParams, .. const registerMutation = trpc.auth.register.useMutation({ onError: (error) => { setIsLoading(false) - const translatedError = handleMutationError(error, dictionary, router) + const translatedError = handleMutationError(error, dictionary, router, { showNotification: false }) if (error.message.includes("email")) { return form.setError("email", { type: "manual", @@ -136,93 +134,72 @@ export function RegisterUserAuthForm({ dictionary, isMinimized, searchParams, .. } return ( -
- -
- -
- - {!isMinimized && ( - - {dictionary.edit} - - )} -
-
+ +
+ {!isMinimized && ( - <> -
- - -
-
- - -
-
- - -
- + )} - - - +
+ + {!isMinimized && ( + <> + + + + + )} + + ) } diff --git a/src/components/auth/require-auth.tsx b/src/components/auth/require-auth.tsx index dc3bcba2..ca007010 100644 --- a/src/components/auth/require-auth.tsx +++ b/src/components/auth/require-auth.tsx @@ -4,11 +4,10 @@ import { getServerSession } from "next-auth" import { nextAuthOptions } from "@/lib/auth" import { authRoutes } from "@/lib/auth/constants" import { logger } from "@/lib/logger" -import { validateSession } from "@/lib/utils/server-utils" export default async function requireAuth(callbackUrl?: string) { const session = await getServerSession(nextAuthOptions) - if (!session || !session.user.id) { + if (!session) { let searchParams = "" if (callbackUrl) { searchParams = "?" + new URLSearchParams({ callbackUrl }).toString() @@ -22,14 +21,9 @@ export default async function requireAuth(callbackUrl?: string) { export async function getAuthApi() { const session = await getServerSession(nextAuthOptions) - if (!session || !session.user.id) { + if (!session) { return { session: null, error: NextResponse.json({ error: "Unauthorized" }, { status: 401 }) } } - const sessionValidationError = await validateSession(session) - if (sessionValidationError) { - return { session: null, error: NextResponse.json({ error: sessionValidationError }, { status: 403 }) } - } - return { session, error: null } } diff --git a/src/components/auth/sign-out-button.tsx b/src/components/auth/sign-out-button.tsx index 501d9c99..7cb03457 100644 --- a/src/components/auth/sign-out-button.tsx +++ b/src/components/auth/sign-out-button.tsx @@ -1,5 +1,6 @@ "use client" +import { Button } from "@nextui-org/react" import { useRouter } from "next/navigation" import { signOut, useSession } from "next-auth/react" import { useState } from "react" @@ -7,7 +8,6 @@ import { TDictionary } from "@/lib/langs" import { logger } from "@/lib/logger" import { trpc } from "@/lib/trpc/client" import { handleMutationError } from "@/lib/utils/client-utils" -import { Button } from "../ui/button" export default function SignoutButton({ children, @@ -18,7 +18,7 @@ export default function SignoutButton({ }) { const router = useRouter() const session = useSession() - const utils = trpc.useContext() + const utils = trpc.useUtils() const currentSession = session.data?.user.uuid diff --git a/src/components/auth/verify-email-button.tsx b/src/components/auth/verify-email-button.tsx index 734b60ee..838f29ed 100644 --- a/src/components/auth/verify-email-button.tsx +++ b/src/components/auth/verify-email-button.tsx @@ -1,19 +1,31 @@ "use client" +import { Button } from "@nextui-org/react" import { BadgeCheck } from "lucide-react" import { useRouter } from "next/navigation" import { Session } from "next-auth" import { toast } from "react-toastify" +import { z } from "zod" import { useAccount } from "@/contexts/account" import { TDictionary } from "@/lib/langs" import { logger } from "@/lib/logger" +import { getAccountResponseSchema } from "@/lib/schemas/user" import { trpc } from "@/lib/trpc/client" import { handleMutationError } from "@/lib/utils/client-utils" -import { Button } from "../ui/button" -export default function VerifyEmailButton({ session, dictionary }: { session: Session; dictionary: TDictionary }) { +export default function VerifyEmailButton({ + session, + dictionary, + serverAccount, +}: { + session: Session + dictionary: TDictionary + serverAccount: z.infer> +}) { const router = useRouter() - const account = useAccount(dictionary) + const account = useAccount(dictionary, { + initialData: serverAccount, + }) const hasVerifiedEmail = session.user.emailVerified || !!account.data?.user.emailVerified const resendVerificationEmailMutation = trpc.me.sendVerificationEmail.useMutation({ @@ -47,6 +59,8 @@ export default function VerifyEmailButton({ session, dictionary }: { session: Se onClick={handleResendVerificationEmail} isLoading={resendVerificationEmailMutation.isLoading} className="flex-1 md:w-max" + variant="flat" + color="primary" > {dictionary.resendVerificationEmail} diff --git a/src/components/icons.tsx b/src/components/icons.tsx index 881dae90..dbfca477 100644 --- a/src/components/icons.tsx +++ b/src/components/icons.tsx @@ -136,24 +136,58 @@ export const Icons = { ), - eyeClosed: (props: IconProps) => ( - + eyeSlash: (props: IconProps) => ( + ), - eyeOpen: (props: IconProps) => ( - + eye: (props: IconProps) => ( + ), doubleArrowRight: (props: IconProps) => ( diff --git a/src/components/locale-switcher.tsx b/src/components/locale-switcher.tsx index 80a1582a..2e4a5427 100644 --- a/src/components/locale-switcher.tsx +++ b/src/components/locale-switcher.tsx @@ -1,10 +1,10 @@ "use client" +import { Avatar, Select, SelectItem } from "@nextui-org/react" import { usePathname } from "next/navigation" import { useRouter } from "next/navigation" import { useState } from "react" -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" -import { i18n, Locale } from "i18n-config" +import { Locale, localesDetailed } from "i18n-config" export default function LocaleSwitcher({ lang }: { lang: Locale }) { const pathName = usePathname() @@ -26,24 +26,28 @@ export default function LocaleSwitcher({ lang }: { lang: Locale }) { return ( ) } diff --git a/src/components/profile/profile-details.tsx b/src/components/profile/profile-details.tsx index 5c909c35..01721fb9 100644 --- a/src/components/profile/profile-details.tsx +++ b/src/components/profile/profile-details.tsx @@ -1,10 +1,15 @@ +import { z } from "zod" import { TDictionary } from "@/lib/langs" -import { serverTrpc } from "@/lib/trpc/server" +import { getAccountResponseSchema } from "@/lib/schemas/user" import UpdateAccount from "./update-account" -export default async function ProfileDetails({ dictionary }: { dictionary: TDictionary }) { - const serverAccount = await serverTrpc.me.getAccount() - +export default async function ProfileDetails({ + dictionary, + serverAccount, +}: { + dictionary: TDictionary + serverAccount: z.infer> +}) { return (
diff --git a/src/components/profile/sessions/session-row.tsx b/src/components/profile/sessions/session-row.tsx index addd65f0..8c7de484 100644 --- a/src/components/profile/sessions/session-row.tsx +++ b/src/components/profile/sessions/session-row.tsx @@ -1,12 +1,10 @@ +import { Button, Skeleton as NSkeleton } from "@nextui-org/react" import { Prisma } from "@prisma/client" import { Dispatch, SetStateAction } from "react" import { UAParser } from "ua-parser-js" import { Icons } from "@/components/icons" -import { AlertDialogTrigger } from "@/components/ui/alert-dialog" -import { Button } from "@/components/ui/button" -import { Skeleton } from "@/components/ui/skeleton" import { TDictionary } from "@/lib/langs" -import { getTimeBetween } from "@/lib/utils" +import { cn, getTimeBetween } from "@/lib/utils" import GetDeviceIcon from "../get-device-icon" export type InitialRowProps = { @@ -19,26 +17,43 @@ export type RowProps = InitialRowProps & session: Prisma.SessionGetPayload setSelectedSession: Dispatch> skeleton?: never + skeletonAnimation?: never } | { session?: never setSelectedSession?: never skeleton: true + skeletonAnimation: boolean } ) -export default function SessionRow({ session, setSelectedSession, skeleton, dictionary }: RowProps) { +function Skeleton({ className, disableAnimation }: { className?: string; disableAnimation?: boolean }) { + return ( + + ) +} + +export default function SessionRow({ session, setSelectedSession, skeleton, skeletonAnimation, dictionary }: RowProps) { const userAgents = session ? new UAParser(session.ua).getResult() : undefined return ( -
+
  • - {skeleton ? : } {skeleton ? ( - + + ) : ( + + )} + {skeleton ? ( + ) : (

    {userAgents?.os.name}

    )} @@ -46,7 +61,7 @@ export default function SessionRow({ session, setSelectedSession, skeleton, dict
    {skeleton ? ( - + ) : (

    {userAgents?.browser.name}

    )} @@ -54,7 +69,7 @@ export default function SessionRow({ session, setSelectedSession, skeleton, dict

    {dictionary.profilePage.profileDetails.lastUsed}

    {skeleton ? ( - + ) : (

    {session.lastUsedAt @@ -68,7 +83,7 @@ export default function SessionRow({ session, setSelectedSession, skeleton, dict

    {dictionary.profilePage.profileDetails.created}

    {skeleton ? ( - + ) : (

    {new Date(session.createdAt).toLocaleDateString()}

    )} @@ -76,7 +91,7 @@ export default function SessionRow({ session, setSelectedSession, skeleton, dict

    {dictionary.profilePage.profileDetails.expires}

    {skeleton ? ( - + ) : (

    {dictionary.profilePage.profileDetails.in}{" "} @@ -88,15 +103,18 @@ export default function SessionRow({ session, setSelectedSession, skeleton, dict

    {skeleton ? ( - + ) : ( - - - + )}
    -
    +
  • ) } diff --git a/src/components/profile/sessions/sessions-table.tsx b/src/components/profile/sessions/sessions-table.tsx index e39eb20c..f88ee22a 100644 --- a/src/components/profile/sessions/sessions-table.tsx +++ b/src/components/profile/sessions/sessions-table.tsx @@ -1,23 +1,14 @@ "use client" +import { Button, Modal, ModalContent, ModalFooter, Pagination } from "@nextui-org/react" import { useRouter } from "next/navigation" import { useEffect, useState } from "react" - -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, -} from "@/components/ui/alert-dialog" -import Pagination from "@/components/ui/pagination" +import { ModalDescription, ModalHeader, ModalTitle } from "@/components/ui/modal" import { useActiveSessions } from "@/contexts/active-sessions" import { IMeta } from "@/lib/json-api" import { TDictionary } from "@/lib/langs" import { trpc } from "@/lib/trpc/client" +import { cn } from "@/lib/utils" import { handleMutationError } from "@/lib/utils/client-utils" import SessionRow from "./session-row" @@ -25,15 +16,13 @@ const itemsPerPageInitial = 5 export default function SessionsTable({ dictionary, isDisabled }: { dictionary: TDictionary; isDisabled?: boolean }) { const router = useRouter() - const utils = trpc.useContext() + const utils = trpc.useUtils() const [selectedSession, setSelectedSession] = useState(null) const [currentPage, setCurrentPage] = useState(1) - const [itemsPerPage, setItemsPerPage] = useState(itemsPerPageInitial) const callParams = { page: currentPage, - perPage: itemsPerPage, } const activeSessions = useActiveSessions(dictionary, callParams, { disabled: isDisabled, @@ -75,44 +64,51 @@ export default function SessionsTable({ dictionary, isDisabled }: { dictionary: const skelRows = ( <> {Array.from({ length: itemsPerPageInitial }).map((_, i) => ( - + ))} ) - const showPagination = Boolean((meta && meta.totalPages > 1) || itemsPerPageInitial !== itemsPerPage) + const showPagination = Boolean(meta && meta.totalPages > 1) return ( -
    - +
    +
      {activeSessions.isFetched ? rows : skelRows} - - - - {dictionary.areYouAbsolutelySure} - - {dictionary.profilePage.profileDetails.deleteLoggedDevice.description} - - - - {dictionary.cancel} - {dictionary.continue} - - - +
    + + !open && setSelectedSession(null)} backdrop="blur"> + + {(onClose) => ( + <> + + {dictionary.areYouAbsolutelySure} + + {dictionary.profilePage.profileDetails.deleteLoggedDevice.description} + + + + + + + + )} + + {isDisabled && (
    -

    {dictionary.profilePage.unavailableWithOAuth}

    +

    {dictionary.errors.unavailableWithOAuth}

    )}
    diff --git a/src/components/profile/update-account.tsx b/src/components/profile/update-account.tsx index 1c5d4213..e744d84a 100644 --- a/src/components/profile/update-account.tsx +++ b/src/components/profile/update-account.tsx @@ -12,9 +12,8 @@ import { logger } from "@/lib/logger" import { getAccountResponseSchema, updateUserSchema } from "@/lib/schemas/user" import { trpc } from "@/lib/trpc/client" import { handleMutationError } from "@/lib/utils/client-utils" -import NeedSavePopup from "../need-save-popup" -import { Form } from "../ui/form" -import FormField from "../ui/form-field" +import FormField from "../ui/form" +import NeedSavePopup from "../ui/need-save-popup" //? Put only the fields you can update withou password confirmation const nonSensibleSchema = updateUserSchema @@ -29,7 +28,7 @@ export default function UpdateAccount({ serverAccount: z.infer> }) { const router = useRouter() - const utils = trpc.useContext() + const utils = trpc.useUtils() const { update } = useSession() const account = useAccount(dictionary, { @@ -77,28 +76,25 @@ export default function UpdateAccount({ return (
    -
    - -
    - -
    - - - +
    + + + {!hasVerifiedEmail && ( -
    +

    {dictionary.errors.emailNotVerified}

    diff --git a/src/components/theme/theme-switch.tsx b/src/components/theme/theme-switch.tsx index f27b026e..668f2fbe 100644 --- a/src/components/theme/theme-switch.tsx +++ b/src/components/theme/theme-switch.tsx @@ -1,29 +1,62 @@ "use client" +import { SwitchProps, useSwitch } from "@nextui-org/switch" +import { useIsSSR } from "@react-aria/ssr" +import { VisuallyHidden } from "@react-aria/visually-hidden" import { Moon, Sun } from "lucide-react" import { useTheme } from "next-themes" -import * as React from "react" +import { FC } from "react" +import { cn } from "@/lib/utils" -import { Button } from "@/components/ui/button" -import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" +export interface ThemeSwitchProps { + className?: string + classNames?: SwitchProps["classNames"] +} + +export const ThemeSwitch: FC = ({ className, classNames }) => { + const { theme, setTheme } = useTheme() + const isSSR = useIsSSR() + + const onChange = () => { + theme === "light" ? setTheme("dark") : setTheme("light") + } -export function ThemeSwitch() { - const { setTheme } = useTheme() + const { Component, slots, isSelected, getBaseProps, getInputProps, getWrapperProps } = useSwitch({ + isSelected: theme === "light" || isSSR, + "aria-label": `Switch to ${theme === "light" || isSSR ? "dark" : "light"} mode`, + onChange, + }) return ( - - - - - - setTheme("light")}>Light - setTheme("dark")}>Dark - setTheme("system")}>System - - + + + + +
    + {!isSelected || isSSR ? : } +
    +
    ) } diff --git a/src/components/ui/.gitkeep b/src/components/ui/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx deleted file mode 100644 index 30bf2c64..00000000 --- a/src/components/ui/accordion.tsx +++ /dev/null @@ -1,56 +0,0 @@ -"use client" - -import * as AccordionPrimitive from "@radix-ui/react-accordion" -import { ChevronDown } from "lucide-react" -import * as React from "react" - -import { cn } from "@/lib/utils" - -const Accordion = AccordionPrimitive.Root - -const AccordionItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AccordionItem.displayName = "AccordionItem" - -const AccordionTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - svg]:rotate-180", - className - )} - {...props} - > - {children} - - - -)) -AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName - -const AccordionContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - -
    {children}
    -
    -)) -AccordionContent.displayName = AccordionPrimitive.Content.displayName - -export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx deleted file mode 100644 index 17534323..00000000 --- a/src/components/ui/alert-dialog.tsx +++ /dev/null @@ -1,107 +0,0 @@ -"use client" - -import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" -import * as React from "react" - -import { buttonVariants } from "@/components/ui/button" -import { cn } from "@/lib/utils" - -const AlertDialog = AlertDialogPrimitive.Root - -const AlertDialogTrigger = AlertDialogPrimitive.Trigger - -const AlertDialogPortal = ({ ...props }: AlertDialogPrimitive.AlertDialogPortalProps) => ( - -) -AlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName - -const AlertDialogOverlay = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName - -const AlertDialogContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - - - - -)) -AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName - -const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( -
    -) -AlertDialogHeader.displayName = "AlertDialogHeader" - -const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( -
    -) -AlertDialogFooter.displayName = "AlertDialogFooter" - -const AlertDialogTitle = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName - -const AlertDialogDescription = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName - -const AlertDialogAction = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName - -const AlertDialogCancel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName - -export { - AlertDialog, - AlertDialogTrigger, - AlertDialogContent, - AlertDialogHeader, - AlertDialogFooter, - AlertDialogTitle, - AlertDialogDescription, - AlertDialogAction, - AlertDialogCancel, -} diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx deleted file mode 100644 index dbfbf5cb..00000000 --- a/src/components/ui/alert.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { cva, type VariantProps } from "class-variance-authority" -import * as React from "react" - -import { cn } from "@/lib/utils" - -const alertVariants = cva( - "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", - { - variants: { - variant: { - default: "bg-background text-foreground", - destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - -const Alert = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes & VariantProps ->(({ className, variant, ...props }, ref) => ( -
    -)) -Alert.displayName = "Alert" - -const AlertTitle = React.forwardRef>( - ({ className, ...props }, ref) => ( -
    - ) -) -AlertTitle.displayName = "AlertTitle" - -const AlertDescription = React.forwardRef>( - ({ className, ...props }, ref) => ( -
    - ) -) -AlertDescription.displayName = "AlertDescription" - -export { Alert, AlertTitle, AlertDescription } diff --git a/src/components/ui/button.test.tsx b/src/components/ui/button.test.tsx deleted file mode 100644 index 4457aa45..00000000 --- a/src/components/ui/button.test.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import "isomorphic-fetch" -import { render, screen } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { Button } from "./button" - -describe("Button", () => { - it("renders a button with the correct text", () => { - render() - const button = screen.getByRole("button", { name: /click me/i }) - expect(button).toBeInTheDocument() - }) - - it("calls the onClick function when clicked", async () => { - const handleClick = jest.fn() - render() - const button = screen.getByRole("button", { name: /click me/i }) - await userEvent.click(button) - expect(handleClick).toBeCalledTimes(1) - }) - - it("disables the button when isLoading is true", () => { - render() - const button = screen.getByRole("button", { name: /click me/i }) - expect(button).toBeDisabled() - }) - - it("disables the button when disabledWhileLoading is true and isLoading is true", () => { - render( - - ) - const button = screen.getByRole("button", { name: /click me/i }) - expect(button).toBeDisabled() - }) - - it("does not disable the button when disabledWhileLoading is false and isLoading is true", () => { - render( - - ) - const button = screen.getByRole("button", { name: /click me/i }) - expect(button).not.toBeDisabled() - }) -}) diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx deleted file mode 100644 index 199f83a5..00000000 --- a/src/components/ui/button.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Slot } from "@radix-ui/react-slot" -import { cva, type VariantProps } from "class-variance-authority" -import * as React from "react" - -import { cn } from "@/lib/utils" -import { Icons } from "../icons" - -const buttonVariants = cva( - "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", - { - variants: { - variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", - destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", - outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", - secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", - ghost: "hover:bg-accent hover:text-accent-foreground", - link: "text-primary underline-offset-4 hover:underline", - }, - size: { - default: "h-10 px-4 py-2", - sm: "h-9 rounded-md px-3", - lg: "h-11 rounded-md px-8", - icon: "h-10 w-10", - }, - }, - defaultVariants: { - variant: "default", - size: "default", - }, - } -) - -export interface ButtonProps - extends React.ButtonHTMLAttributes, - VariantProps { - asChild?: boolean - isLoading?: boolean - reloadIcon?: React.ReactNode - disabledWhileLoading?: boolean -} - -const Loading = ({ isLoading, reloadIcon }: { isLoading?: boolean; reloadIcon?: React.ReactNode }) => { - return isLoading && (reloadIcon ?? ) -} - -const Button = React.forwardRef( - ( - { className, variant, size, asChild = false, isLoading, reloadIcon, disabledWhileLoading = true, ...props }, - ref - ) => { - const Comp = asChild ? Slot : "button" - - const children = ( - <> - - {props.children} - - ) - - const newProps = { - ...props, - children, - disabled: disabledWhileLoading && isLoading ? true : props.disabled, - } - - if (asChild) { - newProps.children = React.cloneElement(props.children as React.ReactElement, { - children, - }) - } - - return - } -) -Button.displayName = "Button" - -export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index 488006f4..78ff3850 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -1,43 +1,3 @@ -import * as React from "react" - -import { cn } from "@/lib/utils" - -const Card = React.forwardRef>(({ className, ...props }, ref) => ( -
    -)) -Card.displayName = "Card" - -const CardHeader = React.forwardRef>( - ({ className, ...props }, ref) => ( -
    - ) -) -CardHeader.displayName = "CardHeader" - -const CardTitle = React.forwardRef>( - ({ className, ...props }, ref) => ( -

    - ) -) -CardTitle.displayName = "CardTitle" - -const CardDescription = React.forwardRef>( - ({ className, ...props }, ref) => ( -

    - ) -) -CardDescription.displayName = "CardDescription" - -const CardContent = React.forwardRef>( - ({ className, ...props }, ref) =>

    -) -CardContent.displayName = "CardContent" - -const CardFooter = React.forwardRef>( - ({ className, ...props }, ref) => ( -
    - ) -) -CardFooter.displayName = "CardFooter" - -export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } +export default function CardTitle({ children }: { children: React.ReactNode }) { + return

    {children}

    +} diff --git a/src/components/ui/collapsible.tsx b/src/components/ui/collapsible.tsx deleted file mode 100644 index 9fa48946..00000000 --- a/src/components/ui/collapsible.tsx +++ /dev/null @@ -1,11 +0,0 @@ -"use client" - -import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" - -const Collapsible = CollapsiblePrimitive.Root - -const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger - -const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent - -export { Collapsible, CollapsibleTrigger, CollapsibleContent } diff --git a/src/components/ui/copiable.tsx b/src/components/ui/copiable.tsx new file mode 100644 index 00000000..9f0880b1 --- /dev/null +++ b/src/components/ui/copiable.tsx @@ -0,0 +1,21 @@ +import { toast } from "react-toastify" +import { TDictionary } from "@/lib/langs" + +export default function Copiable({ text, dictionary }: { text: string | undefined; dictionary: TDictionary }) { + const copyToClipboard = (value?: string) => { + if (!value) return + navigator.clipboard.writeText(value) + toast(dictionary.copiedToClipboard) + } + + return ( + { + copyToClipboard(text) + }} + > + {text} + + ) +} diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx deleted file mode 100644 index deafd08a..00000000 --- a/src/components/ui/dropdown-menu.tsx +++ /dev/null @@ -1,181 +0,0 @@ -"use client" - -import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" -import { Check, ChevronRight, Circle } from "lucide-react" -import * as React from "react" - -import { cn } from "@/lib/utils" - -const DropdownMenu = DropdownMenuPrimitive.Root - -const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger - -const DropdownMenuGroup = DropdownMenuPrimitive.Group - -const DropdownMenuPortal = DropdownMenuPrimitive.Portal - -const DropdownMenuSub = DropdownMenuPrimitive.Sub - -const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup - -const DropdownMenuSubTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, children, ...props }, ref) => ( - - {children} - - -)) -DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName - -const DropdownMenuSubContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName - -const DropdownMenuContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, sideOffset = 4, ...props }, ref) => ( - - - -)) -DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName - -const DropdownMenuItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName - -const DropdownMenuCheckboxItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, checked, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName - -const DropdownMenuRadioItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( - - - - - - - {children} - -)) -DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName - -const DropdownMenuLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef & { - inset?: boolean - } ->(({ className, inset, ...props }, ref) => ( - -)) -DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName - -const DropdownMenuSeparator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) -DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName - -const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { - return -} -DropdownMenuShortcut.displayName = "DropdownMenuShortcut" - -export { - DropdownMenu, - DropdownMenuTrigger, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuCheckboxItem, - DropdownMenuRadioItem, - DropdownMenuLabel, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuGroup, - DropdownMenuPortal, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuRadioGroup, -} diff --git a/src/components/ui/form-field.tsx b/src/components/ui/form-field.tsx deleted file mode 100644 index baad8fa4..00000000 --- a/src/components/ui/form-field.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { HTMLInputTypeAttribute } from "react" -import { ControllerRenderProps, FieldPath, FieldValues, useFormContext, UseFormReturn } from "react-hook-form" -import { - FormControl, - FormDescription, - FormField as FormFieldComponent, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form" -import { Input } from "@/components/ui/input" -import { PasswordEyeSlash } from "@/components/ui/password-eye-slash" -import { cn } from "@/lib/utils" - -export type InputWithOmittedProps = Omit< - React.InputHTMLAttributes, - "form" | "type" | "defaultValue" | "id" -> - -export interface FormFieldProps< - TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath, -> extends InputWithOmittedProps { - form?: UseFormReturn - name: TName - label?: string - placeholder?: string - description?: string - type?: HTMLInputTypeAttribute | "role-box" | "password" - autoComplete?: string - className?: string -} - -function getInner< - TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath, ->( - { - field, - autoComplete, - placeholder, - type, - }: // form, - FormFieldProps & { field: ControllerRenderProps }, - props: InputWithOmittedProps -) { - if (type === "password-eye-slash") { - return - } else { - return - } -} - -export default function FormField< - TFieldValues extends FieldValues = FieldValues, - TName extends FieldPath = FieldPath, ->({ - form, - name, - label, - placeholder, - description, - type, - autoComplete, - className, - ...props -}: FormFieldProps) { - const formContext = useFormContext() - form ??= formContext - return ( - ( - - {label && {label}} - - {getInner( - { - field, - form, - name, - label, - placeholder, - description, - type, - autoComplete, - }, - props - )} - - {description && {description}} - - - )} - /> - ) -} diff --git a/src/components/ui/form.tsx b/src/components/ui/form.tsx index 9766462f..797f7403 100644 --- a/src/components/ui/form.tsx +++ b/src/components/ui/form.tsx @@ -1,128 +1,65 @@ -import * as LabelPrimitive from "@radix-ui/react-label" -import { Slot } from "@radix-ui/react-slot" -import * as React from "react" -import { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext } from "react-hook-form" +"use client" -import { Label } from "@/components/ui/label" -import { cn } from "@/lib/utils" +import { Input, InputProps, Tooltip } from "@nextui-org/react" +import { useState } from "react" +import { Controller, FieldPath, FieldValues, UseFormReturn } from "react-hook-form" +import { Icons } from "../icons" -const Form = FormProvider - -type FormFieldContextValue< +export type FormFieldProps< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, -> = { - name: TName +> = Omit & { + form: UseFormReturn + name: TName //? Required + tooltip?: string + type: InputProps["type"] | "password-eye-slash" } -const FormFieldContext = React.createContext({} as FormFieldContextValue) - -const FormField = < +export default function FormField< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, ->({ - ...props -}: ControllerProps) => { - return ( - - - +>({ form, name, tooltip, type, ...props }: FormFieldProps) { + const [isVisible, setIsVisible] = useState(false) + + const toggleVisibility = () => setIsVisible(!isVisible) + + const input = ( + ( + + {isVisible ? ( + + ) : ( + + )} + + ) : undefined) + } + /> + )} + /> ) -} - -const useFormField = () => { - const fieldContext = React.useContext(FormFieldContext) as FormFieldContextValue | undefined - const itemContext = React.useContext(FormItemContext) - const { getFieldState, formState } = useFormContext() - - if (!fieldContext) { - throw new Error("useFormField should be used within ") - } - const fieldState = getFieldState(fieldContext.name, formState) - const { id } = itemContext + if (!tooltip) return input - return { - id, - name: fieldContext.name, - formItemId: `${id}-form-item`, - formDescriptionId: `${id}-form-item-description`, - formMessageId: `${id}-form-item-message`, - ...fieldState, - } -} - -type FormItemContextValue = { - id: string + return ( + +
    {input}
    +
    + ) } - -const FormItemContext = React.createContext({} as FormItemContextValue) - -const FormItem = React.forwardRef>( - ({ className, ...props }, ref) => { - const id = React.useId() - - return ( - -
    - - ) - } -) -FormItem.displayName = "FormItem" - -const FormLabel = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => { - const { error, formItemId } = useFormField() - - return