dont even know what teh changes are but meh
This commit is contained in:
		@@ -21,6 +21,7 @@
 | 
				
			|||||||
    "@hookform/resolvers": "^3.9.0",
 | 
					    "@hookform/resolvers": "^3.9.0",
 | 
				
			||||||
    "@radix-ui/react-alert-dialog": "^1.1.1",
 | 
					    "@radix-ui/react-alert-dialog": "^1.1.1",
 | 
				
			||||||
    "@radix-ui/react-avatar": "^1.1.0",
 | 
					    "@radix-ui/react-avatar": "^1.1.0",
 | 
				
			||||||
 | 
					    "@radix-ui/react-checkbox": "^1.1.1",
 | 
				
			||||||
    "@radix-ui/react-dialog": "^1.1.1",
 | 
					    "@radix-ui/react-dialog": "^1.1.1",
 | 
				
			||||||
    "@radix-ui/react-dropdown-menu": "^2.1.1",
 | 
					    "@radix-ui/react-dropdown-menu": "^2.1.1",
 | 
				
			||||||
    "@radix-ui/react-label": "^2.1.0",
 | 
					    "@radix-ui/react-label": "^2.1.0",
 | 
				
			||||||
@@ -32,6 +33,7 @@
 | 
				
			|||||||
    "@types/jsonwebtoken": "^9.0.6",
 | 
					    "@types/jsonwebtoken": "^9.0.6",
 | 
				
			||||||
    "class-variance-authority": "^0.7.0",
 | 
					    "class-variance-authority": "^0.7.0",
 | 
				
			||||||
    "clsx": "^2.1.1",
 | 
					    "clsx": "^2.1.1",
 | 
				
			||||||
 | 
					    "cmdk": "1.0.0",
 | 
				
			||||||
    "date-fns": "^3.6.0",
 | 
					    "date-fns": "^3.6.0",
 | 
				
			||||||
    "dotenv": "^16.4.5",
 | 
					    "dotenv": "^16.4.5",
 | 
				
			||||||
    "drizzle-orm": "^0.30.10",
 | 
					    "drizzle-orm": "^0.30.10",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										398
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										398
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -20,6 +20,9 @@ importers:
 | 
				
			|||||||
      '@radix-ui/react-avatar':
 | 
					      '@radix-ui/react-avatar':
 | 
				
			||||||
        specifier: ^1.1.0
 | 
					        specifier: ^1.1.0
 | 
				
			||||||
        version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
					        version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-checkbox':
 | 
				
			||||||
 | 
					        specifier: ^1.1.1
 | 
				
			||||||
 | 
					        version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
      '@radix-ui/react-dialog':
 | 
					      '@radix-ui/react-dialog':
 | 
				
			||||||
        specifier: ^1.1.1
 | 
					        specifier: ^1.1.1
 | 
				
			||||||
        version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
					        version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
@@ -53,6 +56,9 @@ importers:
 | 
				
			|||||||
      clsx:
 | 
					      clsx:
 | 
				
			||||||
        specifier: ^2.1.1
 | 
					        specifier: ^2.1.1
 | 
				
			||||||
        version: 2.1.1
 | 
					        version: 2.1.1
 | 
				
			||||||
 | 
					      cmdk:
 | 
				
			||||||
 | 
					        specifier: 1.0.0
 | 
				
			||||||
 | 
					        version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
      date-fns:
 | 
					      date-fns:
 | 
				
			||||||
        specifier: ^3.6.0
 | 
					        specifier: ^3.6.0
 | 
				
			||||||
        version: 3.6.0
 | 
					        version: 3.6.0
 | 
				
			||||||
@@ -189,6 +195,10 @@ packages:
 | 
				
			|||||||
  '@auth/drizzle-adapter@1.4.2':
 | 
					  '@auth/drizzle-adapter@1.4.2':
 | 
				
			||||||
    resolution: {integrity: sha512-rqukaT9CeWB8VOt6g2bQ6uYMHVOQIYCBkzddZXWshi8aqwLABatpRWAc+pehpcMDn0RSW/uvKMs7tkON+Bho9Q==}
 | 
					    resolution: {integrity: sha512-rqukaT9CeWB8VOt6g2bQ6uYMHVOQIYCBkzddZXWshi8aqwLABatpRWAc+pehpcMDn0RSW/uvKMs7tkON+Bho9Q==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@babel/runtime@7.25.6':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==}
 | 
				
			||||||
 | 
					    engines: {node: '>=6.9.0'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@cspotcode/source-map-support@0.8.1':
 | 
					  '@cspotcode/source-map-support@0.8.1':
 | 
				
			||||||
    resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
 | 
					    resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
 | 
				
			||||||
    engines: {node: '>=12'}
 | 
					    engines: {node: '>=12'}
 | 
				
			||||||
@@ -768,6 +778,9 @@ 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.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/primitive@1.1.0':
 | 
					  '@radix-ui/primitive@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
 | 
					    resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -810,6 +823,19 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-checkbox@1.1.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==}
 | 
				
			||||||
 | 
					    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':
 | 
					  '@radix-ui/react-collection@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
 | 
					    resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -823,6 +849,15 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-compose-refs@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-compose-refs@1.1.0':
 | 
					  '@radix-ui/react-compose-refs@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
 | 
					    resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -832,6 +867,15 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-context@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-context@1.1.0':
 | 
					  '@radix-ui/react-context@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
 | 
					    resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -841,6 +885,19 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dialog@1.0.5':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-dialog@1.1.1':
 | 
					  '@radix-ui/react-dialog@1.1.1':
 | 
				
			||||||
    resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==}
 | 
					    resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -863,6 +920,19 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dismissable-layer@1.0.5':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-dismissable-layer@1.1.0':
 | 
					  '@radix-ui/react-dismissable-layer@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
 | 
					    resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -889,6 +959,15 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-guards@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-focus-guards@1.1.0':
 | 
					  '@radix-ui/react-focus-guards@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
 | 
					    resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -898,6 +977,19 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-scope@1.0.4':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-focus-scope@1.1.0':
 | 
					  '@radix-ui/react-focus-scope@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
 | 
					    resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -911,6 +1003,15 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-id@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-id@1.1.0':
 | 
					  '@radix-ui/react-id@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
 | 
					    resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -985,6 +1086,19 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-portal@1.0.4':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-portal@1.1.1':
 | 
					  '@radix-ui/react-portal@1.1.1':
 | 
				
			||||||
    resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
 | 
					    resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -998,6 +1112,19 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-presence@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-presence@1.1.0':
 | 
					  '@radix-ui/react-presence@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
 | 
					    resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1011,6 +1138,19 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-primitive@1.0.3':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      '@types/react-dom': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					      react-dom: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					      '@types/react-dom':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-primitive@2.0.0':
 | 
					  '@radix-ui/react-primitive@2.0.0':
 | 
				
			||||||
    resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
 | 
					    resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1037,6 +1177,15 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-slot@1.0.2':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-slot@1.1.0':
 | 
					  '@radix-ui/react-slot@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
 | 
					    resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1059,6 +1208,15 @@ packages:
 | 
				
			|||||||
      '@types/react-dom':
 | 
					      '@types/react-dom':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-callback-ref@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-callback-ref@1.1.0':
 | 
					  '@radix-ui/react-use-callback-ref@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
 | 
					    resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1068,6 +1226,15 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-controllable-state@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-controllable-state@1.1.0':
 | 
					  '@radix-ui/react-use-controllable-state@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
 | 
					    resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1077,6 +1244,15 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-escape-keydown@1.0.3':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-escape-keydown@1.1.0':
 | 
					  '@radix-ui/react-use-escape-keydown@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
 | 
					    resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1086,6 +1262,15 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-layout-effect@1.0.1':
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': '*'
 | 
				
			||||||
 | 
					      react: ^16.8 || ^17.0 || ^18.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-layout-effect@1.1.0':
 | 
					  '@radix-ui/react-use-layout-effect@1.1.0':
 | 
				
			||||||
    resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
 | 
					    resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
