feat: check update
This commit is contained in:
		
							parent
							
								
									49da9100d2
								
							
						
					
					
						commit
						b7d64cba7b
					
				| @ -9,13 +9,17 @@ | |||||||
|     "preview": "vite preview" |     "preview": "vite preview" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|  |     "@radix-ui/react-alert-dialog": "^1.1.1", | ||||||
|     "@radix-ui/react-checkbox": "^1.1.1", |     "@radix-ui/react-checkbox": "^1.1.1", | ||||||
|     "@radix-ui/react-slot": "^1.1.0", |     "@radix-ui/react-slot": "^1.1.0", | ||||||
|  |     "@radix-ui/react-toast": "^1.2.1", | ||||||
|     "class-variance-authority": "^0.7.0", |     "class-variance-authority": "^0.7.0", | ||||||
|     "clsx": "^2.1.1", |     "clsx": "^2.1.1", | ||||||
|     "lucide-react": "^0.408.0", |     "lucide-react": "^0.408.0", | ||||||
|  |     "next-themes": "^0.3.0", | ||||||
|     "react": "^18.2.0", |     "react": "^18.2.0", | ||||||
|     "react-dom": "^18.2.0", |     "react-dom": "^18.2.0", | ||||||
|  |     "sonner": "^1.5.0", | ||||||
|     "tailwind-merge": "^2.4.0", |     "tailwind-merge": "^2.4.0", | ||||||
|     "tailwindcss-animate": "^1.0.7" |     "tailwindcss-animate": "^1.0.7" | ||||||
|   }, |   }, | ||||||
|  | |||||||
							
								
								
									
										420
									
								
								frontend/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										420
									
								
								frontend/pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							| @ -8,12 +8,18 @@ importers: | |||||||
| 
 | 
 | ||||||
|   .: |   .: | ||||||
|     dependencies: |     dependencies: | ||||||
|  |       '@radix-ui/react-alert-dialog': | ||||||
|  |         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-checkbox': |       '@radix-ui/react-checkbox': | ||||||
|         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) | ||||||
|       '@radix-ui/react-slot': |       '@radix-ui/react-slot': | ||||||
|         specifier: ^1.1.0 |         specifier: ^1.1.0 | ||||||
|         version: 1.1.0(@types/react@18.3.3)(react@18.3.1) |         version: 1.1.0(@types/react@18.3.3)(react@18.3.1) | ||||||
|  |       '@radix-ui/react-toast': | ||||||
|  |         specifier: ^1.2.1 | ||||||
|  |         version: 1.2.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) | ||||||
|       class-variance-authority: |       class-variance-authority: | ||||||
|         specifier: ^0.7.0 |         specifier: ^0.7.0 | ||||||
|         version: 0.7.0 |         version: 0.7.0 | ||||||
| @ -23,12 +29,18 @@ importers: | |||||||
|       lucide-react: |       lucide-react: | ||||||
|         specifier: ^0.408.0 |         specifier: ^0.408.0 | ||||||
|         version: 0.408.0(react@18.3.1) |         version: 0.408.0(react@18.3.1) | ||||||
|  |       next-themes: | ||||||
|  |         specifier: ^0.3.0 | ||||||
|  |         version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) | ||||||
|       react: |       react: | ||||||
|         specifier: ^18.2.0 |         specifier: ^18.2.0 | ||||||
|         version: 18.3.1 |         version: 18.3.1 | ||||||
|       react-dom: |       react-dom: | ||||||
|         specifier: ^18.2.0 |         specifier: ^18.2.0 | ||||||
|         version: 18.3.1(react@18.3.1) |         version: 18.3.1(react@18.3.1) | ||||||
|  |       sonner: | ||||||
|  |         specifier: ^1.5.0 | ||||||
|  |         version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) | ||||||
|       tailwind-merge: |       tailwind-merge: | ||||||
|         specifier: ^2.4.0 |         specifier: ^2.4.0 | ||||||
|         version: 2.4.0 |         version: 2.4.0 | ||||||
| @ -252,6 +264,19 @@ packages: | |||||||
|   '@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==} | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-alert-dialog@1.1.1': | ||||||
|  |     resolution: {integrity: sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==} | ||||||
|  |     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-checkbox@1.1.1': |   '@radix-ui/react-checkbox@1.1.1': | ||||||
|     resolution: {integrity: sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==} |     resolution: {integrity: sha512-0i/EKJ222Afa1FE0C6pNJxDq1itzcl3HChE9DwskA4th4KRse8ojx8a1nVcOjwJdbpDLcz7uol77yYnQNMHdKw==} | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
| @ -265,6 +290,19 @@ packages: | |||||||
|       '@types/react-dom': |       '@types/react-dom': | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-collection@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       '@types/react-dom': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |       react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  |       '@types/react-dom': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|   '@radix-ui/react-compose-refs@1.1.0': |   '@radix-ui/react-compose-refs@1.1.0': | ||||||
|     resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} |     resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} | ||||||
|     peerDependencies: |     peerDependencies: | ||||||
| @ -283,6 +321,76 @@ packages: | |||||||
|       '@types/react': |       '@types/react': | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-dialog@1.1.1': | ||||||
|  |     resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==} | ||||||
|  |     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-dismissable-layer@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       '@types/react-dom': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |       react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  |       '@types/react-dom': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   '@radix-ui/react-focus-guards@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   '@radix-ui/react-focus-scope@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       '@types/react-dom': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |       react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  |       '@types/react-dom': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   '@radix-ui/react-id@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   '@radix-ui/react-portal@1.1.1': | ||||||
|  |     resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       '@types/react-dom': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |       react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  |       '@types/react-dom': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|   '@radix-ui/react-presence@1.1.0': |   '@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: | ||||||
| @ -318,6 +426,19 @@ packages: | |||||||
|       '@types/react': |       '@types/react': | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-toast@1.2.1': | ||||||
|  |     resolution: {integrity: sha512-5trl7piMXcZiCq7MW6r8YYmu0bK5qDpTWz+FdEPdKyft2UixkspheYbjbrLXVN5NGKHFbOP7lm8eD0biiSqZqg==} | ||||||
|  |     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-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: | ||||||
| @ -336,6 +457,15 @@ packages: | |||||||
|       '@types/react': |       '@types/react': | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-use-escape-keydown@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': '*' | ||||||
|  |       react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|   '@radix-ui/react-use-layout-effect@1.1.0': |   '@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: | ||||||
| @ -363,6 +493,19 @@ packages: | |||||||
|       '@types/react': |       '@types/react': | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-visually-hidden@1.1.0': | ||||||
|  |     resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|   '@types/node@20.14.10': |   '@types/node@20.14.10': | ||||||
|     resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} |     resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} | ||||||
| 
 | 
 | ||||||
