shadcn & theme toggle
This commit is contained in:
		
							
								
								
									
										29
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								README.md
									
									
									
									
									
								
							@@ -1,29 +0,0 @@
 | 
				
			|||||||
# Create T3 App
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This is a [T3 Stack](https://create.t3.gg/) project bootstrapped with `create-t3-app`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## What's next? How do I make an app with this?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
We try to keep this project as simple as possible, so you can start with just the scaffolding we set up for you, and add additional things later when they become necessary.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you are not familiar with the different technologies used in this project, please refer to the respective docs. If you still are in the wind, please join our [Discord](https://t3.gg/discord) and ask for help.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [Next.js](https://nextjs.org)
 | 
					 | 
				
			||||||
- [NextAuth.js](https://next-auth.js.org)
 | 
					 | 
				
			||||||
- [Prisma](https://prisma.io)
 | 
					 | 
				
			||||||
- [Drizzle](https://orm.drizzle.team)
 | 
					 | 
				
			||||||
- [Tailwind CSS](https://tailwindcss.com)
 | 
					 | 
				
			||||||
- [tRPC](https://trpc.io)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Learn More
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To learn more about the [T3 Stack](https://create.t3.gg/), take a look at the following resources:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [Documentation](https://create.t3.gg/)
 | 
					 | 
				
			||||||
- [Learn the T3 Stack](https://create.t3.gg/en/faq#what-learning-resources-are-currently-available) — Check out these awesome tutorials
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can check out the [create-t3-app GitHub repository](https://github.com/t3-oss/create-t3-app) — your feedback and contributions are welcome!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## How do I deploy this?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Follow our deployment guides for [Vercel](https://create.t3.gg/en/deployment/vercel), [Netlify](https://create.t3.gg/en/deployment/netlify) and [Docker](https://create.t3.gg/en/deployment/docker) for more information.
 | 
					 | 
				
			||||||
							
								
								
									
										20
									
								
								components.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								components.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "$schema": "https://ui.shadcn.com/schema.json",
 | 
				
			||||||
 | 
					  "style": "new-york",
 | 
				
			||||||
 | 
					  "rsc": true,
 | 
				
			||||||
 | 
					  "tsx": true,
 | 
				
			||||||
 | 
					  "tailwind": {
 | 
				
			||||||
 | 
					    "config": "tailwind.config.ts",
 | 
				
			||||||
 | 
					    "css": "src/styles/globals.css",
 | 
				
			||||||
 | 
					    "baseColor": "zinc",
 | 
				
			||||||
 | 
					    "cssVariables": true,
 | 
				
			||||||
 | 
					    "prefix": ""
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "aliases": {
 | 
				
			||||||
 | 
					    "components": "~/components",
 | 
				
			||||||
 | 
					    "utils": "~/lib/utils",
 | 
				
			||||||
 | 
					    "ui": "~/components/ui",
 | 
				
			||||||
 | 
					    "lib": "~/lib",
 | 
				
			||||||
 | 
					    "hooks": "~/hooks"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							@@ -14,13 +14,23 @@
 | 
				
			|||||||
    "start": "next start"
 | 
					    "start": "next start"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "@radix-ui/react-accordion": "^1.2.0",
 | 
				
			||||||
 | 
					    "@radix-ui/react-dropdown-menu": "^2.1.1",
 | 
				
			||||||
 | 
					    "@radix-ui/react-icons": "^1.3.0",
 | 
				
			||||||
 | 
					    "@radix-ui/react-slot": "^1.1.0",
 | 
				
			||||||
    "@t3-oss/env-nextjs": "^0.10.1",
 | 
					    "@t3-oss/env-nextjs": "^0.10.1",
 | 
				
			||||||
 | 
					    "class-variance-authority": "^0.7.0",
 | 
				
			||||||
 | 
					    "clsx": "^2.1.1",
 | 
				
			||||||
    "drizzle-orm": "^0.33.0",
 | 
					    "drizzle-orm": "^0.33.0",
 | 
				
			||||||
    "geist": "^1.3.0",
 | 
					    "geist": "^1.3.0",
 | 
				
			||||||
 | 
					    "lucide-react": "^0.441.0",
 | 
				
			||||||
    "next": "^14.2.4",
 | 
					    "next": "^14.2.4",
 | 
				
			||||||
 | 
					    "next-themes": "^0.3.0",
 | 
				
			||||||
    "postgres": "^3.4.4",
 | 
					    "postgres": "^3.4.4",
 | 
				
			||||||
    "react": "^18.3.1",
 | 
					    "react": "^18.3.1",
 | 
				
			||||||
    "react-dom": "^18.3.1",
 | 
					    "react-dom": "^18.3.1",
 | 
				
			||||||
 | 
					    "tailwind-merge": "^2.5.2",
 | 
				
			||||||
 | 
					    "tailwindcss-animate": "^1.0.7",
 | 
				
			||||||
    "zod": "^3.23.3"
 | 
					    "zod": "^3.23.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										791
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										791
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -8,18 +8,42 @@ importers:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  .:
 | 
					  .:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-accordion':
 | 
				
			||||||
 | 
					        specifier: ^1.2.0
 | 
				
			||||||
 | 
					        version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-dropdown-menu':
 | 
				
			||||||
 | 
					        specifier: ^2.1.1
 | 
				
			||||||
 | 
					        version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-icons':
 | 
				
			||||||
 | 
					        specifier: ^1.3.0
 | 
				
			||||||
 | 
					        version: 1.3.0(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot':
 | 
				
			||||||
 | 
					        specifier: ^1.1.0
 | 
				
			||||||
 | 
					        version: 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
      '@t3-oss/env-nextjs':
 | 
					      '@t3-oss/env-nextjs':
 | 
				
			||||||
        specifier: ^0.10.1
 | 
					        specifier: ^0.10.1
 | 
				
			||||||
        version: 0.10.1(typescript@5.6.2)(zod@3.23.8)
 | 
					        version: 0.10.1(typescript@5.6.2)(zod@3.23.8)
 | 
				
			||||||
 | 
					      class-variance-authority:
 | 
				
			||||||
 | 
					        specifier: ^0.7.0
 | 
				
			||||||
 | 
					        version: 0.7.0
 | 
				
			||||||
 | 
					      clsx:
 | 
				
			||||||
 | 
					        specifier: ^2.1.1
 | 
				
			||||||
 | 
					        version: 2.1.1
 | 
				
			||||||
      drizzle-orm:
 | 
					      drizzle-orm:
 | 
				
			||||||
        specifier: ^0.33.0
 | 
					        specifier: ^0.33.0
 | 
				
			||||||
        version: 0.33.0(@types/react@18.3.5)(postgres@3.4.4)(react@18.3.1)
 | 
					        version: 0.33.0(@types/react@18.3.5)(postgres@3.4.4)(react@18.3.1)
 | 
				
			||||||
      geist:
 | 
					      geist:
 | 
				
			||||||
        specifier: ^1.3.0
 | 
					        specifier: ^1.3.0
 | 
				
			||||||
        version: 1.3.1(next@14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
 | 
					        version: 1.3.1(next@14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
 | 
				
			||||||
 | 
					      lucide-react:
 | 
				
			||||||
 | 
					        specifier: ^0.441.0
 | 
				
			||||||
 | 
					        version: 0.441.0(react@18.3.1)
 | 
				
			||||||
      next:
 | 
					      next:
 | 
				
			||||||
        specifier: ^14.2.4
 | 
					        specifier: ^14.2.4
 | 
				
			||||||
        version: 14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
					        version: 14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      next-themes:
 | 
				
			||||||
 | 
					        specifier: ^0.3.0
 | 
				
			||||||
 | 
					        version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
      postgres:
 | 
					      postgres:
 | 
				
			||||||
        specifier: ^3.4.4
 | 
					        specifier: ^3.4.4
 | 
				
			||||||
        version: 3.4.4
 | 
					        version: 3.4.4
 | 
				
			||||||
@@ -29,6 +53,12 @@ importers:
 | 
				
			|||||||
      react-dom:
 | 
					      react-dom:
 | 
				
			||||||
        specifier: ^18.3.1
 | 
					        specifier: ^18.3.1
 | 
				
			||||||
        version: 18.3.1(react@18.3.1)
 | 
					        version: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					      tailwind-merge:
 | 
				
			||||||
 | 
					        specifier: ^2.5.2
 | 
				
			||||||
 | 
					        version: 2.5.2
 | 
				
			||||||
 | 
					      tailwindcss-animate:
 | 
				
			||||||
 | 
					        specifier: ^1.0.7
 | 
				
			||||||
 | 
					        version: 1.0.7(tailwindcss@3.4.11)
 | 
				
			||||||
      zod:
 | 
					      zod:
 | 
				
			||||||
        specifier: ^3.23.3
 | 
					        specifier: ^3.23.3
 | 
				
			||||||
        version: 3.23.8
 | 
					        version: 3.23.8
 | 
				
			||||||
@@ -382,6 +412,21 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
 | 
					    resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
 | 
				
			||||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
					    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/core@1.6.8':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/dom@1.6.11':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/react-dom@2.1.2':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      react: '>=16.8.0'
 | 
				
			||||||
 | 
					      react-dom: '>=16.8.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/utils@0.2.8':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@humanwhocodes/config-array@0.11.14':
 | 
					  '@humanwhocodes/config-array@0.11.14':
 | 
				
			||||||
    resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
 | 
					    resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
 | 
				
			||||||
    engines: {node: '>=10.10.0'}
 | 
					    engines: {node: '>=10.10.0'}
 | 
				
			||||||
@@ -497,6 +542,294 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
 | 
					    resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
 | 
				
			||||||
    engines: {node: '>=14'}
 | 
					    engines: {node: '>=14'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/primitive@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-accordion@1.2.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-HJOzSX8dQqtsp/3jVxCU3CXEONF7/2jlGAB28oX8TTw1Dz8JYbEI1UcL8355PuLBE41/IRRMvCw7VkiK/jcUOQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-arrow@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-collapsible@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-zQY7Epa8sTL0mq4ajSJpjgn2YmCgyrG7RsQgLp3C0LQVkG7+Tf6Pv1CeNWZLyqMjhdPkBa5Lx7wYBeSu7uCSTA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-collection@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-compose-refs@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-context@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-direction@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dismissable-layer@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dropdown-menu@2.1.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-guards@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-scope@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-icons@1.3.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      react: ^16.x || ^17.x || ^18.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-id@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-menu@2.1.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-popper@1.2.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-portal@1.1.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-presence@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-primitive@2.0.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-roving-focus@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-slot@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-callback-ref@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-controllable-state@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-escape-keydown@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-layout-effect@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-rect@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-size@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/rect@1.1.0':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@rtsao/scc@1.1.0':
 | 
					  '@rtsao/scc@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
 | 
					    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -714,6 +1047,10 @@ packages:
 | 
				
			|||||||
  argparse@2.0.1:
 | 
					  argparse@2.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 | 
					    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aria-hidden@1.2.4:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==}
 | 
				
			||||||
 | 
					    engines: {node: '>=10'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  aria-query@5.1.3:
 | 
					  aria-query@5.1.3:
 | 
				
			||||||
    resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
 | 
					    resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -815,9 +1152,20 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
 | 
					    resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
 | 
				
			||||||
    engines: {node: '>= 8.10.0'}
 | 
					    engines: {node: '>= 8.10.0'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class-variance-authority@0.7.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  client-only@0.0.1:
 | 
					  client-only@0.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
 | 
					    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  clsx@2.0.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
 | 
				
			||||||
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  clsx@2.1.1:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
 | 
				
			||||||
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  color-convert@2.0.1:
 | 
					  color-convert@2.0.1:
 | 
				
			||||||
    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
 | 
					    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
 | 
				
			||||||
    engines: {node: '>=7.0.0'}
 | 
					    engines: {node: '>=7.0.0'}
 | 
				
			||||||
@@ -891,6 +1239,9 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
 | 
					    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  detect-node-es@1.1.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  didyoumean@1.2.2:
 | 
					  didyoumean@1.2.2:
 | 
				
			||||||
    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
 | 
					    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1249,6 +1600,10 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
 | 
					    resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get-nonce@1.0.1:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
 | 
				
			||||||
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get-symbol-description@1.0.2:
 | 
					  get-symbol-description@1.0.2:
 | 
				
			||||||
    resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
 | 
					    resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
@@ -1347,6 +1702,9 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
 | 
					    resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  invariant@2.2.4:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  is-arguments@1.1.1:
 | 
					  is-arguments@1.1.1:
 | 
				
			||||||
    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
 | 
					    resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
@@ -1546,6 +1904,11 @@ packages:
 | 
				
			|||||||
  lru-cache@10.4.3:
 | 
					  lru-cache@10.4.3:
 | 
				
			||||||
    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
 | 
					    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  lucide-react@0.441.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  merge2@1.4.1:
 | 
					  merge2@1.4.1:
 | 
				
			||||||
    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
 | 
					    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
 | 
				
			||||||
    engines: {node: '>= 8'}
 | 
					    engines: {node: '>= 8'}
 | 
				
			||||||
@@ -1586,6 +1949,12 @@ packages:
 | 
				
			|||||||
  natural-compare@1.4.0:
 | 
					  natural-compare@1.4.0:
 | 
				
			||||||
    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
 | 
					    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  next-themes@0.3.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17 || ^18
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17 || ^18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  next@14.2.11:
 | 
					  next@14.2.11:
 | 
				
			||||||
    resolution: {integrity: sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==}
 | 
					    resolution: {integrity: sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==}
 | 
				
			||||||
    engines: {node: '>=18.17.0'}
 | 
					    engines: {node: '>=18.17.0'}
 | 
				
			||||||
@@ -1843,6 +2212,36 @@ packages:
 | 
				
			|||||||
  react-is@16.13.1:
 | 
					  react-is@16.13.1:
 | 
				
			||||||
    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
 | 
					    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll-bar@2.3.6:
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll@2.5.7:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-style-singleton@2.2.1:
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react@18.3.1:
 | 
					  react@18.3.1:
 | 
				
			||||||
    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
 | 
					    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
 | 
				
			||||||
    engines: {node: '>=0.10.0'}
 | 
					    engines: {node: '>=0.10.0'}
 | 
				
			||||||
@@ -2027,6 +2426,14 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
 | 
					    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tailwind-merge@2.5.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tailwindcss-animate@1.0.7:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      tailwindcss: '>=3.0.0 || insiders'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  tailwindcss@3.4.11:
 | 
					  tailwindcss@3.4.11:
 | 
				
			||||||
    resolution: {integrity: sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==}
 | 
					    resolution: {integrity: sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==}
 | 
				
			||||||
    engines: {node: '>=14.0.0'}
 | 
					    engines: {node: '>=14.0.0'}
 | 
				
			||||||
@@ -2103,6 +2510,26 @@ packages:
 | 
				
			|||||||
  uri-js@4.4.1:
 | 
					  uri-js@4.4.1:
 | 
				
			||||||
    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
 | 
					    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use-callback-ref@1.3.2:
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use-sidecar@1.1.2:
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  util-deprecate@1.0.2:
 | 
					  util-deprecate@1.0.2:
 | 
				
			||||||
    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 | 
					    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2327,6 +2754,23 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  '@eslint/js@8.57.0': {}
 | 
					  '@eslint/js@8.57.0': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/core@1.6.8':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@floating-ui/utils': 0.2.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/dom@1.6.11':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@floating-ui/core': 1.6.8
 | 
				
			||||||
 | 
					      '@floating-ui/utils': 0.2.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@floating-ui/dom': 1.6.11
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@floating-ui/utils@0.2.8': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@humanwhocodes/config-array@0.11.14':
 | 
					  '@humanwhocodes/config-array@0.11.14':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@humanwhocodes/object-schema': 2.0.3
 | 
					      '@humanwhocodes/object-schema': 2.0.3
 | 
				
			||||||
@@ -2415,6 +2859,275 @@ snapshots:
 | 
				
			|||||||
  '@pkgjs/parseargs@0.11.0':
 | 
					  '@pkgjs/parseargs@0.11.0':
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/primitive@1.1.0': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-accordion@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-collapsible': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-direction': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-collapsible@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-context@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-direction@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-icons@1.3.0(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-id@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-direction': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      aria-hidden: 1.2.4
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					      react-remove-scroll: 2.5.7(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/rect': 1.1.0
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
 | 
					      '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-direction': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-slot@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-rect@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/rect': 1.1.0
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-size@1.1.0(@types/react@18.3.5)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/rect@1.1.0': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@rtsao/scc@1.1.0': {}
 | 
					  '@rtsao/scc@1.1.0': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@rushstack/eslint-patch@1.10.4': {}
 | 
					  '@rushstack/eslint-patch@1.10.4': {}
 | 
				
			||||||
@@ -2670,6 +3383,10 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  argparse@2.0.1: {}
 | 
					  argparse@2.0.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  aria-hidden@1.2.4:
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  aria-query@5.1.3:
 | 
					  aria-query@5.1.3:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      deep-equal: 2.2.3
 | 
					      deep-equal: 2.2.3
 | 
				
			||||||
@@ -2805,8 +3522,16 @@ snapshots:
 | 
				
			|||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      fsevents: 2.3.3
 | 
					      fsevents: 2.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class-variance-authority@0.7.0:
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      clsx: 2.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  client-only@0.0.1: {}
 | 
					  client-only@0.0.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  clsx@2.0.0: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  clsx@2.1.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  color-convert@2.0.1:
 | 
					  color-convert@2.0.1:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      color-name: 1.1.4
 | 
					      color-name: 1.1.4
 | 
				
			||||||
@@ -2890,6 +3615,8 @@ snapshots:
 | 
				
			|||||||
      has-property-descriptors: 1.0.2
 | 
					      has-property-descriptors: 1.0.2
 | 
				
			||||||
      object-keys: 1.1.1
 | 
					      object-keys: 1.1.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  detect-node-es@1.1.0: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  didyoumean@1.2.2: {}
 | 
					  didyoumean@1.2.2: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dir-glob@3.0.1:
 | 
					  dir-glob@3.0.1:
 | 
				
			||||||
@@ -3386,6 +4113,8 @@ snapshots:
 | 
				
			|||||||
      has-symbols: 1.0.3
 | 
					      has-symbols: 1.0.3
 | 
				
			||||||
      hasown: 2.0.2
 | 
					      hasown: 2.0.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get-nonce@1.0.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get-symbol-description@1.0.2:
 | 
					  get-symbol-description@1.0.2:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      call-bind: 1.0.7
 | 
					      call-bind: 1.0.7
 | 
				
			||||||
@@ -3498,6 +4227,10 @@ snapshots:
 | 
				
			|||||||
      hasown: 2.0.2
 | 
					      hasown: 2.0.2
 | 
				
			||||||
      side-channel: 1.0.6
 | 
					      side-channel: 1.0.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  invariant@2.2.4:
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      loose-envify: 1.4.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  is-arguments@1.1.1:
 | 
					  is-arguments@1.1.1:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      call-bind: 1.0.7
 | 
					      call-bind: 1.0.7
 | 
				
			||||||
@@ -3687,6 +4420,10 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  lru-cache@10.4.3: {}
 | 
					  lru-cache@10.4.3: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  lucide-react@0.441.0(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  merge2@1.4.1: {}
 | 
					  merge2@1.4.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  micromatch@4.0.8:
 | 
					  micromatch@4.0.8:
 | 
				
			||||||
@@ -3722,6 +4459,11 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  natural-compare@1.4.0: {}
 | 
					  natural-compare@1.4.0: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  next@14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
					  next@14.2.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@next/env': 14.2.11
 | 
					      '@next/env': 14.2.11
 | 
				
			||||||
@@ -3917,6 +4659,34 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  react-is@16.13.1: {}
 | 
					  react-is@16.13.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll-bar@2.3.6(@types/react@18.3.5)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-style-singleton: 2.2.1(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll@2.5.7(@types/react@18.3.5)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-remove-scroll-bar: 2.3.6(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      react-style-singleton: 2.2.1(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					      use-callback-ref: 1.3.2(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					      use-sidecar: 1.1.2(@types/react@18.3.5)(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-style-singleton@2.2.1(@types/react@18.3.5)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      get-nonce: 1.0.1
 | 
				
			||||||
 | 
					      invariant: 2.2.4
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react@18.3.1:
 | 
					  react@18.3.1:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      loose-envify: 1.4.0
 | 
					      loose-envify: 1.4.0
 | 
				
			||||||
@@ -4130,6 +4900,12 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  supports-preserve-symlinks-flag@1.0.0: {}
 | 
					  supports-preserve-symlinks-flag@1.0.0: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tailwind-merge@2.5.2: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tailwindcss-animate@1.0.7(tailwindcss@3.4.11):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      tailwindcss: 3.4.11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  tailwindcss@3.4.11:
 | 
					  tailwindcss@3.4.11:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@alloc/quick-lru': 5.2.0
 | 
					      '@alloc/quick-lru': 5.2.0
 | 
				
			||||||
@@ -4241,6 +5017,21 @@ snapshots:
 | 
				
			|||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      punycode: 2.3.1
 | 
					      punycode: 2.3.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use-callback-ref@1.3.2(@types/react@18.3.5)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use-sidecar@1.1.2(@types/react@18.3.5)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      detect-node-es: 1.1.0
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      tslib: 2.7.0
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  util-deprecate@1.0.2: {}
 | 
					  util-deprecate@1.0.2: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  which-boxed-primitive@1.0.2:
 | 
					  which-boxed-primitive@1.0.2:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@ import "~/styles/globals.css";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { GeistSans } from "geist/font/sans";
 | 
					import { GeistSans } from "geist/font/sans";
 | 
				
			||||||
import { type Metadata } from "next";
 | 
					import { type Metadata } from "next";
 | 
				
			||||||
 | 
					import { ThemeProvider } from "~/components/theme/themeprovider"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const metadata: Metadata = {
 | 
					export const metadata: Metadata = {
 | 
				
			||||||
  title: "Create T3 App",
 | 
					  title: "Create T3 App",
 | 
				
			||||||
@@ -14,7 +15,16 @@ export default function RootLayout({
 | 
				
			|||||||
}: Readonly<{ children: React.ReactNode }>) {
 | 
					}: Readonly<{ children: React.ReactNode }>) {
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <html lang="en" className={`${GeistSans.variable}`}>
 | 
					    <html lang="en" className={`${GeistSans.variable}`}>
 | 
				
			||||||
      <body>{children}</body>
 | 
					      <body>
 | 
				
			||||||
 | 
					        < ThemeProvider
 | 
				
			||||||
 | 
					          attribute="class"
 | 
				
			||||||
 | 
					          defaultTheme="system"
 | 
				
			||||||
 | 
					          enableSystem
 | 
				
			||||||
 | 
					          disableTransitionOnChange
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          {children}
 | 
				
			||||||
 | 
					        </ThemeProvider>
 | 
				
			||||||
 | 
					      </body>
 | 
				
			||||||
    </html>
 | 
					    </html>
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,35 +1,12 @@
 | 
				
			|||||||
import Link from "next/link";
 | 
					import Link from "next/link";
 | 
				
			||||||
 | 
					import { ModeToggle } from "~/components/theme/themetoggle";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function HomePage() {
 | 
					export default function HomePage() {
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <main className="flex min-h-screen flex-col items-center justify-center bg-gradient-to-b from-[#2e026d] to-[#15162c] text-white">
 | 
					    <main className="min-h-screen">
 | 
				
			||||||
      <div className="container flex flex-col items-center justify-center gap-12 px-4 py-16">
 | 
					      <div className="flex flex-row items-end justify-end">
 | 
				
			||||||
        <h1 className="text-5xl font-extrabold tracking-tight text-white sm:text-[5rem]">
 | 
					        <div className="mr-8 mt-6">
 | 
				
			||||||
          Create <span className="text-[hsl(280,100%,70%)]">T3</span> App
 | 
					          <ModeToggle />
 | 
				
			||||||
        </h1>
 | 
					 | 
				
			||||||
        <div className="grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-8">
 | 
					 | 
				
			||||||
          <Link
 | 
					 | 
				
			||||||
            className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 text-white hover:bg-white/20"
 | 
					 | 
				
			||||||
            href="https://create.t3.gg/en/usage/first-steps"
 | 
					 | 
				
			||||||
            target="_blank"
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <h3 className="text-2xl font-bold">First Steps →</h3>
 | 
					 | 
				
			||||||
            <div className="text-lg">
 | 
					 | 
				
			||||||
              Just the basics - Everything you need to know to set up your
 | 
					 | 
				
			||||||
              database and authentication.
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </Link>
 | 
					 | 
				
			||||||
          <Link
 | 
					 | 
				
			||||||
            className="flex max-w-xs flex-col gap-4 rounded-xl bg-white/10 p-4 text-white hover:bg-white/20"
 | 
					 | 
				
			||||||
            href="https://create.t3.gg/en/introduction"
 | 
					 | 
				
			||||||
            target="_blank"
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <h3 className="text-2xl font-bold">Documentation →</h3>
 | 
					 | 
				
			||||||
            <div className="text-lg">
 | 
					 | 
				
			||||||
              Learn more about Create T3 App, the libraries it uses, and how to
 | 
					 | 
				
			||||||
              deploy it.
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </Link>
 | 
					 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </main>
 | 
					    </main>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								src/components/theme/themeprovider.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/components/theme/themeprovider.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import { ThemeProvider as NextThemesProvider } from "next-themes"
 | 
				
			||||||
 | 
					import { type ThemeProviderProps } from "next-themes/dist/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
 | 
				
			||||||
 | 
					  return <NextThemesProvider {...props}>{children}</NextThemesProvider>
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										40
									
								
								src/components/theme/themetoggle.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/components/theme/themetoggle.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import { Moon, Sun } from "lucide-react"
 | 
				
			||||||
 | 
					import { useTheme } from "next-themes"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Button } from "~/components/ui/button"
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  DropdownMenu,
 | 
				
			||||||
 | 
					  DropdownMenuContent,
 | 
				
			||||||
 | 
					  DropdownMenuItem,
 | 
				
			||||||
 | 
					  DropdownMenuTrigger,
 | 
				
			||||||
 | 
					} from "~/components/ui/dropdown-menu"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function ModeToggle() {
 | 
				
			||||||
 | 
					  const { setTheme } = useTheme()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <DropdownMenu>
 | 
				
			||||||
 | 
					      <DropdownMenuTrigger asChild>
 | 
				
			||||||
 | 
					        <Button variant="outline" size="icon">
 | 
				
			||||||
 | 
					          <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
 | 
				
			||||||
 | 
					          <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
 | 
				
			||||||
 | 
					          <span className="sr-only">Toggle theme</span>
 | 
				
			||||||
 | 
					        </Button>
 | 
				
			||||||
 | 
					      </DropdownMenuTrigger>
 | 
				
			||||||
 | 
					      <DropdownMenuContent align="end">
 | 
				
			||||||
 | 
					        <DropdownMenuItem onClick={() => setTheme("light")}>
 | 
				
			||||||
 | 
					          Light
 | 
				
			||||||
 | 
					        </DropdownMenuItem>
 | 
				
			||||||
 | 
					        <DropdownMenuItem onClick={() => setTheme("dark")}>
 | 
				
			||||||
 | 
					          Dark
 | 
				
			||||||
 | 
					        </DropdownMenuItem>
 | 
				
			||||||
 | 
					        <DropdownMenuItem onClick={() => setTheme("system")}>
 | 
				
			||||||
 | 
					          System
 | 
				
			||||||
 | 
					        </DropdownMenuItem>
 | 
				
			||||||
 | 
					      </DropdownMenuContent>
 | 
				
			||||||
 | 
					    </DropdownMenu>
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										57
									
								
								src/components/ui/accordion.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/components/ui/accordion.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import * as AccordionPrimitive from "@radix-ui/react-accordion"
 | 
				
			||||||
 | 
					import { ChevronDownIcon } from "@radix-ui/react-icons"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Accordion = AccordionPrimitive.Root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const AccordionItem = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof AccordionPrimitive.Item>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <AccordionPrimitive.Item
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn("border-b", className)}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					AccordionItem.displayName = "AccordionItem"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const AccordionTrigger = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof AccordionPrimitive.Trigger>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
 | 
				
			||||||
 | 
					>(({ className, children, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <AccordionPrimitive.Header className="flex">
 | 
				
			||||||
 | 
					    <AccordionPrimitive.Trigger
 | 
				
			||||||
 | 
					      ref={ref}
 | 
				
			||||||
 | 
					      className={cn(
 | 
				
			||||||
 | 
					        "flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
 | 
				
			||||||
 | 
					        className
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      {children}
 | 
				
			||||||
 | 
					      <ChevronDownIcon className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" />
 | 
				
			||||||
 | 
					    </AccordionPrimitive.Trigger>
 | 
				
			||||||
 | 
					  </AccordionPrimitive.Header>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const AccordionContent = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof AccordionPrimitive.Content>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
 | 
				
			||||||
 | 
					>(({ className, children, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <AccordionPrimitive.Content
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className="overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    <div className={cn("pb-4 pt-0", className)}>{children}</div>
 | 
				
			||||||
 | 
					  </AccordionPrimitive.Content>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					AccordionContent.displayName = AccordionPrimitive.Content.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
 | 
				
			||||||
							
								
								
									
										57
									
								
								src/components/ui/button.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/components/ui/button.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					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-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    variants: {
 | 
				
			||||||
 | 
					      variant: {
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					          "bg-primary text-primary-foreground shadow hover:bg-primary/90",
 | 
				
			||||||
 | 
					        destructive:
 | 
				
			||||||
 | 
					          "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
 | 
				
			||||||
 | 
					        outline:
 | 
				
			||||||
 | 
					          "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
 | 
				
			||||||
 | 
					        secondary:
 | 
				
			||||||
 | 
					          "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
 | 
				
			||||||
 | 
					        ghost: "hover:bg-accent hover:text-accent-foreground",
 | 
				
			||||||
 | 
					        link: "text-primary underline-offset-4 hover:underline",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      size: {
 | 
				
			||||||
 | 
					        default: "h-9 px-4 py-2",
 | 
				
			||||||
 | 
					        sm: "h-8 rounded-md px-3 text-xs",
 | 
				
			||||||
 | 
					        lg: "h-10 rounded-md px-8",
 | 
				
			||||||
 | 
					        icon: "h-9 w-9",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    defaultVariants: {
 | 
				
			||||||
 | 
					      variant: "default",
 | 
				
			||||||
 | 
					      size: "default",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface ButtonProps
 | 
				
			||||||
 | 
					  extends React.ButtonHTMLAttributes<HTMLButtonElement>,
 | 
				
			||||||
 | 
					    VariantProps<typeof buttonVariants> {
 | 
				
			||||||
 | 
					  asChild?: boolean
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
 | 
				
			||||||
 | 
					  ({ className, variant, size, asChild = false, ...props }, ref) => {
 | 
				
			||||||
 | 
					    const Comp = asChild ? Slot : "button"
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <Comp
 | 
				
			||||||
 | 
					        className={cn(buttonVariants({ variant, size, className }))}
 | 
				
			||||||
 | 
					        ref={ref}
 | 
				
			||||||
 | 
					        {...props}
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					Button.displayName = "Button"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { Button, buttonVariants }
 | 
				
			||||||
							
								
								
									
										205
									
								
								src/components/ui/dropdown-menu.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								src/components/ui/dropdown-menu.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,205 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  CheckIcon,
 | 
				
			||||||
 | 
					  ChevronRightIcon,
 | 
				
			||||||
 | 
					  DotFilledIcon,
 | 
				
			||||||
 | 
					} from "@radix-ui/react-icons"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenu = DropdownMenuPrimitive.Root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuGroup = DropdownMenuPrimitive.Group
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuPortal = DropdownMenuPrimitive.Portal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuSub = DropdownMenuPrimitive.Sub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuSubTrigger = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
 | 
				
			||||||
 | 
					    inset?: boolean
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					>(({ className, inset, children, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.SubTrigger
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
 | 
				
			||||||
 | 
					      inset && "pl-8",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    {children}
 | 
				
			||||||
 | 
					    <ChevronRightIcon className="ml-auto h-4 w-4" />
 | 
				
			||||||
 | 
					  </DropdownMenuPrimitive.SubTrigger>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuSubTrigger.displayName =
 | 
				
			||||||
 | 
					  DropdownMenuPrimitive.SubTrigger.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuSubContent = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.SubContent
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuSubContent.displayName =
 | 
				
			||||||
 | 
					  DropdownMenuPrimitive.SubContent.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuContent = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.Content>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
 | 
				
			||||||
 | 
					>(({ className, sideOffset = 4, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.Portal>
 | 
				
			||||||
 | 
					    <DropdownMenuPrimitive.Content
 | 
				
			||||||
 | 
					      ref={ref}
 | 
				
			||||||
 | 
					      sideOffset={sideOffset}
 | 
				
			||||||
 | 
					      className={cn(
 | 
				
			||||||
 | 
					        "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
 | 
				
			||||||
 | 
					        "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
				
			||||||
 | 
					        className
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					  </DropdownMenuPrimitive.Portal>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuItem = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.Item>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
 | 
				
			||||||
 | 
					    inset?: boolean
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					>(({ className, inset, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.Item
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
				
			||||||
 | 
					      inset && "pl-8",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuCheckboxItem = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
 | 
				
			||||||
 | 
					>(({ className, children, checked, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.CheckboxItem
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    checked={checked}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
 | 
				
			||||||
 | 
					      <DropdownMenuPrimitive.ItemIndicator>
 | 
				
			||||||
 | 
					        <CheckIcon className="h-4 w-4" />
 | 
				
			||||||
 | 
					      </DropdownMenuPrimitive.ItemIndicator>
 | 
				
			||||||
 | 
					    </span>
 | 
				
			||||||
 | 
					    {children}
 | 
				
			||||||
 | 
					  </DropdownMenuPrimitive.CheckboxItem>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuCheckboxItem.displayName =
 | 
				
			||||||
 | 
					  DropdownMenuPrimitive.CheckboxItem.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuRadioItem = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
 | 
				
			||||||
 | 
					>(({ className, children, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.RadioItem
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
 | 
				
			||||||
 | 
					      <DropdownMenuPrimitive.ItemIndicator>
 | 
				
			||||||
 | 
					        <DotFilledIcon className="h-4 w-4 fill-current" />
 | 
				
			||||||
 | 
					      </DropdownMenuPrimitive.ItemIndicator>
 | 
				
			||||||
 | 
					    </span>
 | 
				
			||||||
 | 
					    {children}
 | 
				
			||||||
 | 
					  </DropdownMenuPrimitive.RadioItem>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuLabel = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.Label>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
 | 
				
			||||||
 | 
					    inset?: boolean
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					>(({ className, inset, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.Label
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "px-2 py-1.5 text-sm font-semibold",
 | 
				
			||||||
 | 
					      inset && "pl-8",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuSeparator = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DropdownMenuPrimitive.Separator
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn("-mx-1 my-1 h-px bg-muted", className)}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DropdownMenuShortcut = ({
 | 
				
			||||||
 | 
					  className,
 | 
				
			||||||
 | 
					  ...props
 | 
				
			||||||
 | 
					}: React.HTMLAttributes<HTMLSpanElement>) => {
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <span
 | 
				
			||||||
 | 
					      className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export {
 | 
				
			||||||
 | 
					  DropdownMenu,
 | 
				
			||||||
 | 
					  DropdownMenuTrigger,
 | 
				
			||||||
 | 
					  DropdownMenuContent,
 | 
				
			||||||
 | 
					  DropdownMenuItem,
 | 
				
			||||||
 | 
					  DropdownMenuCheckboxItem,
 | 
				
			||||||
 | 
					  DropdownMenuRadioItem,
 | 
				
			||||||
 | 
					  DropdownMenuLabel,
 | 
				
			||||||
 | 
					  DropdownMenuSeparator,
 | 
				
			||||||
 | 
					  DropdownMenuShortcut,
 | 
				
			||||||
 | 
					  DropdownMenuGroup,
 | 
				
			||||||
 | 
					  DropdownMenuPortal,
 | 
				
			||||||
 | 
					  DropdownMenuSub,
 | 
				
			||||||
 | 
					  DropdownMenuSubContent,
 | 
				
			||||||
 | 
					  DropdownMenuSubTrigger,
 | 
				
			||||||
 | 
					  DropdownMenuRadioGroup,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								src/lib/utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/lib/utils.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					import { clsx, type ClassValue } from "clsx"
 | 
				
			||||||
 | 
					import { twMerge } from "tailwind-merge"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function cn(...inputs: ClassValue[]) {
 | 
				
			||||||
 | 
					  return twMerge(clsx(inputs))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,3 @@
 | 
				
			|||||||
// Example model schema from the Drizzle docs
 | 
					 | 
				
			||||||
// https://orm.drizzle.team/docs/sql-schema-declaration
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { sql } from "drizzle-orm";
 | 
					import { sql } from "drizzle-orm";
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  index,
 | 
					  index,
 | 
				
			||||||
@@ -10,13 +7,7 @@ import {
 | 
				
			|||||||
  varchar,
 | 
					  varchar,
 | 
				
			||||||
} from "drizzle-orm/pg-core";
 | 
					} from "drizzle-orm/pg-core";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					export const createTable = pgTableCreator((name) => `${name}`);
 | 
				
			||||||
 * This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same
 | 
					 | 
				
			||||||
 * database instance for multiple projects.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @see https://orm.drizzle.team/docs/goodies#multi-project-schema
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export const createTable = pgTableCreator((name) => `resume_website_${name}`);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const posts = createTable(
 | 
					export const posts = createTable(
 | 
				
			||||||
  "post",
 | 
					  "post",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,66 @@
 | 
				
			|||||||
@tailwind base;
 | 
					@tailwind base;
 | 
				
			||||||
@tailwind components;
 | 
					@tailwind components;
 | 
				
			||||||
@tailwind utilities;
 | 
					@tailwind utilities;
 | 
				
			||||||
 | 
					@layer base {
 | 
				
			||||||
 | 
					  :root {
 | 
				
			||||||
 | 
					    --background: 0 0% 100%;
 | 
				
			||||||
 | 
					    --foreground: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --card: 0 0% 100%;
 | 
				
			||||||
 | 
					    --card-foreground: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --popover: 0 0% 100%;
 | 
				
			||||||
 | 
					    --popover-foreground: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --primary: 240 5.9% 10%;
 | 
				
			||||||
 | 
					    --primary-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --secondary: 240 4.8% 95.9%;
 | 
				
			||||||
 | 
					    --secondary-foreground: 240 5.9% 10%;
 | 
				
			||||||
 | 
					    --muted: 240 4.8% 95.9%;
 | 
				
			||||||
 | 
					    --muted-foreground: 240 3.8% 46.1%;
 | 
				
			||||||
 | 
					    --accent: 240 4.8% 95.9%;
 | 
				
			||||||
 | 
					    --accent-foreground: 240 5.9% 10%;
 | 
				
			||||||
 | 
					    --destructive: 0 84.2% 60.2%;
 | 
				
			||||||
 | 
					    --destructive-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --border: 240 5.9% 90%;
 | 
				
			||||||
 | 
					    --input: 240 5.9% 90%;
 | 
				
			||||||
 | 
					    --ring: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --chart-1: 12 76% 61%;
 | 
				
			||||||
 | 
					    --chart-2: 173 58% 39%;
 | 
				
			||||||
 | 
					    --chart-3: 197 37% 24%;
 | 
				
			||||||
 | 
					    --chart-4: 43 74% 66%;
 | 
				
			||||||
 | 
					    --chart-5: 27 87% 67%;
 | 
				
			||||||
 | 
					    --radius: 0.5rem
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .dark {
 | 
				
			||||||
 | 
					    --background: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --card: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --card-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --popover: 240 10% 3.9%;
 | 
				
			||||||
 | 
					    --popover-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --primary: 0 0% 98%;
 | 
				
			||||||
 | 
					    --primary-foreground: 240 5.9% 10%;
 | 
				
			||||||
 | 
					    --secondary: 240 3.7% 15.9%;
 | 
				
			||||||
 | 
					    --secondary-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --muted: 240 3.7% 15.9%;
 | 
				
			||||||
 | 
					    --muted-foreground: 240 5% 64.9%;
 | 
				
			||||||
 | 
					    --accent: 240 3.7% 15.9%;
 | 
				
			||||||
 | 
					    --accent-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --destructive: 0 62.8% 30.6%;
 | 
				
			||||||
 | 
					    --destructive-foreground: 0 0% 98%;
 | 
				
			||||||
 | 
					    --border: 240 3.7% 15.9%;
 | 
				
			||||||
 | 
					    --input: 240 3.7% 15.9%;
 | 
				
			||||||
 | 
					    --ring: 240 4.9% 83.9%;
 | 
				
			||||||
 | 
					    --chart-1: 220 70% 50%;
 | 
				
			||||||
 | 
					    --chart-2: 160 60% 45%;
 | 
				
			||||||
 | 
					    --chart-3: 30 80% 55%;
 | 
				
			||||||
 | 
					    --chart-4: 280 65% 60%;
 | 
				
			||||||
 | 
					    --chart-5: 340 75% 55%
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@layer base {
 | 
				
			||||||
 | 
					  * {
 | 
				
			||||||
 | 
					    @apply border-border;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  body {
 | 
				
			||||||
 | 
					    @apply bg-background text-foreground;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,55 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					 | 
				
			||||||
# Use this script to start a docker container for a local development database
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# TO RUN ON WINDOWS:
 | 
					 | 
				
			||||||
# 1. Install WSL (Windows Subsystem for Linux) - https://learn.microsoft.com/en-us/windows/wsl/install
 | 
					 | 
				
			||||||
# 2. Install Docker Desktop for Windows - https://docs.docker.com/docker-for-windows/install/
 | 
					 | 
				
			||||||
# 3. Open WSL - `wsl`
 | 
					 | 
				
			||||||
# 4. Run this script - `./start-database.sh`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# On Linux and macOS you can run this script directly - `./start-database.sh`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DB_CONTAINER_NAME="resume_website-postgres"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if ! [ -x "$(command -v docker)" ]; then
 | 
					 | 
				
			||||||
  echo -e "Docker is not installed. Please install docker and try again.\nDocker install guide: https://docs.docker.com/engine/install/"
 | 
					 | 
				
			||||||
  exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$(docker ps -q -f name=$DB_CONTAINER_NAME)" ]; then
 | 
					 | 
				
			||||||
  echo "Database container '$DB_CONTAINER_NAME' already running"
 | 
					 | 
				
			||||||
  exit 0
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$(docker ps -q -a -f name=$DB_CONTAINER_NAME)" ]; then
 | 
					 | 
				
			||||||
  docker start "$DB_CONTAINER_NAME"
 | 
					 | 
				
			||||||
  echo "Existing database container '$DB_CONTAINER_NAME' started"
 | 
					 | 
				
			||||||
  exit 0
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# import env variables from .env
 | 
					 | 
				
			||||||
set -a
 | 
					 | 
				
			||||||
source .env
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DB_PASSWORD=$(echo "$DATABASE_URL" | awk -F':' '{print $3}' | awk -F'@' '{print $1}')
 | 
					 | 
				
			||||||
DB_PORT=$(echo "$DATABASE_URL" | awk -F':' '{print $4}' | awk -F'\/' '{print $1}')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$DB_PASSWORD" = "password" ]; then
 | 
					 | 
				
			||||||
  echo "You are using the default database password"
 | 
					 | 
				
			||||||
  read -p "Should we generate a random password for you? [y/N]: " -r REPLY
 | 
					 | 
				
			||||||
  if ! [[ $REPLY =~ ^[Yy]$ ]]; then
 | 
					 | 
				
			||||||
    echo "Please change the default password in the .env file and try again"
 | 
					 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  # Generate a random URL-safe password
 | 
					 | 
				
			||||||
  DB_PASSWORD=$(openssl rand -base64 12 | tr '+/' '-_')
 | 
					 | 
				
			||||||
  sed -i -e "s#:password@#:$DB_PASSWORD@#" .env
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
docker run -d \
 | 
					 | 
				
			||||||
  --name $DB_CONTAINER_NAME \
 | 
					 | 
				
			||||||
  -e POSTGRES_USER="postgres" \
 | 
					 | 
				
			||||||
  -e POSTGRES_PASSWORD="$DB_PASSWORD" \
 | 
					 | 
				
			||||||
  -e POSTGRES_DB=resume_website \
 | 
					 | 
				
			||||||
  -p "$DB_PORT":5432 \
 | 
					 | 
				
			||||||
  docker.io/postgres && echo "Database container '$DB_CONTAINER_NAME' was successfully created"
 | 
					 | 
				
			||||||
@@ -2,13 +2,83 @@ import { type Config } from "tailwindcss";
 | 
				
			|||||||
import { fontFamily } from "tailwindcss/defaultTheme";
 | 
					import { fontFamily } from "tailwindcss/defaultTheme";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  content: ["./src/**/*.tsx"],
 | 
					    darkMode: ["class"],
 | 
				
			||||||
 | 
					    content: ["./src/**/*.tsx"],
 | 
				
			||||||
  theme: {
 | 
					  theme: {
 | 
				
			||||||
    extend: {
 | 
					  	extend: {
 | 
				
			||||||
      fontFamily: {
 | 
					  		fontFamily: {
 | 
				
			||||||
        sans: ["var(--font-geist-sans)", ...fontFamily.sans],
 | 
					  			sans: ["var(--font-geist-sans)", ...fontFamily.sans]
 | 
				
			||||||
      },
 | 
					  		},
 | 
				
			||||||
    },
 | 
					  		borderRadius: {
 | 
				
			||||||
 | 
					  			lg: 'var(--radius)',
 | 
				
			||||||
 | 
					  			md: 'calc(var(--radius) - 2px)',
 | 
				
			||||||
 | 
					  			sm: 'calc(var(--radius) - 4px)'
 | 
				
			||||||
 | 
					  		},
 | 
				
			||||||
 | 
					  		colors: {
 | 
				
			||||||
 | 
					  			background: 'hsl(var(--background))',
 | 
				
			||||||
 | 
					  			foreground: 'hsl(var(--foreground))',
 | 
				
			||||||
 | 
					  			card: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--card))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--card-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			popover: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--popover))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--popover-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			primary: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--primary))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--primary-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			secondary: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--secondary))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--secondary-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			muted: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--muted))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--muted-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			accent: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--accent))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--accent-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			destructive: {
 | 
				
			||||||
 | 
					  				DEFAULT: 'hsl(var(--destructive))',
 | 
				
			||||||
 | 
					  				foreground: 'hsl(var(--destructive-foreground))'
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			border: 'hsl(var(--border))',
 | 
				
			||||||
 | 
					  			input: 'hsl(var(--input))',
 | 
				
			||||||
 | 
					  			ring: 'hsl(var(--ring))',
 | 
				
			||||||
 | 
					  			chart: {
 | 
				
			||||||
 | 
					  				'1': 'hsl(var(--chart-1))',
 | 
				
			||||||
 | 
					  				'2': 'hsl(var(--chart-2))',
 | 
				
			||||||
 | 
					  				'3': 'hsl(var(--chart-3))',
 | 
				
			||||||
 | 
					  				'4': 'hsl(var(--chart-4))',
 | 
				
			||||||
 | 
					  				'5': 'hsl(var(--chart-5))'
 | 
				
			||||||
 | 
					  			}
 | 
				
			||||||
 | 
					  		},
 | 
				
			||||||
 | 
					  		keyframes: {
 | 
				
			||||||
 | 
					  			'accordion-down': {
 | 
				
			||||||
 | 
					  				from: {
 | 
				
			||||||
 | 
					  					height: '0'
 | 
				
			||||||
 | 
					  				},
 | 
				
			||||||
 | 
					  				to: {
 | 
				
			||||||
 | 
					  					height: 'var(--radix-accordion-content-height)'
 | 
				
			||||||
 | 
					  				}
 | 
				
			||||||
 | 
					  			},
 | 
				
			||||||
 | 
					  			'accordion-up': {
 | 
				
			||||||
 | 
					  				from: {
 | 
				
			||||||
 | 
					  					height: 'var(--radix-accordion-content-height)'
 | 
				
			||||||
 | 
					  				},
 | 
				
			||||||
 | 
					  				to: {
 | 
				
			||||||
 | 
					  					height: '0'
 | 
				
			||||||
 | 
					  				}
 | 
				
			||||||
 | 
					  			}
 | 
				
			||||||
 | 
					  		},
 | 
				
			||||||
 | 
					  		animation: {
 | 
				
			||||||
 | 
					  			'accordion-down': 'accordion-down 0.2s ease-out',
 | 
				
			||||||
 | 
					  			'accordion-up': 'accordion-up 0.2s ease-out'
 | 
				
			||||||
 | 
					  		}
 | 
				
			||||||
 | 
					  	}
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  plugins: [],
 | 
					  plugins: [require("tailwindcss-animate")],
 | 
				
			||||||
} satisfies Config;
 | 
					} satisfies Config;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user