@@ -1477,6 +1662,12 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
 | 
					    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
 | 
				
			||||||
    engines: {node: '>=6'}
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cmdk@1.0.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      react: ^18.0.0
 | 
				
			||||||
 | 
					      react-dom: ^18.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  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'}
 | 
				
			||||||
@@ -2748,6 +2939,16 @@ packages:
 | 
				
			|||||||
      '@types/react':
 | 
					      '@types/react':
 | 
				
			||||||
        optional: true
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll@2.5.5:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
 | 
				
			||||||
 | 
					    engines: {node: '>=10'}
 | 
				
			||||||
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
					      '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
 | 
				
			||||||
 | 
					      react: ^16.8.0 || ^17.0.0 || ^18.0.0
 | 
				
			||||||
 | 
					    peerDependenciesMeta:
 | 
				
			||||||
 | 
					      '@types/react':
 | 
				
			||||||
 | 
					        optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react-remove-scroll@2.5.7:
 | 
					  react-remove-scroll@2.5.7:
 | 
				
			||||||
    resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
 | 
					    resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==}
 | 
				
			||||||
    engines: {node: '>=10'}
 | 
					    engines: {node: '>=10'}
 | 
				
			||||||
@@ -2783,6 +2984,9 @@ packages:
 | 
				
			|||||||
    resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
 | 
					    resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  regenerator-runtime@0.14.1:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  regexp.prototype.flags@1.5.2:
 | 
					  regexp.prototype.flags@1.5.2:
 | 
				
			||||||
    resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
 | 
					    resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
 | 
				
			||||||
    engines: {node: '>= 0.4'}
 | 
					    engines: {node: '>= 0.4'}
 | 
				
			||||||
@@ -3193,6 +3397,10 @@ snapshots:
 | 
				
			|||||||
      - '@simplewebauthn/server'
 | 
					      - '@simplewebauthn/server'
 | 
				
			||||||
      - nodemailer
 | 
					      - nodemailer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@babel/runtime@7.25.6':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      regenerator-runtime: 0.14.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@cspotcode/source-map-support@0.8.1':
 | 
					  '@cspotcode/source-map-support@0.8.1':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@jridgewell/trace-mapping': 0.3.9
 | 
					      '@jridgewell/trace-mapping': 0.3.9
 | 
				
			||||||