| @ -411,6 +554,10 @@ packages: | |||||||
|   arg@5.0.2: |   arg@5.0.2: | ||||||
|     resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} |     resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} | ||||||
| 
 | 
 | ||||||
|  |   aria-hidden@1.2.4: | ||||||
|  |     resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  | 
 | ||||||
|   autoprefixer@10.4.19: |   autoprefixer@10.4.19: | ||||||
|     resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} |     resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} | ||||||
|     engines: {node: ^10 || ^12 || >=14} |     engines: {node: ^10 || ^12 || >=14} | ||||||
| @ -504,6 +651,9 @@ packages: | |||||||
|       supports-color: |       supports-color: | ||||||
|         optional: true |         optional: true | ||||||
| 
 | 
 | ||||||
|  |   detect-node-es@1.1.0: | ||||||
|  |     resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} | ||||||
|  | 
 | ||||||
|   didyoumean@1.2.2: |   didyoumean@1.2.2: | ||||||
|     resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} |     resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} | ||||||
| 
 | 
 | ||||||
| @ -685,6 +835,10 @@ packages: | |||||||
|     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} |     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} | ||||||
|     engines: {node: '>=6.9.0'} |     engines: {node: '>=6.9.0'} | ||||||
| 
 | 
 | ||||||
|  |   get-nonce@1.0.1: | ||||||
|  |     resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} | ||||||
|  |     engines: {node: '>=6'} | ||||||
|  | 
 | ||||||
|   glob-parent@5.1.2: |   glob-parent@5.1.2: | ||||||
|     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} |     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} | ||||||
|     engines: {node: '>= 6'} |     engines: {node: '>= 6'} | ||||||
| @ -709,6 +863,9 @@ packages: | |||||||
|     resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} |     resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} | ||||||
|     engines: {node: '>= 0.4'} |     engines: {node: '>= 0.4'} | ||||||
| 
 | 
 | ||||||
|  |   invariant@2.2.4: | ||||||
|  |     resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} | ||||||
|  | 
 | ||||||
|   is-binary-path@2.1.0: |   is-binary-path@2.1.0: | ||||||
|     resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} |     resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} | ||||||
|     engines: {node: '>=8'} |     engines: {node: '>=8'} | ||||||
| @ -813,6 +970,12 @@ packages: | |||||||
|     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} |     engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} | ||||||
|     hasBin: true |     hasBin: true | ||||||
| 
 | 
 | ||||||
