From be1599a8cb9e7496708721fa92bd1f8cd2b505b7 Mon Sep 17 00:00:00 2001 From: proudparrot2 Date: Mon, 22 Apr 2024 09:39:55 -0500 Subject: [PATCH] radius --- .gitignore | 36 + README.md | 36 + components.json | 17 + next.config.js | 15 + package.json | 47 + pnpm-lock.yaml | 2034 ++++++++++++++++++++++++++ postcss.config.js | 6 + public/apps.json | 17 + public/games.json | 22 + public/globe-dark.png | Bin 0 -> 965 bytes public/globe-light.png | Bin 0 -> 1066 bytes public/icon.png | Bin 0 -> 18840 bytes public/images/discord.png | Bin 0 -> 1902 bytes public/images/temu.png | Bin 0 -> 19467 bytes src/app/apps/page.tsx | 43 + src/app/games/page.tsx | 43 + src/app/globals.css | 120 ++ src/app/go/[...route]/page.tsx | 131 ++ src/app/layout.tsx | 31 + src/app/page.tsx | 49 + src/app/settings/appearance/page.tsx | 68 + src/app/settings/layout.tsx | 29 + src/app/uv/[uv]/route.ts | 29 + src/components/app.tsx | 21 + src/components/game.tsx | 20 + src/components/navbar.tsx | 30 + src/components/shortcut.tsx | 31 + src/components/sidebar.tsx | 48 + src/components/ui/button.tsx | 40 + src/components/ui/card.tsx | 79 + src/components/ui/form.tsx | 176 +++ src/components/ui/input.tsx | 12 + src/components/ui/label.tsx | 26 + src/components/ui/select.tsx | 160 ++ src/components/ui/separator.tsx | 31 + src/components/ui/sheet.tsx | 140 ++ src/components/ui/sonner.tsx | 31 + src/components/ui/tabs.tsx | 55 + src/components/ui/textarea.tsx | 24 + src/components/ui/toast.tsx | 129 ++ src/components/ui/toaster.tsx | 35 + src/components/ui/tooltip.tsx | 30 + src/components/ui/use-toast.ts | 194 +++ src/lib/types.d.ts | 5 + src/lib/utils.ts | 32 + src/lib/uv/sw.js | 14 + src/lib/uv/uv.config.js | 12 + src/pages/api/bare/[[...bare]].ts | 20 + tailwind.config.ts | 82 ++ tsconfig.json | 26 + 50 files changed, 4276 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 components.json create mode 100644 next.config.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.js create mode 100644 public/apps.json create mode 100644 public/games.json create mode 100644 public/globe-dark.png create mode 100644 public/globe-light.png create mode 100644 public/icon.png create mode 100644 public/images/discord.png create mode 100644 public/images/temu.png create mode 100644 src/app/apps/page.tsx create mode 100644 src/app/games/page.tsx create mode 100644 src/app/globals.css create mode 100644 src/app/go/[...route]/page.tsx create mode 100644 src/app/layout.tsx create mode 100644 src/app/page.tsx create mode 100644 src/app/settings/appearance/page.tsx create mode 100644 src/app/settings/layout.tsx create mode 100644 src/app/uv/[uv]/route.ts create mode 100644 src/components/app.tsx create mode 100644 src/components/game.tsx create mode 100644 src/components/navbar.tsx create mode 100644 src/components/shortcut.tsx create mode 100644 src/components/sidebar.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/form.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/select.tsx create mode 100644 src/components/ui/separator.tsx create mode 100644 src/components/ui/sheet.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/components/ui/tabs.tsx create mode 100644 src/components/ui/textarea.tsx create mode 100644 src/components/ui/toast.tsx create mode 100644 src/components/ui/toaster.tsx create mode 100644 src/components/ui/tooltip.tsx create mode 100644 src/components/ui/use-toast.ts create mode 100644 src/lib/types.d.ts create mode 100644 src/lib/utils.ts create mode 100644 src/lib/uv/sw.js create mode 100644 src/lib/uv/uv.config.js create mode 100644 src/pages/api/bare/[[...bare]].ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/README.md b/README.md new file mode 100644 index 0000000..c403366 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/components.json b/components.json new file mode 100644 index 0000000..8ecaf9e --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..924e07d --- /dev/null +++ b/next.config.js @@ -0,0 +1,15 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + trailingSlash: true, + redirects() { + return [ + { + source: '/settings', + destination: '/settings/appearance', + permanent: false + } + ] + } +} + +module.exports = nextConfig diff --git a/package.json b/package.json new file mode 100644 index 0000000..6ceb6b2 --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "radius", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@hookform/resolvers": "^3.3.4", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-separator": "^1.0.3", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-toast": "^1.1.5", + "@radix-ui/react-tooltip": "^1.0.7", + "@tomphttp/bare-server-node": "^2.0.3", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "framer-motion": "^11.0.25", + "lucide-react": "^0.363.0", + "mini-svg-data-uri": "^1.4.4", + "next": "14.1.4", + "next-themes": "^0.3.0", + "react": "^18", + "react-dom": "^18", + "react-hook-form": "^7.51.1", + "sonner": "^1.4.41", + "store2": "^2.14.3", + "tailwind-merge": "^2.2.2", + "tailwindcss-animate": "^1.0.7", + "zod": "^3.22.4" + }, + "devDependencies": { + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.0.1", + "postcss": "^8", + "tailwindcss": "^3.3.0", + "typescript": "^5" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..663f610 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2034 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@hookform/resolvers': + specifier: ^3.3.4 + version: 3.3.4(react-hook-form@7.51.1) + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': + specifier: ^2.0.0 + version: 2.0.0(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': + specifier: ^1.0.3 + version: 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toast': + specifier: ^1.1.5 + version: 1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-tooltip': + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@tomphttp/bare-server-node': + specifier: ^2.0.3 + version: 2.0.3 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.0 + framer-motion: + specifier: ^11.0.25 + version: 11.0.25(react-dom@18.2.0)(react@18.2.0) + lucide-react: + specifier: ^0.363.0 + version: 0.363.0(react@18.2.0) + mini-svg-data-uri: + specifier: ^1.4.4 + version: 1.4.4 + next: + specifier: 14.1.4 + version: 14.1.4(react-dom@18.2.0)(react@18.2.0) + next-themes: + specifier: ^0.3.0 + version: 0.3.0(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18 + version: 18.2.0 + react-dom: + specifier: ^18 + version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.51.1 + version: 7.51.1(react@18.2.0) + sonner: + specifier: ^1.4.41 + version: 1.4.41(react-dom@18.2.0)(react@18.2.0) + store2: + specifier: ^2.14.3 + version: 2.14.3 + tailwind-merge: + specifier: ^2.2.2 + version: 2.2.2 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.1) + zod: + specifier: ^3.22.4 + version: 3.22.4 + +devDependencies: + '@types/node': + specifier: ^20 + version: 20.11.30 + '@types/react': + specifier: ^18 + version: 18.2.69 + '@types/react-dom': + specifier: ^18 + version: 18.2.22 + autoprefixer: + specifier: ^10.0.1 + version: 10.4.19(postcss@8.4.38) + postcss: + specifier: ^8 + version: 8.4.38 + tailwindcss: + specifier: ^3.3.0 + version: 3.4.1 + typescript: + specifier: ^5 + version: 5.4.3 + +packages: + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + /@babel/runtime@7.24.1: + resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} + dependencies: + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/dom@1.6.3: + resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==} + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + dev: false + + /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.6.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + dev: false + + /@hookform/resolvers@3.3.4(react-hook-form@7.51.1): + resolution: {integrity: sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ==} + peerDependencies: + react-hook-form: ^7.0.0 + dependencies: + react-hook-form: 7.51.1(react@18.2.0) + dev: false + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@next/env@14.1.4: + resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + dev: false + + /@next/swc-darwin-arm64@14.1.4: + resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@14.1.4: + resolution: {integrity: sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@14.1.4: + resolution: {integrity: sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@14.1.4: + resolution: {integrity: sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@14.1.4: + resolution: {integrity: sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@14.1.4: + resolution: {integrity: sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@14.1.4: + resolution: {integrity: sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@14.1.4: + resolution: {integrity: sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@14.1.4: + resolution: {integrity: sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@radix-ui/number@1.0.1: + resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} + dependencies: + '@babel/runtime': 7.24.1 + dev: false + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.24.1 + dev: false + + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-context@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.69)(react@18.2.0) + dev: false + + /@radix-ui/react-direction@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-id@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.69)(react@18.2.0) + dev: false + + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-slot@1.0.2(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-toast@1.1.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.69)(react@18.2.0) + '@types/react': 18.2.69 + react: 18.2.0 + dev: false + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + 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 + dependencies: + '@babel/runtime': 7.24.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.22)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.69 + '@types/react-dom': 18.2.22 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.24.1 + dev: false + + /@swc/helpers@0.5.2: + resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + dependencies: + tslib: 2.6.2 + dev: false + + /@tomphttp/bare-server-node@2.0.3: + resolution: {integrity: sha512-IGzZspDwzto+oPsvlV99OALJKH3X1nRWnpBE8EY6nrqu5I83xw3uSUacEdHNnW4rXG0IQ8vZwMH87VOMoArJ3A==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + async-exit-hook: 2.0.1 + commander: 10.0.1 + dotenv: 16.4.5 + http-errors: 2.0.0 + ipaddr.js: 2.1.0 + source-map-support: 0.5.21 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@types/node@20.11.30: + resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + /@types/react-dom@18.2.22: + resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} + dependencies: + '@types/react': 18.2.69 + + /@types/react@18.2.69: + resolution: {integrity: sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==} + dependencies: + '@types/prop-types': 15.7.12 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + + /@types/scheduler@0.16.8: + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + /aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.2 + dev: false + + /async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + dev: false + + /autoprefixer@10.4.19(postcss@8.4.38): + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001600 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001600 + electron-to-chromium: 1.4.715 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + /caniuse-lite@1.0.30001600: + resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + + /clsx@2.1.0: + resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + engines: {node: '>=6'} + dev: false + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: false + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /electron-to-chromium@1.4.715: + resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /framer-motion@11.0.25(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-mRt7vQGzA7++wTgb+PW1TrlXXgndqR6hCiJ48fXr2X9alte2hPQiAq556HRwDCt0Q5X98MNvcSe4KUa27Gm5Lg==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + dev: false + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + /lucide-react@0.363.0(react@18.2.0): + resolution: {integrity: sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /mini-svg-data-uri@1.4.4: + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /next-themes@0.3.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /next@14.1.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.1.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001600 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 14.1.4 + '@next/swc-darwin-x64': 14.1.4 + '@next/swc-linux-arm64-gnu': 14.1.4 + '@next/swc-linux-arm64-musl': 14.1.4 + '@next/swc-linux-x64-gnu': 14.1.4 + '@next/swc-linux-x64-musl': 14.1.4 + '@next/swc-win32-arm64-msvc': 14.1.4 + '@next/swc-win32-ia32-msvc': 14.1.4 + '@next/swc-win32-x64-msvc': 14.1.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + /postcss-import@15.1.0(postcss@8.4.38): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + /postcss-js@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.1 + postcss: 8.4.38 + yaml: 2.4.1 + + /postcss-nested@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: false + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-hook-form@7.51.1(react@18.2.0): + resolution: {integrity: sha512-ifnBjl+kW0ksINHd+8C/Gp6a4eZOdWyvRv0UBaByShwU8JbVx5hTcTWEcd5VdybvmPTATkVVXk9npXArHmo56w==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + + /react-remove-scroll-bar@2.3.6(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + 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 + dependencies: + '@types/react': 18.2.69 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.69)(react@18.2.0) + tslib: 2.6.2 + dev: false + + /react-remove-scroll@2.5.5(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + 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 + dependencies: + '@types/react': 18.2.69 + react: 18.2.0 + react-remove-scroll-bar: 2.3.6(@types/react@18.2.69)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.69)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.2(@types/react@18.2.69)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.69)(react@18.2.0) + dev: false + + /react-style-singleton@2.2.1(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + 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 + dependencies: + '@types/react': 18.2.69 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /sonner@1.4.41(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /store2@2.14.3: + resolution: {integrity: sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==} + dev: false + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + + /styled-jsx@5.1.1(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /tailwind-merge@2.2.2: + resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==} + dependencies: + '@babel/runtime': 7.24.1 + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.1 + dev: false + + /tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-import: 15.1.0(postcss@8.4.38) + postcss-js: 4.0.1(postcss@8.4.38) + postcss-load-config: 4.0.2(postcss@8.4.38) + postcss-nested: 6.0.1(postcss@8.4.38) + postcss-selector-parser: 6.0.16 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /typescript@5.4.3: + resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + dev: true + + /use-callback-ref@1.3.2(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + 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 + dependencies: + '@types/react': 18.2.69 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /use-sidecar@1.1.2(@types/react@18.2.69)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.69 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.2 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /yaml@2.4.1: + resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + engines: {node: '>= 14'} + hasBin: true + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..12a703d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/apps.json b/public/apps.json new file mode 100644 index 0000000..18cfc33 --- /dev/null +++ b/public/apps.json @@ -0,0 +1,17 @@ +[ + { + "title": "Roblox", + "image": "https://picsum.photos/id/870/200/300?grayscale&blur=2", + "url": "https://now.gg/play/roblox-corporation/5349/roblox" + }, + { + "title": "Discord", + "image": "/images/discord.png", + "url": "https://discord.com/app" + }, + { + "title": "Temu", + "image": "/images/temu.png", + "url": "https://temu.com" + } +] diff --git a/public/games.json b/public/games.json new file mode 100644 index 0000000..05eee54 --- /dev/null +++ b/public/games.json @@ -0,0 +1,22 @@ +[ + { + "title": "Game 3", + "image": "https://picsum.photos/id/870/200/300?grayscale&blur=2", + "url": "https://assets.3kh0.net/2048" + }, + { + "title": "Game 3", + "image": "https://picsum.photos/id/870/200/300?grayscale&blur=2", + "url": "https://assets.3kh0.net/2048" + }, + { + "title": "Roblox", + "image": "https://picsum.photos/id/870/200/300?grayscale&blur=2", + "url": "https://now.gg/play/roblox-corporation/5349/roblox" + }, + { + "title": "Geforce Now", + "image": "https://picsum.photos/id/870/200/300?grayscale&blur=2", + "url": "https://play.geforcenow.com" + } +] diff --git a/public/globe-dark.png b/public/globe-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7d80d4dc9ca8ac3d9be61cd26e1197d88179a013 GIT binary patch literal 965 zcmV;$13LVPP)Px&e@R3^RA@uhn#t>qQ545NzXfH;KcK8wP^Ohcp)6RDA>)D)idY$T*cnztA;rR& zAyzCDiezOf7Oa$iK!#$$bAG+|?K<7*JkRg-bD!1Q^PGFn`JQv`neID8<;1lo>cnv%U9s=LGDzGbn6^&4vfi*1!xz&KZ4BTtEzO@B5 zHrm?<%xTM5t$PKW0Ipj1vsz##a2!}>WmHK20N4+_Eu=SDU^{RwvGIH03otLk`~@%x zn4X~90h})ZQEGvsz=6nymw*ev7~qkjInuma1T0qXmjJ(jZNQeuzQ=%rIS?fPP6N9F z8{KK%9rnyEzYi%ox4!`MK|BToggoMwvUXK~#~EOE3PcV-O!GUHJB5T7?aO<4M0jl- z0U$u!BW`mxAZ*eSDF7j#{|u}Ho+(BefG@lwOV5#ktWb1{0gw%Js9YG(yfD<74QbzE1)&v7JXH#m5GxA&>j?pn zBy~m6X`lB$|1Q`wWrdg$LuX=>PIjTiFI9$>XtO#J3AFq8(Ipl0qCrI3fMa!09NoPfjyoq{p{=m(6N65aD6}kbW+Pjul2w+PnLd8@Bw`2wStZ= z6@9FJto2|8pretrrqg6oAHa97hs_n>x|R~TWaL}Hnu&`_32QNDO-4Qd9r02wR9wsngR0AE0bp%t zEd8*vfW>{x4UI6dw3Kb!$O78jQVM{sO?|E_D;)x~Zt4X@m$6DJ8kP3LoyIBxz%tk> z9axnPz=U__!Iprqj227Ah9!r0#72uQVw4Vdb500000NkvXXu0mjf4E?ds literal 0 HcmV?d00001 diff --git a/public/globe-light.png b/public/globe-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4589a536507e45936ed5862a7000745c91c9052b GIT binary patch literal 1066 zcmV+_1l9YAP)Px&Apu9#Bg)(479(fKZp@@;k3^R`rQAoK1 z&s;Y~?m(ePMlQ-7FjD>jc@%@6y|m70o!?z+?Y+-AS7)E$K5MV_{r=v+-`YaMf6{RL z^o4+`&H&Z|%YntfTwpdZ%?s!^@CEn`yaQeXPetTMuLA6efU0gNKs3fp(txU-1x_S390G0tQ-Eh?&6(oaDqyvFz6SUM z>;v{B_B|&eC(B5b5>VC4z@f-SBgM1REp@BvY2Z}2PDK9gud0q%NaDGOI1=tZXO`~W zO_4LMh{)j_i7bJPVe?;s zZ6fk2JSak-4L$&v)IzXkMd2IweGUnaNcu#SfLH5#BMk?By^RoM(htCuY9TPGClL~h zV$mr@z-?ed+>O!Y6jwWEUgw)@0a`LUo%HfNbPxN0(IOh(x3gXEwrlXrj|tQFbit5SV$v)i#gJ z;ZfW3s>+!)qQ9U4&82c|F^5|O=&-yI~R8 z+S;#8z?a0|4cMsTCZtaeh|#nSsW~%>IrPj{DIOBA<})rL3o_ELZ9bW3lr=q7{b*{Z zwi$&4Y`t?yM2=1pfm-BM^&)U2z|zjnApslvcZkTnNg`mAS~hyA>UQ96fTf)iLIR(B zE7)3>j6R73R_eeRM=m4a3cj#1_$(sx+REdd)62L)^tM=Rom z8fZL$#+y*%ow#lot(;9Gm1f;MP$`TyK9TiWN|ct;nToV8rG%Sr)+y#{Wm8kk*@&0x z;;I#MKD#!zoc09jHZ<0eyJ={0(zhjqgPCqIHBzM8# z#^*2Wy@88V|LuY!Ako|_CKDl=dC6yrv1VSgMjDf5UUWx@#6C5c15EX6e*rFs4A!Rx kgD`g~y=EN*kU0#00k^rHPYJ5E+5i9m07*qoM6N<$f*j!Fy8r+H literal 0 HcmV?d00001 diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f13e51fbed39e0dad060f0d799f9976c4d4a8618 GIT binary patch literal 18840 zcmX_nc|4Tg`~G>x*iB@QvTup2I7-VJ&SYS8gzk3Xd+~0k z5e}DXL`5zCA}|#7vE0Qh29yjuqX(ne6Dyo zIvp@|Pm%O;n|>n_R}t`Y^VM2pbKs4nA~V{~>v@{%_?zJ7Jvtx=vp&n-Ml>OZqnhc<=pqXpvcaIOS z@KsB*SZByp#w$cc+`D=6rat!!*Oc_P`Md%0Apv>Ru^|t6cG6G7P9>YIxl&?5>S0m5 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 literal 0 HcmV?d00001 diff --git a/public/images/discord.png b/public/images/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbf1bf56d2ccf5b2d2dbd59c42d8bf0ec3eaaea GIT binary patch literal 1902 zcmb`I_dnYS1IOL9swEMp)fln*995|iyOi`Ustr-&P=W^MjH1z6(Gf&_o$X3vrAAay zMU<$E)!5Fid1lcgwji;B$MgI17L*j^*7#@Vj#NbfPUWHn;76+d4Tp@e0_scG^=wz+wmi8_YWSfZyfD#ju)4X+#YQc zqjzZZJxczrllK;o$SEq@r8D+o{^0loZ!;SATRRSJnzIR{o$wgW%q(wlS#*St?;I6v z{F4oVvPN+XnUfO4oiv@Psg2(w2ss}0iG_4++=Bzv-{3D;{CY9A=+5JMuWT2^ig4Jc|#}hKC zA3}BBl=v9L$5g_GdKG4aZo4MU0>St~B4~b8on#efkk%6?Ki{Usimc!EpNz}H0;2KR z6ay(_saCqnC9t!Blq~QZ)=%q_Hjsh<`(zb^dzG(PO2eQ{eJEc|N^1y&40Y^b-Mp+;xL4P;MFul%Nh(7|*9f)1A%?w(KtNBs)4+Px2yHYe=!sDxH zpvJd|ksM68K%pvt8NGTQXCH`2Es+FI^m{D3i4&)Hq*XR=uH=ZheL=2wU%jUz&UR*tOCK@%?vQS2km%_CG#M>qMDY)S4C8$#+R^X`=I~$YU7VT(^2f7hn zRz!zZRKs@8sH{ZZe+g|(;e}k2!btR$Iw$&XOPCCYbEb~;!C5uW4 zUXLj)_&UK^8pL*Xg1@sy9Y2XTrinmeiSKlS^xc<;!3pe7q=vU_OQv-|Wx#;X`a3PW%t`6R!q#E6Nx~KD7R)1u(3+W+(R%USkWY0+2b*{#rBC3& zdJ&s|1mlS_{+WhGK;5`*wlrm8Q6eV?Nx`isa0pQHNo_-_-YWI7Z=w72Jx}RuLVc!cOF|$vqV`s?C=x%z&yW!Pm#+T* lXygfs+vTm3*+}UOb3cn)YW_~H@l>FE=-c;<%YJqt{TGP`zf=GK literal 0 HcmV?d00001 diff --git a/public/images/temu.png b/public/images/temu.png new file mode 100644 index 0000000000000000000000000000000000000000..c9aef46de4bbac97f073f0a89a0632c3a60ca933 GIT binary patch literal 19467 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›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 literal 0 HcmV?d00001 diff --git a/src/app/apps/page.tsx b/src/app/apps/page.tsx new file mode 100644 index 0000000..66dc276 --- /dev/null +++ b/src/app/apps/page.tsx @@ -0,0 +1,43 @@ +'use client' +import { useState, useEffect } from 'react' +import App from '@/components/game' + +interface AppData { + title: string + image: string + url: string +} + +export default function Apps() { + const [Apps, setApps] = useState([]) + + useEffect(() => { + async function fetchApps() { + try { + const response = await fetch('/apps.json') + if (!response.ok) { + throw new Error('Failed to fetch data') + } + const data: AppData[] = await response.json() + setApps(data) + } catch (error) { + console.error('Error fetching data:', error) + } + } + + fetchApps() + }, []) + + return ( +
+

Apps

+
+ {Apps.map((app, index) => ( +
+ +
+ ))} +
+
+ ) +} diff --git a/src/app/games/page.tsx b/src/app/games/page.tsx new file mode 100644 index 0000000..d08f581 --- /dev/null +++ b/src/app/games/page.tsx @@ -0,0 +1,43 @@ +'use client' +import { useState, useEffect } from 'react' +import Game from '@/components/game' + +interface GameData { + title: string + image: string + url: string +} + +export default function Games() { + const [games, setGames] = useState([]) + + useEffect(() => { + async function fetchGames() { + try { + const response = await fetch('/games.json') + if (!response.ok) { + throw new Error('Failed to fetch data') + } + const data: GameData[] = await response.json() + setGames(data) + } catch (error) { + console.error('Error fetching data:', error) + } + } + + fetchGames() + }, []) + + return ( +
+

Games

+
+ {games.map((game, index) => ( +
+ +
+ ))} +
+
+ ) +} diff --git a/src/app/globals.css b/src/app/globals.css new file mode 100644 index 0000000..cffeb47 --- /dev/null +++ b/src/app/globals.css @@ -0,0 +1,120 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 214 27.37% 7.55%; + --foreground: 212 16% 82%; + --muted: 214 12% 16%; + --muted-foreground: 214 12% 66%; + --popover: 214 27% 9%; + --popover-foreground: 212 16% 92%; + --card: 214 23.58% 9.03%; + --card-foreground: 212 16% 87%; + --border: 214 17% 17%; + --input: 214 17% 20%; + --primary: 194.72 85% 45%; + --primary-foreground: 189 85% 5%; + --secondary: 221.89 18.13% 22.46%; + --secondary-foreground: 189 30% 85%; + --accent: 221.89 18.13% 22.46%; + --accent-foreground: 214 27% 87%; + --destructive: 6 96% 59%; + --destructive-foreground: 0 0% 100%; + --ring: 215.09 100% 98.03%; + + --radius: 0.4rem; + } + + .cyberpunk { + --background: 253 41% 19%; + --foreground: 157 100% 50%; + --muted: 253 12% 23%; + --muted-foreground: 253 12% 73%; + --popover: 253 41% 16%; + --popover-foreground: 157 100% 60%; + --card: 253 41% 17%; + --card-foreground: 157 100% 55%; + --border: 253 31% 24%; + --input: 253 31% 27%; + --primary: 167 100% 50%; + --primary-foreground: 167 100% 10%; + --secondary: 167 30% 25%; + --secondary-foreground: 167 30% 85%; + --accent: 253 41% 34%; + --accent-foreground: 254 41% 94%; + --destructive: 5 92% 45%; + --destructive-foreground: 0 0% 100%; + --ring: 167 100% 50%; + } + + .bluelight { + --background: 230 8% 85%; + --foreground: 229 26% 28%; + --muted: 230 12% 81%; + --muted-foreground: 230 12% 21%; + --popover: 230 8% 82%; + --popover-foreground: 229 26% 18%; + --card: 230 8% 83%; + --card-foreground: 229 26% 23%; + --border: 0 0% 80%; + --input: 0 0% 77%; + --primary: 223 42% 57%; + --primary-foreground: 0 0% 100%; + --secondary: 223 30% 75%; + --secondary-foreground: 223 30% 15%; + --accent: 230 8% 70%; + --accent-foreground: 230 8% 10%; + --destructive: 2 82% 30%; + --destructive-foreground: 2 82% 90%; + --ring: 223 42% 57%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +@layer base { + .loader { + display: inline-block; + position: relative; + width: 80px; + height: 80px; + } + .loader div { + box-sizing: border-box; + display: block; + position: absolute; + width: 64px; + height: 64px; + margin: 8px; + border: 8px solid #fff; + border-radius: 50%; + animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + border-color: #fff transparent transparent transparent; + } + .loader div:nth-child(1) { + animation-delay: -0.45s; + } + .loader div:nth-child(2) { + animation-delay: -0.3s; + } + .loader div:nth-child(3) { + animation-delay: -0.15s; + } + @keyframes lds-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } + } +} diff --git a/src/app/go/[...route]/page.tsx b/src/app/go/[...route]/page.tsx new file mode 100644 index 0000000..23fd5ec --- /dev/null +++ b/src/app/go/[...route]/page.tsx @@ -0,0 +1,131 @@ +'use client' +import Sidebar from '@/components/sidebar' +import { Button } from '@/components/ui/button' +import { encodeXor, formatSearch } from '@/lib/utils' +import { useEffect, useRef, useState } from 'react' +import store from 'store2' +import * as Lucide from 'lucide-react' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' + +interface ContentWindow extends Window { + __uv$location: Location +} + +export default function Route({ params }: { params: { route: string[] } }) { + const ref = useRef(null) + const [open, setOpen] = useState(false) + const route = params.route.join('/') + + const [tabIcon, setTabIcon] = useState('') + const [tabName, setTabName] = useState('') + const [shortcutted, setShortcutted] = useState(false) + + useEffect(() => { + if ('serviceWorker' in navigator) { + navigator.serviceWorker + .register('/uv/sw.js', { + scope: '/uv/service' + }) + .then(() => { + if (ref.current) { + ref.current.src = '/uv/service/' + encodeXor(formatSearch(atob(decodeURIComponent(route)))) + } + }) + } + }, []) + + function triggerShortcut() { + store.set('shortcuts', [], false) + if (!ref.current || !ref.current.contentWindow) return + const contentWindow = ref.current.contentWindow as ContentWindow + if (!('__uv$location' in contentWindow)) return + const shortcuts: any[] = store('shortcuts') + + if (shortcuts.some((value) => value.url == contentWindow.__uv$location.href)) { + store( + 'shortcuts', + shortcuts.filter((value) => value.url !== contentWindow.__uv$location.href) + ) + setShortcutted(false) + } else { + store('shortcuts', [ + ...store('shortcuts'), + { + image: (contentWindow.document.querySelector("link[rel*='icon']") as HTMLLinkElement)?.href || `${contentWindow.__uv$location.origin}/favicon.ico`, + title: contentWindow.document.title, + url: contentWindow.__uv$location.href + } + ]) + setShortcutted(true) + } + } + + function handleLoad() { + if (!ref.current || !ref.current.contentWindow) return + const contentWindow = ref.current.contentWindow as ContentWindow + + setTabName(contentWindow.document.title) + setTabIcon((contentWindow.document.querySelector("link[rel*='icon']") as HTMLLinkElement)?.href || `${contentWindow.__uv$location.origin}/favicon.ico`) + + store.set('shortcuts', [], false) + const shortcuts: any[] = store('shortcuts') + if (shortcuts.some((value) => value.url == contentWindow.__uv$location.href)) { + setShortcutted(true) + } + } + return ( +
+
+
+ +
+ {tabIcon ? : } +

{tabName ? tabName : 'Radius'}

+
+
+
+ + + + + + Back + + + + + + + Reload + + + + + + + Shortcut + + +
+ + +
+ + +
+ +
+
+ ) +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..526d48c --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,31 @@ +import type { Metadata } from 'next' +import { Inter } from 'next/font/google' +import './globals.css' +import Navbar from '@/components/navbar' + +const inter = Inter({ subsets: ['latin'] }) + +export const metadata: Metadata = { + title: 'Radius', + description: '' +} + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + + + + + + + +
{children}
+ + + ) +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..3a154fb --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,49 @@ +'use client' +import Shortcut from '@/components/shortcut' +import { Input } from '@/components/ui/input' +import { Flame, Radius, Search } from 'lucide-react' +import { useEffect, useState } from 'react' +import { useRouter } from 'next/navigation' +import { Item } from '@/lib/types' +import store from 'store2' + +export default function Home() { + const router = useRouter() + const [shortcuts, setShortcuts] = useState([]) + useEffect(() => { + store.set('shortcuts', [], false) + const data: Item[] = store('shortcuts') + setShortcuts(data) + }, []) + + return ( +
+
+
+ +

Radius

+
+
+
+ { + if (e.key !== 'Enter') return + router.push(`/go/${btoa(e.currentTarget.value)}`) + }} + /> + +
+
+ {shortcuts.length > 0 && ( +
+ {shortcuts.map((shortcut: Item) => { + return + })} +
+ )} +
+
+ ) +} diff --git a/src/app/settings/appearance/page.tsx b/src/app/settings/appearance/page.tsx new file mode 100644 index 0000000..0c48983 --- /dev/null +++ b/src/app/settings/appearance/page.tsx @@ -0,0 +1,68 @@ +'use client' + +import { zodResolver } from '@hookform/resolvers/zod' +import { useForm } from 'react-hook-form' +import { z } from 'zod' + +import { Button } from '@/components/ui/button' +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form' +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' + +import { Input } from '@/components/ui/input' +import { Separator } from '@/components/ui/separator' +import { Textarea } from '@/components/ui/textarea' +import { Save } from 'lucide-react' +import { useState } from 'react' +import { toast } from 'sonner' + +const formSchema = z.object({ + backgroundImage: z.string(), + description: z.string() +}) + +export default function Settings() { + const [submitting, setSubmitting] = useState(false) + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + backgroundImage: '' + } + }) + + function onSubmit(values: z.infer) { + setSubmitting(true) + + setTimeout(() => { + setSubmitting(false) + toast.success('Settings saved') + }, 1000) + console.log(values) + } + return ( +
+

Appearance

+ +
+ + ( + + Background Image + + + + + + )} + /> + + + + +
+ ) +} diff --git a/src/app/settings/layout.tsx b/src/app/settings/layout.tsx new file mode 100644 index 0000000..8c230e1 --- /dev/null +++ b/src/app/settings/layout.tsx @@ -0,0 +1,29 @@ +'use client' + +import { Button } from '@/components/ui/button' +import { Images, Link, Palette } from 'lucide-react' +import NextLink from 'next/link' + +import { usePathname } from 'next/navigation' + +export default function SettingsLayout({ children }: Readonly<{ children: React.ReactNode }>) { + const pathname = usePathname() + return ( +
+
+ + + + + +
+
{children}
+
+ ) +} diff --git a/src/app/uv/[uv]/route.ts b/src/app/uv/[uv]/route.ts new file mode 100644 index 0000000..c00a32f --- /dev/null +++ b/src/app/uv/[uv]/route.ts @@ -0,0 +1,29 @@ +import fs from 'fs' +import { notFound } from 'next/navigation' +import { NextRequest } from 'next/server' + +export async function GET(_req: NextRequest, { params }: { params: { uv: string } }) { + const requestedFile = params.uv + if (requestedFile === 'uv.config.js' || requestedFile === 'sw.js') { + const file = fs.readFileSync(process.cwd() + `/src/lib/uv/${requestedFile}`) + const fileBlob = new Blob([file]) + return new Response(fileBlob, { + headers: { + 'Content-Type': 'application/javascript' + } + }) + } else { + try { + const res = await fetch(`https://unpkg.com/@titaniumnetwork-dev/ultraviolet@2.0.0/dist/${requestedFile}`) + const file = await res.text() + const fileBlob = new Blob([file]) + return new Response(fileBlob, { + headers: { + 'Content-Type': 'application/javascript' + } + }) + } catch { + notFound() + } + } +} diff --git a/src/components/app.tsx b/src/components/app.tsx new file mode 100644 index 0000000..dfdd42f --- /dev/null +++ b/src/components/app.tsx @@ -0,0 +1,21 @@ +'use client' +import { useRouter } from 'next/navigation' + +import { Item } from '@/lib/types' + +export default function App({ title, image, url }: Item) { + const router = useRouter() + return ( +
{ + router.push(`/go/${btoa(url)}`) + }} + > + +
+

{title}

+
+
+ ) +} diff --git a/src/components/game.tsx b/src/components/game.tsx new file mode 100644 index 0000000..4b548f8 --- /dev/null +++ b/src/components/game.tsx @@ -0,0 +1,20 @@ +'use client' +import { useRouter } from 'next/navigation' +import { Item } from '@/lib/types' + +export default function Game({ title, image, url }: Item) { + const router = useRouter() + return ( +
{ + router.push(`/go/${btoa(url)}`) + }} + > + +
+

{title}

+
+
+ ) +} diff --git a/src/components/navbar.tsx b/src/components/navbar.tsx new file mode 100644 index 0000000..3dbfb0a --- /dev/null +++ b/src/components/navbar.tsx @@ -0,0 +1,30 @@ +'use client' +import * as Lucide from 'lucide-react' +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './ui/tooltip' +import { usePathname } from 'next/navigation' +import { Button } from './ui/button' +import { useState } from 'react' +import Sidebar from './sidebar' + +export default function Navbar() { + const [open, setOpen] = useState(false) + const pathname = usePathname() + + if (pathname && pathname.includes('/go/')) return null + + return ( +
+
+ +
+ +

Radius

+
+
+ + +
+ ) +} diff --git a/src/components/shortcut.tsx b/src/components/shortcut.tsx new file mode 100644 index 0000000..14c3d5e --- /dev/null +++ b/src/components/shortcut.tsx @@ -0,0 +1,31 @@ +import { Item } from '@/lib/types' +import { Ellipsis, Pen, Pencil, SquarePen, X } from 'lucide-react' +import { useRouter } from 'next/navigation' +import store from 'store2' + +export default function Shortcut({ image, title, url }: Item) { + function removeShortcut() { + const shortcuts: Item[] = store('shortcuts') + store( + 'shortcuts', + shortcuts.filter((value) => value.url !== url) + ) + location.reload() + } + const router = useRouter() + return ( +
{ + router.push(`/go/${btoa(url)}`) + }} + > + + {title &&

{title}

} + +
+ +
+
+ ) +} diff --git a/src/components/sidebar.tsx b/src/components/sidebar.tsx new file mode 100644 index 0000000..dfb18d4 --- /dev/null +++ b/src/components/sidebar.tsx @@ -0,0 +1,48 @@ +'use client' +import { Sheet, SheetContent, SheetHeader, SheetTitle } from '@/components/ui/sheet' +import * as Lucide from 'lucide-react' +import { Button } from './ui/button' +import { usePathname } from 'next/navigation' +import Link from 'next/link' +import { Separator } from './ui/separator' + +export default function Sidebar({ open, onOpenChange }: { open: boolean; onOpenChange: (open: boolean) => void }) { + const pathname = usePathname() + return ( + + + + + + + + +
+ onOpenChange(false)}> + + + + onOpenChange(false)}> + + + onOpenChange(false)}> + + + + + onOpenChange(false)}> + + +
+
+
+ ) +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..cc0d444 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,40 @@ +import * as React from 'react' +import { Slot } from '@radix-ui/react-slot' +import { cva, type VariantProps } from 'class-variance-authority' + +import { cn } from '@/lib/utils' + +const buttonVariants = cva('inline-flex items-center justify-center whitespace-nowrap rounded-lg 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 +} + +const Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : 'button' + return +}) +Button.displayName = 'Button' + +export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..afa13ec --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/form.tsx b/src/components/ui/form.tsx new file mode 100644 index 0000000..4603f8b --- /dev/null +++ b/src/components/ui/form.tsx @@ -0,0 +1,176 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { Slot } from "@radix-ui/react-slot" +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from "react-hook-form" + +import { cn } from "@/lib/utils" +import { Label } from "@/components/ui/label" + +const Form = FormProvider + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> = { + name: TName +} + +const FormFieldContext = React.createContext( + {} as FormFieldContextValue +) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error("useFormField should be used within ") + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} + +type FormItemContextValue = { + id: string +} + +const FormItemContext = React.createContext( + {} as FormItemContextValue +) + +const FormItem = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ 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 ( +