@@ -3551,6 +3759,10 @@ snapshots:
 | 
				
			|||||||
  '@pkgjs/parseargs@0.11.0':
 | 
					  '@pkgjs/parseargs@0.11.0':
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/primitive@1.0.1':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/primitive@1.1.0': {}
 | 
					  '@radix-ui/primitive@1.1.0': {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
					  '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
@@ -3588,6 +3800,22 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-checkbox@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(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.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-previous': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3600,18 +3828,55 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.0.1
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(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.5(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
					  '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/primitive': 1.1.0
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
@@ -3640,6 +3905,20 @@ snapshots:
 | 
				
			|||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/primitive': 1.0.1
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
					  '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/primitive': 1.1.0
 | 
					      '@radix-ui/primitive': 1.1.0
 | 
				
			||||||
@@ -3668,12 +3947,31 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
					  '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3685,6 +3983,14 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3790,6 +4096,16 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
@@ -3800,6 +4116,17 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3810,6 +4137,16 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-dom: 18.3.1(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(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.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3836,6 +4173,14 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3863,12 +4208,27 @@ snapshots:
 | 
				
			|||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
      '@types/react-dom': 18.3.0
 | 
					      '@types/react-dom': 18.3.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3876,6 +4236,14 @@ snapshots:
 | 
				
			|||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
					      '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
@@ -3883,6 +4251,13 @@ snapshots:
 | 
				
			|||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@babel/runtime': 7.25.6
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
					  '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1)':
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
@@ -4309,6 +4684,16 @@ snapshots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  clsx@2.1.1: {}
 | 
					  clsx@2.1.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cmdk@1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
 | 
				
			||||||
 | 
					      '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(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)
 | 
				
			||||||
 | 
					    transitivePeerDependencies:
 | 
				
			||||||
 | 
					      - '@types/react'
 | 
				
			||||||
 | 
					      - '@types/react-dom'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  color-convert@2.0.1:
 | 
					  color-convert@2.0.1:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      color-name: 1.1.4
 | 
					      color-name: 1.1.4
 | 
				
			||||||
@@ -5713,6 +6098,17 @@ snapshots:
 | 
				
			|||||||
    optionalDependencies:
 | 
					    optionalDependencies:
 | 
				
			||||||
      '@types/react': 18.3.3
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1):
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      react: 18.3.1
 | 
				
			||||||
 | 
					      react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      tslib: 2.6.3
 | 
				
			||||||
 | 
					      use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					      use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1)
 | 
				
			||||||
 | 
					    optionalDependencies:
 | 
				
			||||||
 | 
					      '@types/react': 18.3.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1):
 | 
					  react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1):
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      react: 18.3.1
 | 
					      react: 18.3.1
 | 
				
			||||||
@@ -5755,6 +6151,8 @@ snapshots:
 | 
				
			|||||||
      globalthis: 1.0.4
 | 
					      globalthis: 1.0.4
 | 
				
			||||||
      which-builtin-type: 1.1.4
 | 
					      which-builtin-type: 1.1.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  regenerator-runtime@0.14.1: {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  regexp.prototype.flags@1.5.2:
 | 
					  regexp.prototype.flags@1.5.2:
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      call-bind: 1.0.7
 | 
					      call-bind: 1.0.7
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										87
									
								
								src/components/billtracker/BillForm.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/components/billtracker/BillForm.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					"use server"
 | 
				
			||||||
 | 
					import { z } from "zod"
 | 
				
			||||||
 | 
					import { zodResolver } from "@hookform/resolvers/zod"
 | 
				
			||||||
 | 
					import { useForm } from "react-hook-form"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const schema = z.object({
 | 
				
			||||||
 | 
					  billType: z.enum(["Rent", "Power", "Internet", "Gas", "Water", "Phone Bill", "Cable",
 | 
				
			||||||
 | 
					    "Security Deposit", "Other"]),
 | 
				
			||||||
 | 
					  billDescription: z.string().optional(),
 | 
				
			||||||
 | 
					  amount: z.number(),
 | 
				
			||||||
 | 
					  recurrence: z.enum(["No recurrence", "Monthly", "Bi-weekly", "Weekly", "Annually"]),
 | 
				
			||||||
 | 
					  includeUserInSplit: z.boolean().optional(),
 | 
				
			||||||
 | 
					  roommates: z.array(z.object({
 | 
				
			||||||
 | 
					    userID: z.string(),
 | 
				
			||||||
 | 
					    includeInSplit: z.boolean(),
 | 
				
			||||||
 | 
					  })).optional(),
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export async function createBill(formData: FormData) {
 | 
				
			||||||
 | 
					  const validateFields = schema.safeParse({
 | 
				
			||||||
 | 
					    billType: formData.get("billType"),
 | 
				
			||||||
 | 
					    billDescription: formData.get("billDescription"),
 | 
				
			||||||
 | 
					    amount: formData.get("amount"),
 | 
				
			||||||
 | 
					    recurrence: formData.get("recurrence"),
 | 
				
			||||||
 | 
					    includeUserInSplit: formData.get("includeUserInSplit"),
 | 
				
			||||||
 | 
					    roommates: formData.get("roommates"),
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (!validateFields.success) {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      errors: validateFields.error.flatten().fieldErrors,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default async function BillForm() {
 | 
				
			||||||
 | 
					  const form = useForm<z.infer<typeof schema>>({
 | 
				
			||||||
 | 
					    resolver: zodResolver(schema),
 | 
				
			||||||
 | 
					    defaultValues: {
 | 
				
			||||||
 | 
					      //billType: "Rent",
 | 
				
			||||||
 | 
					      recurrence: "No recurrence",
 | 
				
			||||||
 | 
					      includeUserInSplit: true,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <div className="">
 | 
				
			||||||
 | 
					      <form action={createBill}>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label htmlFor="billType">Bill Type</label>
 | 
				
			||||||
 | 
					          <select id="billType" name="billType" required className="">
 | 
				
			||||||
 | 
					            <option value="Rent">Rent</option>
 | 
				
			||||||
 | 
					            <option value="Power">Power</option>
 | 
				
			||||||
 | 
					            <option value="Internet">Internet</option>
 | 
				
			||||||
 | 
					            <option value="Gas">Gas</option>
 | 
				
			||||||
 | 
					            <option value="Water">Water</option>
 | 
				
			||||||
 | 
					            <option value="Phone Bill">Phone Bill</option>
 | 
				
			||||||
 | 
					            <option value="Cable">Cable</option>
 | 
				
			||||||
 | 
					            <option value="Security Deposit">Security Deposit</option>
 | 
				
			||||||
 | 
					            <option value="Other">Other</option>
 | 
				
			||||||
 | 
					          </select>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label htmlFor="billDescription">Bill Description</label>
 | 
				
			||||||
 | 
					          <input type="text" id="billDescription" name="billDescription" className="" />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label htmlFor="amount">Amount</label>
 | 
				
			||||||
 | 
					          <input type="number" id="amount" name="amount" required className="" />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label htmlFor="recurrence">Recurrence</label>
 | 
				
			||||||
 | 
					          <select id="recurrence" name="recurrence" required className="">
 | 
				
			||||||
 | 
					            <option value="No recurrence">No recurrence</option>
 | 
				
			||||||
 | 
					            <option value="Monthly">Monthly</option>
 | 
				
			||||||
 | 
					            <option value="Bi-weekly">Bi-weekly</option>
 | 
				
			||||||
 | 
					            <option value="Weekly">Weekly</option>
 | 
				
			||||||
 | 
					            <option value="Annually">Annually</option>
 | 
				
			||||||
 | 
					          </select>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <label htmlFor="includeUserInSplit">Include Yourself in Bill Split?</label>
 | 
				
			||||||
 | 
					          <input type="checkbox" id="includeUserInSplit" name="includeUserInSplit" className="" />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </form>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -29,7 +29,8 @@ export default function BillTrackerCalendar() {
 | 
				
			|||||||
        !calendarRef.current.contains(event.target as Node) &&
 | 
					        !calendarRef.current.contains(event.target as Node) &&
 | 
				
			||||||
        !popoverRef.current.contains(event.target as Node)
 | 
					        !popoverRef.current.contains(event.target as Node)
 | 
				
			||||||
      ) {
 | 
					      ) {
 | 
				
			||||||
        setIsOpen(false)
 | 
					        //setIsOpen(false)
 | 
				
			||||||
 | 
					        console.log('Calendar closed');
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    document.addEventListener('mousedown', handleClickOutside)
 | 
					    document.addEventListener('mousedown', handleClickOutside)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,7 @@
 | 
				
			|||||||
"use client"
 | 
					"use client"
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import { Check, ChevronsUpDown } from "lucide-react"
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  DrawerClose,
 | 
					  DrawerClose,
 | 
				
			||||||
  DrawerContent,
 | 
					  DrawerContent,
 | 
				
			||||||
@@ -14,23 +17,39 @@ import { Button } from "~/components/ui/button"
 | 
				
			|||||||
import {
 | 
					import {
 | 
				
			||||||
  Form,
 | 
					  Form,
 | 
				
			||||||
  FormControl,
 | 
					  FormControl,
 | 
				
			||||||
  FormDescription,
 | 
					 | 
				
			||||||
  FormField,
 | 
					  FormField,
 | 
				
			||||||
  FormItem,
 | 
					  FormItem,
 | 
				
			||||||
  FormLabel,
 | 
					  FormLabel,
 | 
				
			||||||
  FormMessage,
 | 
					 | 
				
			||||||
} from "~/components/ui/form"
 | 
					} from "~/components/ui/form"
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  Command,
 | 
				
			||||||
 | 
					  CommandEmpty,
 | 
				
			||||||
 | 
					  CommandList,
 | 
				
			||||||
 | 
					  CommandGroup,
 | 
				
			||||||
 | 
					  CommandItem,
 | 
				
			||||||
 | 
					} from "~/components/ui/command"
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  Popover,
 | 
				
			||||||
 | 
					  PopoverContent,
 | 
				
			||||||
 | 
					  PopoverTrigger,
 | 
				
			||||||
 | 
					} from "~/components/ui/popover"
 | 
				
			||||||
 | 
					import { Checkbox } from "~/components/ui/checkbox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CreateBillDrawerProps = {
 | 
					type CreateBillDrawerProps = {
 | 
				
			||||||
  date: Date;
 | 
					  date: Date;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const formSchema = z.object({
 | 
					type ComboOption = {
 | 
				
			||||||
 | 
					  label: string;
 | 
				
			||||||
 | 
					  value: string;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const FormSchema = z.object({
 | 
				
			||||||
  billType: z.enum(["Rent", "Power", "Internet", "Gas", "Water", "Phone Bill", "Cable",
 | 
					  billType: z.enum(["Rent", "Power", "Internet", "Gas", "Water", "Phone Bill", "Cable",
 | 
				
			||||||
    "Security Deposit", "Other"]),
 | 
					    "Security Deposit", "Other"]),
 | 
				
			||||||
  billDescription: z.string().optional(),
 | 
					  billDescription: z.string().optional(),
 | 
				
			||||||
  amount: z.number(),
 | 
					  amount: z.number(),
 | 
				
			||||||
  recurrence: z.enum(["Monthly", "Bi-weekly", "Weekly", "Annually"]).optional(),
 | 
					  recurrence: z.enum(["No recurrence", "Monthly", "Bi-weekly", "Weekly", "Annually"]),
 | 
				
			||||||
  includeUserInSplit: z.boolean().optional(),
 | 
					  includeUserInSplit: z.boolean().optional(),
 | 
				
			||||||
  roommates: z.array(z.object({
 | 
					  roommates: z.array(z.object({
 | 
				
			||||||
    userID: z.string(),
 | 
					    userID: z.string(),
 | 
				
			||||||
@@ -38,29 +57,259 @@ const formSchema = z.object({
 | 
				
			|||||||
  })).optional(),
 | 
					  })).optional(),
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const billTypeCombo: ComboOption[] = 
 | 
				
			||||||
 | 
					  FormSchema.shape.billType._def.values.map((billType: string) => ({
 | 
				
			||||||
 | 
					  value: billType,
 | 
				
			||||||
 | 
					  label: billType,
 | 
				
			||||||
 | 
					}));
 | 
				
			||||||
 | 
					const recurrenceCombo: ComboOption[] =
 | 
				
			||||||
 | 
					  FormSchema.shape.recurrence._def.values.map((recurrence: string) => ({
 | 
				
			||||||
 | 
					  value: recurrence,
 | 
				
			||||||
 | 
					  label: recurrence,
 | 
				
			||||||
 | 
					}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function CreateBillDrawer({date}: CreateBillDrawerProps) {
 | 
					export default function CreateBillDrawer({date}: CreateBillDrawerProps) {
 | 
				
			||||||
  const form = useForm<z.infer<typeof formSchema>>({
 | 
					
 | 
				
			||||||
    resolver: zodResolver(formSchema),
 | 
					  const form = useForm<z.infer<typeof FormSchema>>({
 | 
				
			||||||
 | 
					    resolver: zodResolver(FormSchema),
 | 
				
			||||||
    defaultValues: {
 | 
					    defaultValues: {
 | 
				
			||||||
      billType: "Rent",
 | 
					      //billType: "Rent",
 | 
				
			||||||
      recurrence: "Monthly",
 | 
					      recurrence: "No recurrence",
 | 
				
			||||||
      includeUserInSplit: true,
 | 
					      includeUserInSplit: true,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const onSubmit = async (data: z.infer<typeof FormSchema>) => {
 | 
				
			||||||
 | 
					    console.log('API received data:', data);
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      console.log('API received data:', data);
 | 
				
			||||||
 | 
					      //const res = await fetch("/api/bills/createBill", {
 | 
				
			||||||
 | 
					        //method: "POST",
 | 
				
			||||||
 | 
					        //headers: {
 | 
				
			||||||
 | 
					          //"Content-Type": "application/json",
 | 
				
			||||||
 | 
					        //},
 | 
				
			||||||
 | 
					        //body: JSON.stringify({
 | 
				
			||||||
 | 
					          //date: date,
 | 
				
			||||||
 | 
					          //billType: data.billType,
 | 
				
			||||||
 | 
					          //billDescription: data.billDescription,
 | 
				
			||||||
 | 
					          //amount: data.amount,
 | 
				
			||||||
 | 
					          //recurrence: data.recurrence,
 | 
				
			||||||
 | 
					          //includeUserInSplit: data.includeUserInSplit,
 | 
				
			||||||
 | 
					          //roommates: data.roommates,
 | 
				
			||||||
 | 
					        //}),
 | 
				
			||||||
 | 
					      //});
 | 
				
			||||||
 | 
					      //if (!res.ok) {
 | 
				
			||||||
 | 
					        //throw new Error("Failed to create bill");
 | 
				
			||||||
 | 
					      //}
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					      console.error("Could not create bill", error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <DrawerContent>
 | 
					    <DrawerContent className="w-full mx-auto items-center justify-center">
 | 
				
			||||||
      <DrawerHeader>
 | 
					      <DrawerHeader>
 | 
				
			||||||
        <DrawerTitle className="text-center md:text-2xl">
 | 
					        <DrawerTitle className="text-center md:text-2xl">
 | 
				
			||||||
          {date.toDateString()}
 | 
					          {date.toDateString()}
 | 
				
			||||||
        </DrawerTitle>
 | 
					        </DrawerTitle>
 | 
				
			||||||
      </DrawerHeader>
 | 
					      </DrawerHeader>
 | 
				
			||||||
      <div className="flex flex-row w-full mx-auto">
 | 
					      <div className="flex flex-row w-full mx-auto justify-center">
 | 
				
			||||||
        <div className="w-1/2 mx-auto text-center">
 | 
					      <Form {...form}>
 | 
				
			||||||
          <h3>Test</h3>
 | 
					        <form onSubmit={form.handleSubmit(onSubmit)}>
 | 
				
			||||||
        </div>
 | 
					          <div className="flex flex-row mt-4">
 | 
				
			||||||
        <div className="w-1/2 mx-auto text-center">
 | 
					            <FormField
 | 
				
			||||||
          <h3>Test</h3>
 | 
					              control={form.control}
 | 
				
			||||||
        </div>
 | 
					              name="billType"
 | 
				
			||||||
 | 
					              render={({ field }) => (
 | 
				
			||||||
 | 
					                <FormItem className="flex flex-col">
 | 
				
			||||||
 | 
					                  <FormLabel className="my-auto">
 | 
				
			||||||
 | 
					                    Bill Type
 | 
				
			||||||
 | 
					                  </FormLabel>
 | 
				
			||||||
 | 
					                  <Popover>
 | 
				
			||||||
 | 
					                    <PopoverTrigger asChild>
 | 
				
			||||||
 | 
					                      <FormControl>
 | 
				
			||||||
 | 
					                        <Button
 | 
				
			||||||
 | 
					                          variant="outline"
 | 
				
			||||||
 | 
					                          role="combobox"
 | 
				
			||||||
 | 
					                          className={cn(
 | 
				
			||||||
 | 
					                            "w-[160px] justify-between mr-2",
 | 
				
			||||||
 | 
					                            !field.value && "text-muted-foreground"
 | 
				
			||||||
 | 
					                          )}
 | 
				
			||||||
 | 
					                        >
 | 
				
			||||||
 | 
					                          {field.value
 | 
				
			||||||
 | 
					                            ? billTypeCombo.find(
 | 
				
			||||||
 | 
					                                (billType) => billType.value === field.value
 | 
				
			||||||
 | 
					                              )?.label
 | 
				
			||||||
 | 
					                            : "Select bill type"}
 | 
				
			||||||
 | 
					                          <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
 | 
				
			||||||
 | 
					                        </Button>
 | 
				
			||||||
 | 
					                      </FormControl>
 | 
				
			||||||
 | 
					                    </PopoverTrigger>
 | 
				
			||||||
 | 
					                    <PopoverContent className="w-[200px]">
 | 
				
			||||||
 | 
					                      <Command>
 | 
				
			||||||
 | 
					                        <CommandList>
 | 
				
			||||||
 | 
					                          <CommandEmpty>No bill type found.</CommandEmpty>
 | 
				
			||||||
 | 
					                          <CommandGroup>
 | 
				
			||||||
 | 
					                            {billTypeCombo.map((billType) => (
 | 
				
			||||||
 | 
					                              <CommandItem
 | 
				
			||||||
 | 
					                                value={billType.label}
 | 
				
			||||||
 | 
					                                key={billType.value}
 | 
				
			||||||
 | 
					                                onSelect={() => {
 | 
				
			||||||
 | 
					                                  form.setValue("billType", billType.value as typeof field.value);
 | 
				
			||||||
 | 
					                                }}
 | 
				
			||||||
 | 
					                              >
 | 
				
			||||||
 | 
					                                <Check
 | 
				
			||||||
 | 
					                                  className={cn(
 | 
				
			||||||
 | 
					                                    "mr-2 h-4 w-4",
 | 
				
			||||||
 | 
					                                    billType.value === field.value
 | 
				
			||||||
 | 
					                                      ? "opacity-100"
 | 
				
			||||||
 | 
					                                      : "opacity-0"
 | 
				
			||||||
 | 
					                                  )}
 | 
				
			||||||
 | 
					                                />
 | 
				
			||||||
 | 
					                                {billType.label}
 | 
				
			||||||
 | 
					                              </CommandItem>
 | 
				
			||||||
 | 
					                            ))}
 | 
				
			||||||
 | 
					                          </CommandGroup>
 | 
				
			||||||
 | 
					                        </CommandList>
 | 
				
			||||||
 | 
					                      </Command>
 | 
				
			||||||
 | 
					                    </PopoverContent>
 | 
				
			||||||
 | 
					                  </Popover>
 | 
				
			||||||
 | 
					                </FormItem>
 | 
				
			||||||
 | 
					              )}
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </FormField>
 | 
				
			||||||
 | 
					            <FormField
 | 
				
			||||||
 | 
					              control={form.control}
 | 
				
			||||||
 | 
					              name="billDescription"
 | 
				
			||||||
 | 
					              render={({ field }) => (
 | 
				
			||||||
 | 
					                <FormItem>
 | 
				
			||||||
 | 
					                  <FormLabel>Bill Description</FormLabel>
 | 
				
			||||||
 | 
					                  <FormControl>
 | 
				
			||||||
 | 
					                    <Input
 | 
				
			||||||
 | 
					                      placeholder="Optional Bill Description or any additional notes"
 | 
				
			||||||
 | 
					                      {...field}
 | 
				
			||||||
 | 
					                      className="md:w-[400px]"
 | 
				
			||||||
 | 
					                    />
 | 
				
			||||||
 | 
					                  </FormControl>
 | 
				
			||||||
 | 
					                </FormItem>
 | 
				
			||||||
 | 
					              )}
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </FormField>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div className="flex flex-row my-4">
 | 
				
			||||||
 | 
					            <FormField
 | 
				
			||||||
 | 
					              control={form.control}
 | 
				
			||||||
 | 
					              name="amount"
 | 
				
			||||||
 | 
					              render={({ field }) => (
 | 
				
			||||||
 | 
					                <FormItem className="mr-2">
 | 
				
			||||||
 | 
					                  <FormLabel>Amount</FormLabel>
 | 
				
			||||||
 | 
					                  <FormControl>
 | 
				
			||||||
 | 
					                    <Input placeholder="Amount" {...field} />
 | 
				
			||||||
 | 
					                  </FormControl>
 | 
				
			||||||
 | 
					                </FormItem>
 | 
				
			||||||
 | 
					              )}
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </FormField>
 | 
				
			||||||
 | 
					            <FormField
 | 
				
			||||||
 | 
					              control={form.control}
 | 
				
			||||||
 | 
					              name="recurrence"
 | 
				
			||||||
 | 
					              render={({ field }) => (
 | 
				
			||||||
 | 
					                <FormItem className="flex flex-col">
 | 
				
			||||||
 | 
					                  <FormLabel className="my-auto">Recurrence</FormLabel>
 | 
				
			||||||
 | 
					                  <Popover>
 | 
				
			||||||
 | 
					                    <PopoverTrigger asChild>
 | 
				
			||||||
 | 
					                      <FormControl>
 | 
				
			||||||
 | 
					                        <Button
 | 
				
			||||||
 | 
					                          variant="outline"
 | 
				
			||||||
 | 
					                          role="combobox"
 | 
				
			||||||
 | 
					                          className={cn(
 | 
				
			||||||
 | 
					                            "w-[160px] justify-between mr-2",
 | 
				
			||||||
 | 
					                            !field.value && "text-muted-foreground"
 | 
				
			||||||
 | 
					                          )}
 | 
				
			||||||
 | 
					                        >
 | 
				
			||||||
 | 
					                          {field.value
 | 
				
			||||||
 | 
					                            ? recurrenceCombo.find(
 | 
				
			||||||
 | 
					                                (recurrence) => recurrence.value === field.value
 | 
				
			||||||
 | 
					                              )?.label
 | 
				
			||||||
 | 
					                            : "Select recurrence"}
 | 
				
			||||||
 | 
					                          <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
 | 
				
			||||||
 | 
					                        </Button>
 | 
				
			||||||
 | 
					                      </FormControl>
 | 
				
			||||||
 | 
					                    </PopoverTrigger>
 | 
				
			||||||
 | 
					                    <PopoverContent className="w-[200px]">
 | 
				
			||||||
 | 
					                      <Command>
 | 
				
			||||||
 | 
					                        <CommandList>
 | 
				
			||||||
 | 
					                          <CommandEmpty>No recurrence found.</CommandEmpty>
 | 
				
			||||||
 | 
					                          <CommandGroup>
 | 
				
			||||||
 | 
					                            {recurrenceCombo.map((recurrence) => (
 | 
				
			||||||
 | 
					                              <CommandItem
 | 
				
			||||||
 | 
					                                value={recurrence.label}
 | 
				
			||||||
 | 
					                                key={recurrence.value}
 | 
				
			||||||
 | 
					                                onSelect={() => {
 | 
				
			||||||
 | 
					                                  form.setValue("recurrence", recurrence.value as typeof field.value);
 | 
				
			||||||
 | 
					                                }}
 | 
				
			||||||
 | 
					                              >
 | 
				
			||||||
 | 
					                                <Check
 | 
				
			||||||
 | 
					                                  className={cn(
 | 
				
			||||||
 | 
					                                    "mr-2 h-4 w-4",
 | 
				
			||||||
 | 
					                                    recurrence.value === field.value
 | 
				
			||||||
 | 
					                                      ? "opacity-100"
 | 
				
			||||||
 | 
					                                      : "opacity-0"
 | 
				
			||||||
 | 
					                                  )}
 | 
				
			||||||
 | 
					                                />
 | 
				
			||||||
 | 
					                                {recurrence.label}
 | 
				
			||||||
 | 
					                              </CommandItem>
 | 
				
			||||||
 | 
					                            ))}
 | 
				
			||||||
 | 
					                          </CommandGroup>
 | 
				
			||||||
 | 
					                        </CommandList>
 | 
				
			||||||
 | 
					                      </Command>
 | 
				
			||||||
 | 
					                    </PopoverContent>
 | 
				
			||||||
 | 
					                  </Popover>
 | 
				
			||||||
 | 
					                </FormItem>
 | 
				
			||||||
 | 
					              )}
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </FormField>
 | 
				
			||||||
 | 
					            <FormField
 | 
				
			||||||
 | 
					              control={form.control}
 | 
				
			||||||
 | 
					              name="includeUserInSplit"
 | 
				
			||||||
 | 
					              render={({ field }) => (
 | 
				
			||||||
 | 
					                <FormItem className="mt-10">
 | 
				
			||||||
 | 
					                  <div className="flex flex-row">
 | 
				
			||||||
 | 
					                    <FormLabel>Include Yourself in Bill Split?</FormLabel>
 | 
				
			||||||
 | 
					                    <FormControl>
 | 
				
			||||||
 | 
					                      <Checkbox 
 | 
				
			||||||
 | 
					                        checked={field.value}
 | 
				
			||||||
 | 
					                        onCheckedChange={field.onChange}
 | 
				
			||||||
 | 
					                        className="ml-2"
 | 
				
			||||||
 | 
					                      />
 | 
				
			||||||
 | 
					                    </FormControl>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </FormItem>
 | 
				
			||||||
 | 
					              )}
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </FormField>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <FormField
 | 
				
			||||||
 | 
					            control={form.control}
 | 
				
			||||||
 | 
					            name="roommates"
 | 
				
			||||||
 | 
					            render={({ field }) => (
 | 
				
			||||||
 | 
					              <FormItem>
 | 
				
			||||||
 | 
					                <FormLabel>Roommates</FormLabel>
 | 
				
			||||||
 | 
					                <FormControl>
 | 
				
			||||||
 | 
					                </FormControl>
 | 
				
			||||||
 | 
					              </FormItem>
 | 
				
			||||||
 | 
					            )}
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					          </FormField>
 | 
				
			||||||
 | 
					          <div className="w-full flex justify-end">
 | 
				
			||||||
 | 
					            <Button type="submit" variant="secondary"
 | 
				
			||||||
 | 
					              className="mt-2"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              Submit
 | 
				
			||||||
 | 
					            </Button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					      </Form>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <DrawerFooter>
 | 
					      <DrawerFooter>
 | 
				
			||||||
        <DrawerClose />
 | 
					        <DrawerClose />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,9 @@ export default function CreateBillForm({date, setIsOpen}: CreateBillFormProps) {
 | 
				
			|||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <Drawer>
 | 
					      <Drawer>
 | 
				
			||||||
        <DrawerTrigger className="w-full">
 | 
					        <DrawerTrigger className="w-full">
 | 
				
			||||||
          <Button variant="outline" size="icon" className="border-none w-full">
 | 
					          <Button variant="outline" size="icon"
 | 
				
			||||||
 | 
					            className="border-none w-full"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
            Create new Bill
 | 
					            Create new Bill
 | 
				
			||||||
          </Button>
 | 
					          </Button>
 | 
				
			||||||
        </DrawerTrigger>
 | 
					        </DrawerTrigger>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								src/components/billtracker/ServerBillDrawer.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/components/billtracker/ServerBillDrawer.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  DrawerClose,
 | 
				
			||||||
 | 
					  DrawerContent,
 | 
				
			||||||
 | 
					  DrawerFooter,
 | 
				
			||||||
 | 
					  DrawerHeader,
 | 
				
			||||||
 | 
					  DrawerTitle,
 | 
				
			||||||
 | 
					} from "~/components/ui/drawer"
 | 
				
			||||||
 | 
					import BillForm from "~/components/billtracker/BillForm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type CreateBillDrawerProps = {
 | 
				
			||||||
 | 
					  date: Date;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function CreateBillDrawer({date}: CreateBillDrawerProps) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <DrawerContent className="w-full mx-auto items-center justify-center">
 | 
				
			||||||
 | 
					      <DrawerHeader>
 | 
				
			||||||
 | 
					        <DrawerTitle className="text-center md:text-2xl">
 | 
				
			||||||
 | 
					          {date.toDateString()}
 | 
				
			||||||
 | 
					        </DrawerTitle>
 | 
				
			||||||
 | 
					      </DrawerHeader>
 | 
				
			||||||
 | 
					      <div className="flex flex-row w-full mx-auto justify-center">
 | 
				
			||||||
 | 
					        <BillForm />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <DrawerFooter>
 | 
				
			||||||
 | 
					        <DrawerClose />
 | 
				
			||||||
 | 
					      </DrawerFooter>
 | 
				
			||||||
 | 
					    </DrawerContent>
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								src/components/ui/checkbox.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/components/ui/checkbox.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
 | 
				
			||||||
 | 
					import { Check } from "lucide-react"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Checkbox = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CheckboxPrimitive.Root>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CheckboxPrimitive.Root
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    <CheckboxPrimitive.Indicator
 | 
				
			||||||
 | 
					      className={cn("flex items-center justify-center text-current")}
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <Check className="h-4 w-4" />
 | 
				
			||||||
 | 
					    </CheckboxPrimitive.Indicator>
 | 
				
			||||||
 | 
					  </CheckboxPrimitive.Root>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					Checkbox.displayName = CheckboxPrimitive.Root.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { Checkbox }
 | 
				
			||||||
							
								
								
									
										155
									
								
								src/components/ui/command.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								src/components/ui/command.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,155 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import { type DialogProps } from "@radix-ui/react-dialog"
 | 
				
			||||||
 | 
					import { Command as CommandPrimitive } from "cmdk"
 | 
				
			||||||
 | 
					import { Search } from "lucide-react"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
 | 
					import { Dialog, DialogContent } from "~/components/ui/dialog"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Command = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					Command.displayName = CommandPrimitive.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface CommandDialogProps extends DialogProps {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <Dialog {...props}>
 | 
				
			||||||
 | 
					      <DialogContent className="overflow-hidden p-0 shadow-lg">
 | 
				
			||||||
 | 
					        <Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
 | 
				
			||||||
 | 
					          {children}
 | 
				
			||||||
 | 
					        </Command>
 | 
				
			||||||
 | 
					      </DialogContent>
 | 
				
			||||||
 | 
					    </Dialog>
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandInput = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.Input>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <div className="flex items-center border-b px-3" cmdk-input-wrapper="">
 | 
				
			||||||
 | 
					    <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
 | 
				
			||||||
 | 
					    <CommandPrimitive.Input
 | 
				
			||||||
 | 
					      ref={ref}
 | 
				
			||||||
 | 
					      className={cn(
 | 
				
			||||||
 | 
					        "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
 | 
				
			||||||
 | 
					        className
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CommandInput.displayName = CommandPrimitive.Input.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandList = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.List>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive.List
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CommandList.displayName = CommandPrimitive.List.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandEmpty = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.Empty>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
 | 
				
			||||||
 | 
					>((props, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive.Empty
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className="py-6 text-center text-sm"
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CommandEmpty.displayName = CommandPrimitive.Empty.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandGroup = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.Group>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive.Group
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CommandGroup.displayName = CommandPrimitive.Group.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandSeparator = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.Separator>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive.Separator
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn("-mx-1 h-px bg-border", className)}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					CommandSeparator.displayName = CommandPrimitive.Separator.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandItem = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof CommandPrimitive.Item>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <CommandPrimitive.Item
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CommandItem.displayName = CommandPrimitive.Item.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const CommandShortcut = ({
 | 
				
			||||||
 | 
					  className,
 | 
				
			||||||
 | 
					  ...props
 | 
				
			||||||
 | 
					}: React.HTMLAttributes<HTMLSpanElement>) => {
 | 
				
			||||||
 | 
					  return (
 | 
				
			||||||
 | 
					    <span
 | 
				
			||||||
 | 
					      className={cn(
 | 
				
			||||||
 | 
					        "ml-auto text-xs tracking-widest text-muted-foreground",
 | 
				
			||||||
 | 
					        className
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					CommandShortcut.displayName = "CommandShortcut"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export {
 | 
				
			||||||
 | 
					  Command,
 | 
				
			||||||
 | 
					  CommandDialog,
 | 
				
			||||||
 | 
					  CommandInput,
 | 
				
			||||||
 | 
					  CommandList,
 | 
				
			||||||
 | 
					  CommandEmpty,
 | 
				
			||||||
 | 
					  CommandGroup,
 | 
				
			||||||
 | 
					  CommandItem,
 | 
				
			||||||
 | 
					  CommandShortcut,
 | 
				
			||||||
 | 
					  CommandSeparator,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										122
									
								
								src/components/ui/dialog.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								src/components/ui/dialog.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
				
			|||||||
 | 
					"use client"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from "react"
 | 
				
			||||||
 | 
					import * as DialogPrimitive from "@radix-ui/react-dialog"
 | 
				
			||||||
 | 
					import { X } from "lucide-react"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { cn } from "~/lib/utils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Dialog = DialogPrimitive.Root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogTrigger = DialogPrimitive.Trigger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogPortal = DialogPrimitive.Portal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogClose = DialogPrimitive.Close
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogOverlay = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DialogPrimitive.Overlay>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DialogPrimitive.Overlay
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogContent = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DialogPrimitive.Content>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
 | 
				
			||||||
 | 
					>(({ className, children, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DialogPortal>
 | 
				
			||||||
 | 
					    <DialogOverlay />
 | 
				
			||||||
 | 
					    <DialogPrimitive.Content
 | 
				
			||||||
 | 
					      ref={ref}
 | 
				
			||||||
 | 
					      className={cn(
 | 
				
			||||||
 | 
					        "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
 | 
				
			||||||
 | 
					        className
 | 
				
			||||||
 | 
					      )}
 | 
				
			||||||
 | 
					      {...props}
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      {children}
 | 
				
			||||||
 | 
					      <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
 | 
				
			||||||
 | 
					        <X className="h-4 w-4" />
 | 
				
			||||||
 | 
					        <span className="sr-only">Close</span>
 | 
				
			||||||
 | 
					      </DialogPrimitive.Close>
 | 
				
			||||||
 | 
					    </DialogPrimitive.Content>
 | 
				
			||||||
 | 
					  </DialogPortal>
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DialogContent.displayName = DialogPrimitive.Content.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogHeader = ({
 | 
				
			||||||
 | 
					  className,
 | 
				
			||||||
 | 
					  ...props
 | 
				
			||||||
 | 
					}: React.HTMLAttributes<HTMLDivElement>) => (
 | 
				
			||||||
 | 
					  <div
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "flex flex-col space-y-1.5 text-center sm:text-left",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					DialogHeader.displayName = "DialogHeader"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogFooter = ({
 | 
				
			||||||
 | 
					  className,
 | 
				
			||||||
 | 
					  ...props
 | 
				
			||||||
 | 
					}: React.HTMLAttributes<HTMLDivElement>) => (
 | 
				
			||||||
 | 
					  <div
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					DialogFooter.displayName = "DialogFooter"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogTitle = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DialogPrimitive.Title>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DialogPrimitive.Title
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn(
 | 
				
			||||||
 | 
					      "text-lg font-semibold leading-none tracking-tight",
 | 
				
			||||||
 | 
					      className
 | 
				
			||||||
 | 
					    )}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DialogTitle.displayName = DialogPrimitive.Title.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const DialogDescription = React.forwardRef<
 | 
				
			||||||
 | 
					  React.ElementRef<typeof DialogPrimitive.Description>,
 | 
				
			||||||
 | 
					  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
 | 
				
			||||||
 | 
					>(({ className, ...props }, ref) => (
 | 
				
			||||||
 | 
					  <DialogPrimitive.Description
 | 
				
			||||||
 | 
					    ref={ref}
 | 
				
			||||||
 | 
					    className={cn("text-sm text-muted-foreground", className)}
 | 
				
			||||||
 | 
					    {...props}
 | 
				
			||||||
 | 
					  />
 | 
				
			||||||
 | 
					))
 | 
				
			||||||
 | 
					DialogDescription.displayName = DialogPrimitive.Description.displayName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export {
 | 
				
			||||||
 | 
					  Dialog,
 | 
				
			||||||
 | 
					  DialogPortal,
 | 
				
			||||||
 | 
					  DialogOverlay,
 | 
				
			||||||
 | 
					  DialogClose,
 | 
				
			||||||
 | 
					  DialogTrigger,
 | 
				
			||||||
 | 
					  DialogContent,
 | 
				
			||||||
 | 
					  DialogHeader,
 | 
				
			||||||
 | 
					  DialogFooter,
 | 
				
			||||||
 | 
					  DialogTitle,
 | 
				
			||||||
 | 
					  DialogDescription,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user