|  |   next-themes@0.3.0: | ||||||
|  |     resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} | ||||||
|  |     peerDependencies: | ||||||
|  |       react: ^16.8 || ^17 || ^18 | ||||||
|  |       react-dom: ^16.8 || ^17 || ^18 | ||||||
|  | 
 | ||||||
|   node-releases@2.0.14: |   node-releases@2.0.14: | ||||||
|     resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} |     resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} | ||||||
| 
 | 
 | ||||||
| @ -914,6 +1077,36 @@ packages: | |||||||
|     resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} |     resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| 
 | 
 | ||||||
|  |   react-remove-scroll-bar@2.3.6: | ||||||
|  |     resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |       react: ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   react-remove-scroll@2.5.7: | ||||||
|  |     resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |       react: ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   react-style-singleton@2.2.1: | ||||||
|  |     resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |       react: ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|   react@18.3.1: |   react@18.3.1: | ||||||
|     resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} |     resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| @ -960,6 +1153,12 @@ packages: | |||||||
|     resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} |     resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} | ||||||
|     engines: {node: '>=14'} |     engines: {node: '>=14'} | ||||||
| 
 | 
 | ||||||
|  |   sonner@1.5.0: | ||||||
|  |     resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==} | ||||||
|  |     peerDependencies: | ||||||
|  |       react: ^18.0.0 | ||||||
|  |       react-dom: ^18.0.0 | ||||||
|  | 
 | ||||||
|   source-map-js@1.2.0: |   source-map-js@1.2.0: | ||||||
|     resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} |     resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} | ||||||
|     engines: {node: '>=0.10.0'} |     engines: {node: '>=0.10.0'} | ||||||
| @ -1028,6 +1227,9 @@ packages: | |||||||
|   ts-interface-checker@0.1.13: |   ts-interface-checker@0.1.13: | ||||||
|     resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} |     resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} | ||||||
| 
 | 
 | ||||||
|  |   tslib@2.6.3: | ||||||
|  |     resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} | ||||||
|  | 
 | ||||||
|   typescript@4.9.5: |   typescript@4.9.5: | ||||||
|     resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} |     resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} | ||||||
|     engines: {node: '>=4.2.0'} |     engines: {node: '>=4.2.0'} | ||||||
| @ -1042,6 +1244,26 @@ packages: | |||||||
|     peerDependencies: |     peerDependencies: | ||||||
|       browserslist: '>= 4.21.0' |       browserslist: '>= 4.21.0' | ||||||
| 
 | 
 | ||||||
|  |   use-callback-ref@1.3.2: | ||||||
|  |     resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |       react: ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|  |   use-sidecar@1.1.2: | ||||||
|  |     resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} | ||||||
|  |     engines: {node: '>=10'} | ||||||
|  |     peerDependencies: | ||||||
|  |       '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |       react: ^16.8.0 || ^17.0.0 || ^18.0.0 | ||||||
|  |     peerDependenciesMeta: | ||||||
|  |       '@types/react': | ||||||
|  |         optional: true | ||||||
|  | 
 | ||||||
|   util-deprecate@1.0.2: |   util-deprecate@1.0.2: | ||||||
|     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} |     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} | ||||||
| 
 | 
 | ||||||
| @ -1321,6 +1543,20 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   '@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)': | ||||||
|  |     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-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-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-slot': 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-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)': |   '@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: |     dependencies: | ||||||
|       '@radix-ui/primitive': 1.1.0 |       '@radix-ui/primitive': 1.1.0 | ||||||
| @ -1337,6 +1573,18 @@ 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-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: | ||||||
|  |       '@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-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-slot': 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-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 | ||||||
| @ -1349,6 +1597,75 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/react': 18.3.3 |       '@types/react': 18.3.3 | ||||||
| 
 | 
 | ||||||
|  |   '@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: | ||||||
|  |       '@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-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-focus-guards': 1.1.0(@types/react@18.3.3)(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) | ||||||
|  |       '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(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) | ||||||
|  |       '@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-slot': 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) | ||||||
|  |       aria-hidden: 1.2.4 | ||||||
|  |       react: 18.3.1 | ||||||
|  |       react-dom: 18.3.1(react@18.3.1) | ||||||
|  |       react-remove-scroll: 2.5.7(@types/react@18.3.3)(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)': | ||||||
|  |     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-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-callback-ref': 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) | ||||||
|  |       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-guards@1.1.0(@types/react@18.3.3)(react@18.3.1)': | ||||||
|  |     dependencies: | ||||||
|  |       react: 18.3.1 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|  |   '@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: | ||||||
|  |       '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(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-callback-ref': 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-id@1.1.0(@types/react@18.3.3)(react@18.3.1)': | ||||||
|  |     dependencies: | ||||||
|  |       '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) | ||||||
|  |       react: 18.3.1 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|  |   '@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: | ||||||
|  |       '@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-layout-effect': 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-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) | ||||||
| @ -1375,6 +1692,26 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/react': 18.3.3 |       '@types/react': 18.3.3 | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-toast@1.2.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-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-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-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-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-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-callback-ref': 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) | ||||||
|  |       '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) | ||||||
|  |       '@radix-ui/react-visually-hidden': 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) | ||||||
|  |       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-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 | ||||||
| @ -1388,6 +1725,13 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/react': 18.3.3 |       '@types/react': 18.3.3 | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1)': | ||||||
|  |     dependencies: | ||||||
|  |       '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) | ||||||
|  |       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 | ||||||
| @ -1407,6 +1751,15 @@ snapshots: | |||||||
|     optionalDependencies: |     optionalDependencies: | ||||||
|       '@types/react': 18.3.3 |       '@types/react': 18.3.3 | ||||||
| 
 | 
 | ||||||
|  |   '@radix-ui/react-visually-hidden@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: | ||||||
|  |       '@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) | ||||||
|  |       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 | ||||||
|  | 
 | ||||||
|   '@types/node@20.14.10': |   '@types/node@20.14.10': | ||||||
|     dependencies: |     dependencies: | ||||||
|       undici-types: 5.26.5 |       undici-types: 5.26.5 | ||||||
| @ -1458,6 +1811,10 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   arg@5.0.2: {} |   arg@5.0.2: {} | ||||||
| 
 | 
 | ||||||
|  |   aria-hidden@1.2.4: | ||||||
|  |     dependencies: | ||||||
|  |       tslib: 2.6.3 | ||||||
|  | 
 | ||||||
|   autoprefixer@10.4.19(postcss@8.4.39): |   autoprefixer@10.4.19(postcss@8.4.39): | ||||||
|     dependencies: |     dependencies: | ||||||
|       browserslist: 4.23.2 |       browserslist: 4.23.2 | ||||||
| @ -1547,6 +1904,8 @@ snapshots: | |||||||
|     dependencies: |     dependencies: | ||||||
|       ms: 2.1.2 |       ms: 2.1.2 | ||||||
| 
 | 
 | ||||||
|  |   detect-node-es@1.1.0: {} | ||||||
|  | 
 | ||||||
|   didyoumean@1.2.2: {} |   didyoumean@1.2.2: {} | ||||||
| 
 | 
 | ||||||
|   dlv@1.1.3: {} |   dlv@1.1.3: {} | ||||||
| @ -1678,6 +2037,8 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   gensync@1.0.0-beta.2: {} |   gensync@1.0.0-beta.2: {} | ||||||
| 
 | 
 | ||||||
|  |   get-nonce@1.0.1: {} | ||||||
|  | 
 | ||||||
|   glob-parent@5.1.2: |   glob-parent@5.1.2: | ||||||
|     dependencies: |     dependencies: | ||||||
|       is-glob: 4.0.3 |       is-glob: 4.0.3 | ||||||
| @ -1703,6 +2064,10 @@ snapshots: | |||||||
|     dependencies: |     dependencies: | ||||||
|       function-bind: 1.1.2 |       function-bind: 1.1.2 | ||||||
| 
 | 
 | ||||||
|  |   invariant@2.2.4: | ||||||
|  |     dependencies: | ||||||
|  |       loose-envify: 1.4.0 | ||||||
|  | 
 | ||||||
|   is-binary-path@2.1.0: |   is-binary-path@2.1.0: | ||||||
|     dependencies: |     dependencies: | ||||||
|       binary-extensions: 2.3.0 |       binary-extensions: 2.3.0 | ||||||
| @ -1784,6 +2149,11 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   nanoid@3.3.7: {} |   nanoid@3.3.7: {} | ||||||
| 
 | 
 | ||||||
|  |   next-themes@0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       react: 18.3.1 | ||||||
|  |       react-dom: 18.3.1(react@18.3.1) | ||||||
|  | 
 | ||||||
|   node-releases@2.0.14: {} |   node-releases@2.0.14: {} | ||||||
| 
 | 
 | ||||||
|   normalize-path@3.0.0: {} |   normalize-path@3.0.0: {} | ||||||
| @ -1860,6 +2230,34 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   react-refresh@0.14.2: {} |   react-refresh@0.14.2: {} | ||||||
| 
 | 
 | ||||||
|  |   react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       react: 18.3.1 | ||||||
|  |       react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) | ||||||
|  |       tslib: 2.6.3 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|  |   react-remove-scroll@2.5.7(@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-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       get-nonce: 1.0.1 | ||||||
|  |       invariant: 2.2.4 | ||||||
|  |       react: 18.3.1 | ||||||
|  |       tslib: 2.6.3 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|   react@18.3.1: |   react@18.3.1: | ||||||
|     dependencies: |     dependencies: | ||||||
|       loose-envify: 1.4.0 |       loose-envify: 1.4.0 | ||||||
| @ -1902,6 +2300,11 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   signal-exit@4.1.0: {} |   signal-exit@4.1.0: {} | ||||||
| 
 | 
 | ||||||
|  |   sonner@1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       react: 18.3.1 | ||||||
|  |       react-dom: 18.3.1(react@18.3.1) | ||||||
|  | 
 | ||||||
|   source-map-js@1.2.0: {} |   source-map-js@1.2.0: {} | ||||||
| 
 | 
 | ||||||
|   sourcemap-codec@1.4.8: {} |   sourcemap-codec@1.4.8: {} | ||||||
| @ -1991,6 +2394,8 @@ snapshots: | |||||||
| 
 | 
 | ||||||
|   ts-interface-checker@0.1.13: {} |   ts-interface-checker@0.1.13: {} | ||||||
| 
 | 
 | ||||||
|  |   tslib@2.6.3: {} | ||||||
|  | 
 | ||||||
|   typescript@4.9.5: {} |   typescript@4.9.5: {} | ||||||
| 
 | 
 | ||||||
|   undici-types@5.26.5: {} |   undici-types@5.26.5: {} | ||||||
| @ -2001,6 +2406,21 @@ snapshots: | |||||||
|       escalade: 3.1.2 |       escalade: 3.1.2 | ||||||
|       picocolors: 1.0.1 |       picocolors: 1.0.1 | ||||||
| 
 | 
 | ||||||
|  |   use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       react: 18.3.1 | ||||||
|  |       tslib: 2.6.3 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|  |   use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): | ||||||
|  |     dependencies: | ||||||
|  |       detect-node-es: 1.1.0 | ||||||
|  |       react: 18.3.1 | ||||||
|  |       tslib: 2.6.3 | ||||||
|  |     optionalDependencies: | ||||||
|  |       '@types/react': 18.3.3 | ||||||
|  | 
 | ||||||
|   util-deprecate@1.0.2: {} |   util-deprecate@1.0.2: {} | ||||||
| 
 | 
 | ||||||
|   vite@3.2.10(@types/node@20.14.10): |   vite@3.2.10(@types/node@20.14.10): | ||||||
|  | |||||||
| @ -1,9 +1,12 @@ | |||||||
| import { ThemeProvider } from "@/components/theme-provider" | import { ThemeProvider } from "@/components/theme-provider" | ||||||
|  | import { Toaster } from "@/components/ui/sonner" | ||||||
|  | 
 | ||||||
| import Panel from "@/pages/Panel" | import Panel from "@/pages/Panel" | ||||||
| 
 | 
 | ||||||
| function App() { | function App() { | ||||||
|   return ( |   return ( | ||||||
|     <ThemeProvider defaultTheme="system" storageKey="vite-ui-theme"> |     <ThemeProvider defaultTheme="system" storageKey="vite-ui-theme"> | ||||||
|  |       <Toaster /> | ||||||
|       <Panel /> |       <Panel /> | ||||||
|     </ThemeProvider> |     </ThemeProvider> | ||||||
|   ) |   ) | ||||||
|  | |||||||
							
								
								
									
										139
									
								
								frontend/src/components/ui/alert-dialog.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								frontend/src/components/ui/alert-dialog.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | |||||||
|  | import * as React from "react" | ||||||
|  | import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" | ||||||
|  | 
 | ||||||
|  | import { cn } from "@/lib/utils" | ||||||
|  | import { buttonVariants } from "@/components/ui/button" | ||||||
|  | 
 | ||||||
|  | const AlertDialog = AlertDialogPrimitive.Root | ||||||
|  | 
 | ||||||
|  | const AlertDialogTrigger = AlertDialogPrimitive.Trigger | ||||||
|  | 
 | ||||||
|  | const AlertDialogPortal = AlertDialogPrimitive.Portal | ||||||
|  | 
 | ||||||
|  | const AlertDialogOverlay = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Overlay>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPrimitive.Overlay | ||||||
|  |     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} | ||||||
|  |     ref={ref} | ||||||
|  |   /> | ||||||
|  | )) | ||||||
|  | AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName | ||||||
|  | 
 | ||||||
|  | const AlertDialogContent = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Content>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPortal> | ||||||
|  |     <AlertDialogOverlay /> | ||||||
|  |     <AlertDialogPrimitive.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} | ||||||
|  |     /> | ||||||
|  |   </AlertDialogPortal> | ||||||
|  | )) | ||||||
|  | AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName | ||||||
|  | 
 | ||||||
|  | const AlertDialogHeader = ({ | ||||||
|  |   className, | ||||||
|  |   ...props | ||||||
|  | }: React.HTMLAttributes<HTMLDivElement>) => ( | ||||||
|  |   <div | ||||||
|  |     className={cn( | ||||||
|  |       "flex flex-col space-y-2 text-center sm:text-left", | ||||||
|  |       className | ||||||
|  |     )} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | ) | ||||||
|  | AlertDialogHeader.displayName = "AlertDialogHeader" | ||||||
|  | 
 | ||||||
|  | const AlertDialogFooter = ({ | ||||||
|  |   className, | ||||||
|  |   ...props | ||||||
|  | }: React.HTMLAttributes<HTMLDivElement>) => ( | ||||||
|  |   <div | ||||||
|  |     className={cn( | ||||||
|  |       "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", | ||||||
|  |       className | ||||||
|  |     )} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | ) | ||||||
|  | AlertDialogFooter.displayName = "AlertDialogFooter" | ||||||
|  | 
 | ||||||
|  | const AlertDialogTitle = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Title>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPrimitive.Title | ||||||
|  |     ref={ref} | ||||||
|  |     className={cn("text-lg font-semibold", className)} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | )) | ||||||
|  | AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName | ||||||
|  | 
 | ||||||
|  | const AlertDialogDescription = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Description>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPrimitive.Description | ||||||
|  |     ref={ref} | ||||||
|  |     className={cn("text-sm text-muted-foreground", className)} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | )) | ||||||
|  | AlertDialogDescription.displayName = | ||||||
|  |   AlertDialogPrimitive.Description.displayName | ||||||
|  | 
 | ||||||
|  | const AlertDialogAction = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Action>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPrimitive.Action | ||||||
|  |     ref={ref} | ||||||
|  |     className={cn(buttonVariants(), className)} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | )) | ||||||
|  | AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName | ||||||
|  | 
 | ||||||
|  | const AlertDialogCancel = React.forwardRef< | ||||||
|  |   React.ElementRef<typeof AlertDialogPrimitive.Cancel>, | ||||||
|  |   React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel> | ||||||
|  | >(({ className, ...props }, ref) => ( | ||||||
|  |   <AlertDialogPrimitive.Cancel | ||||||
|  |     ref={ref} | ||||||
|  |     className={cn( | ||||||
|  |       buttonVariants({ variant: "outline" }), | ||||||
|  |       "mt-2 sm:mt-0", | ||||||
|  |       className | ||||||
|  |     )} | ||||||
|  |     {...props} | ||||||
|  |   /> | ||||||
|  | )) | ||||||
|  | AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName | ||||||
|  | 
 | ||||||
|  | export { | ||||||
|  |   AlertDialog, | ||||||
|  |   AlertDialogPortal, | ||||||
|  |   AlertDialogOverlay, | ||||||
|  |   AlertDialogTrigger, | ||||||
|  |   AlertDialogContent, | ||||||
|  |   AlertDialogHeader, | ||||||
|  |   AlertDialogFooter, | ||||||
|  |   AlertDialogTitle, | ||||||
|  |   AlertDialogDescription, | ||||||
|  |   AlertDialogAction, | ||||||
|  |   AlertDialogCancel, | ||||||
|  | } | ||||||
							
								
								
									
										29
									
								
								frontend/src/components/ui/sonner.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								frontend/src/components/ui/sonner.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | import { useTheme } from "next-themes" | ||||||
|  | import { Toaster as Sonner } from "sonner" | ||||||
|  | 
 | ||||||
|  | type ToasterProps = React.ComponentProps<typeof Sonner> | ||||||
|  | 
 | ||||||
|  | const Toaster = ({ ...props }: ToasterProps) => { | ||||||
|  |   const { theme = "system" } = useTheme() | ||||||
|  | 
 | ||||||
|  |   return ( | ||||||
|  |     <Sonner | ||||||
|  |       theme={theme as ToasterProps["theme"]} | ||||||
|  |       className="toaster group" | ||||||
|  |       toastOptions={{ | ||||||
|  |         classNames: { | ||||||
|  |           toast: | ||||||
|  |             "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg", | ||||||
|  |           description: "group-[.toast]:text-muted-foreground", | ||||||
|  |           actionButton: | ||||||
|  |             "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground", | ||||||
|  |           cancelButton: | ||||||
|  |             "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground", | ||||||
|  |         }, | ||||||
|  |       }} | ||||||
|  |       {...props} | ||||||
|  |     /> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { Toaster } | ||||||
| @ -1,9 +1,13 @@ | |||||||
| import React, { useEffect, useState } from 'react' | import React, { useEffect, useState } from 'react' | ||||||
|  | 
 | ||||||
| import { Button } from '@/components/ui/button' | import { Button } from '@/components/ui/button' | ||||||
| import { Input } from '@/components/ui/input' | import { Input } from '@/components/ui/input' | ||||||
| import { Checkbox } from '@/components/ui/checkbox' | import { Checkbox } from '@/components/ui/checkbox' | ||||||
| 
 | 
 | ||||||
|  | import { toast } from 'sonner' | ||||||
|  | 
 | ||||||
| import { QueryMacAddressByPrefix, QueryVersion } from '../../wailsjs/go/service/SQLiteHelper' | import { QueryMacAddressByPrefix, QueryVersion } from '../../wailsjs/go/service/SQLiteHelper' | ||||||
|  | import { GetLatestVersion } from '../../wailsjs/go/service/UpdateService' | ||||||
| 
 | 
 | ||||||
| const Panel: React.FC = () => { | const Panel: React.FC = () => { | ||||||
|   const [macAddress, setMacAddress] = useState('') |   const [macAddress, setMacAddress] = useState('') | ||||||
| @ -14,6 +18,8 @@ const Panel: React.FC = () => { | |||||||
|   const [lastUpdate, setLastUpdate] = useState('') |   const [lastUpdate, setLastUpdate] = useState('') | ||||||
|   const [databaseDate, setDatabaseDate] = useState('') |   const [databaseDate, setDatabaseDate] = useState('') | ||||||
| 
 | 
 | ||||||
|  |   const [checkDisabled, setCheckDisabled] = useState(false) | ||||||
|  | 
 | ||||||
|   useEffect(() => { |   useEffect(() => { | ||||||
|     QueryVersion().then(res => { |     QueryVersion().then(res => { | ||||||
|       setDatabaseDate(res) |       setDatabaseDate(res) | ||||||
| @ -49,7 +55,31 @@ const Panel: React.FC = () => { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   const handleCheck = () => { |   const handleCheck = () => { | ||||||
|     console.log('check') |     setCheckDisabled(true) | ||||||
|  |     GetLatestVersion().then(res => { | ||||||
|  |       if (res.Version === null) { | ||||||
|  |         setCheckDisabled(false) | ||||||
|  |         toast('Check update failed.', { | ||||||
|  |           description: 'Please check your internet connection.', | ||||||
|  |           action: { | ||||||
|  |             label: 'Close', | ||||||
|  |             onClick: () => {}, | ||||||
|  |           }, | ||||||
|  |         }) | ||||||
|  |       } else { | ||||||
|  |         setCheckDisabled(false) | ||||||
|  |         if (res === databaseDate) { | ||||||
|  |           toast('No new version available', { | ||||||
|  |             description: '🎉 You are using the latest version.', | ||||||
|  |             action: { | ||||||
|  |               label: 'Close', | ||||||
|  |               onClick: () => {}, | ||||||
|  |             }, | ||||||
|  |           }) | ||||||
|  |         } else { | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return ( |   return ( | ||||||
| @ -85,7 +115,11 @@ const Panel: React.FC = () => { | |||||||
|       <div className="flex items-center"> |       <div className="flex items-center"> | ||||||
|         <label className="w-1/3 select-none">Database</label> |         <label className="w-1/3 select-none">Database</label> | ||||||
|         <Input className="w-5/12 p-1 border h-8" value={databaseDate} readOnly /> |         <Input className="w-5/12 p-1 border h-8" value={databaseDate} readOnly /> | ||||||
|         <Button className="ml-2 p-1 h-8 w-1/4 select-none" onClick={handleCheck}> |         <Button | ||||||
|  |           className="ml-2 p-1 h-8 w-1/4 select-none" | ||||||
|  |           onClick={handleCheck} | ||||||
|  |           disabled={checkDisabled} | ||||||
|  |         > | ||||||
|           Check |           Check | ||||||
|         </Button> |         </Button> | ||||||
|       </div> |       </div> | ||||||
|  | |||||||
| @ -7,3 +7,5 @@ export function Close():Promise<void>; | |||||||
| export function QueryMacAddressByPrefix(arg1:string):Promise<service.MacAddress>; | export function QueryMacAddressByPrefix(arg1:string):Promise<service.MacAddress>; | ||||||
| 
 | 
 | ||||||
| export function QueryVersion():Promise<string>; | export function QueryVersion():Promise<string>; | ||||||
|  | 
 | ||||||
|  | export function ReloadDatabase():Promise<boolean>; | ||||||
|  | |||||||
| @ -13,3 +13,7 @@ export function QueryMacAddressByPrefix(arg1) { | |||||||
| export function QueryVersion() { | export function QueryVersion() { | ||||||
|   return window['go']['service']['SQLiteHelper']['QueryVersion'](); |   return window['go']['service']['SQLiteHelper']['QueryVersion'](); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export function ReloadDatabase() { | ||||||
|  |   return window['go']['service']['SQLiteHelper']['ReloadDatabase'](); | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								frontend/wailsjs/go/service/UpdateService.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								frontend/wailsjs/go/service/UpdateService.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
 | ||||||
|  | // This file is automatically generated. DO NOT EDIT
 | ||||||
|  | 
 | ||||||
|  | export function GetLatestVersion():Promise<any>; | ||||||
							
								
								
									
										7
									
								
								frontend/wailsjs/go/service/UpdateService.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								frontend/wailsjs/go/service/UpdateService.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | // @ts-check
 | ||||||
|  | // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
 | ||||||
|  | // This file is automatically generated. DO NOT EDIT
 | ||||||
|  | 
 | ||||||
|  | export function GetLatestVersion() { | ||||||
|  |   return window['go']['service']['UpdateService']['GetLatestVersion'](); | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								main.go
									
									
									
									
									
								
							| @ -23,7 +23,10 @@ func main() { | |||||||
| 	userHomeDir, _ := os.UserHomeDir() | 	userHomeDir, _ := os.UserHomeDir() | ||||||
| 	dbFileName := "mac_vendors.sqlite3" | 	dbFileName := "mac_vendors.sqlite3" | ||||||
| 	dbFilePath := filepath.Join(userHomeDir, dbFileDir, dbFileName) | 	dbFilePath := filepath.Join(userHomeDir, dbFileDir, dbFileName) | ||||||
| 	service := service.NewSQLiteHelper(dbFilePath) | 	dbService := service.NewSQLiteHelper(dbFilePath) | ||||||
|  | 
 | ||||||
|  | 	// create update service | ||||||
|  | 	updateService := service.NewUpdateService("https://tools.taurusxin.com/macfastlookup/latest_version.txt") | ||||||
| 
 | 
 | ||||||
| 	// Create application with options | 	// Create application with options | ||||||
| 	err := wails.Run(&options.App{ | 	err := wails.Run(&options.App{ | ||||||
| @ -37,7 +40,8 @@ func main() { | |||||||
| 		OnStartup:        app.startup, | 		OnStartup:        app.startup, | ||||||
| 		Bind: []interface{}{ | 		Bind: []interface{}{ | ||||||
| 			app, | 			app, | ||||||
| 			service, | 			dbService, | ||||||
|  | 			updateService, | ||||||
| 		}, | 		}, | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -39,6 +39,17 @@ func (helper *SQLiteHelper) Close() { | |||||||
| 	helper.db.Close() | 	helper.db.Close() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (helper *SQLiteHelper) ReloadDatabase() bool { | ||||||
|  | 	helper.db.Close() | ||||||
|  | 	db, err := sql.Open("sqlite3", helper.connectionString) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Fatal(err) | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	helper.db = db | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (helper *SQLiteHelper) QueryMacAddressByPrefix(prefix string) (*MacAddress, error) { | func (helper *SQLiteHelper) QueryMacAddressByPrefix(prefix string) (*MacAddress, error) { | ||||||
| 	const tableName = "MacAddresses" | 	const tableName = "MacAddresses" | ||||||
| 	query := fmt.Sprintf("SELECT * FROM %s WHERE Prefix = ?", tableName) | 	query := fmt.Sprintf("SELECT * FROM %s WHERE Prefix = ?", tableName) | ||||||
|  | |||||||
							
								
								
									
										28
									
								
								service/update.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								service/update.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | package service | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"io" | ||||||
|  | 	"net/http" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type UpdateService struct { | ||||||
|  | 	Url string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewUpdateService(url string) *UpdateService { | ||||||
|  | 	return &UpdateService{Url: url} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (updater *UpdateService) GetLatestVersion() *string { | ||||||
|  | 	res, err := http.Get(updater.Url) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	defer res.Body.Close() | ||||||
|  | 	body, err := io.ReadAll(res.Body) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 	str := string(body) | ||||||
|  | 	return &str | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user