From 09e05337177a1936ec5338d58e6c0a705dbfc099 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Sat, 20 Jul 2024 18:19:11 -0500 Subject: [PATCH 1/2] feat(ui): frontend scaffolding --- .gitignore | 6 + Makefile | 8 + components.json | 17 + package-lock.json | 928 ++++++++++++++---- package.json | 10 +- resources/badge.png | Bin 0 -> 56400 bytes resources/components/ui/button.tsx | 47 + resources/input.css | 3 + resources/lib/utils.ts | 6 + resources/logo.png | Bin 0 -> 42516 bytes resources/main.ts | 14 + resources/scalar_api.css | 57 ++ resources/styles.css | 69 ++ src/pybama_org/__init__.py | 4 + src/pybama_org/components/__init__.py | 1 + .../components/frontend/__init__.py | 1 + .../components/frontend/controller.py | 31 + .../frontend/templates/base/base.html | 25 + .../components/frontend/templates/index.html | 9 + .../frontend/templates/partials/.gitkeep | 0 src/pybama_org/components/frontend/urls.py | 6 + src/pybama_org/components/system/__init__.py | 1 + src/pybama_org/components/system/urls.py | 1 + src/pybama_org/components/urls.py | 1 + src/pybama_org/config/core.py | 27 +- src/pybama_org/config/routers.py | 5 +- src/pybama_org/config/settings.py | 60 +- src/pybama_org/utils.py | 18 + tailwind.config.js | 98 +- vite.config.ts | 2 + 30 files changed, 1234 insertions(+), 221 deletions(-) create mode 100644 components.json create mode 100644 resources/badge.png create mode 100644 resources/components/ui/button.tsx create mode 100644 resources/input.css create mode 100644 resources/lib/utils.ts create mode 100644 resources/logo.png create mode 100644 resources/main.ts create mode 100644 resources/scalar_api.css create mode 100644 resources/styles.css create mode 100644 src/pybama_org/components/__init__.py create mode 100644 src/pybama_org/components/frontend/__init__.py create mode 100644 src/pybama_org/components/frontend/controller.py create mode 100644 src/pybama_org/components/frontend/templates/base/base.html create mode 100644 src/pybama_org/components/frontend/templates/index.html create mode 100644 src/pybama_org/components/frontend/templates/partials/.gitkeep create mode 100644 src/pybama_org/components/frontend/urls.py create mode 100644 src/pybama_org/components/system/__init__.py create mode 100644 src/pybama_org/components/system/urls.py create mode 100644 src/pybama_org/components/urls.py create mode 100644 src/pybama_org/utils.py diff --git a/.gitignore b/.gitignore index 6f6396c..e6cc693 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,9 @@ # project things .venv .ruff_cache + +# frontend things +src/pybama_org/components/frontend/public +src/pybama_org/components/frontend/hot +src/pybama_org/components/frontend/static +.vite diff --git a/Makefile b/Makefile index ebba0d4..f9825df 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,7 @@ install: @rye sync --force + @rye run app assets build + @rye run app assets install lint: @rye lint --fix @@ -13,3 +15,9 @@ fmt-check: test: @rye test + +run: + @rye run app run --debug + +docs-serve: + @echo "not implemented"\ diff --git a/components.json b/components.json new file mode 100644 index 0000000..4f9e098 --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "resources/styles.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} diff --git a/package-lock.json b/package-lock.json index f33a5cd..2f80636 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,17 @@ "packages": { "": { "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "@types/react-router": "^5.1.20", + "@vitejs/plugin-react": "^4.3.1", "alpinejs": "^3.13.7", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", "feather-icons": "^4.29.1", - "htmx": "^0.0.2" + "htmx": "^0.0.2", + "lucide-react": "^0.412.0", + "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { "@tailwindcss/aspect-ratio": "^0.4.2", @@ -29,7 +37,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -38,6 +45,360 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", + "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -45,7 +406,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -62,7 +422,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -79,7 +438,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -96,7 +454,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -113,7 +470,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -130,7 +486,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -147,7 +502,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -164,7 +518,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -181,7 +534,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -198,7 +550,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -215,7 +566,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -232,7 +582,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -249,7 +598,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -266,7 +614,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -283,7 +630,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -300,7 +646,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -317,7 +662,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -334,7 +678,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -351,7 +694,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -368,7 +710,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -385,7 +726,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -402,7 +742,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -419,7 +758,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -433,7 +771,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -451,7 +788,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -466,7 +802,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -476,7 +811,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -486,14 +820,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -504,7 +836,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -518,7 +849,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -528,7 +858,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -542,13 +871,45 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz", @@ -556,7 +917,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -570,7 +930,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -584,7 +943,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -598,7 +956,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -612,7 +969,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -626,7 +982,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -640,7 +995,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -654,7 +1008,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -668,7 +1021,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -682,7 +1034,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -696,7 +1047,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -710,7 +1060,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -724,7 +1073,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -738,7 +1086,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -752,7 +1099,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -766,7 +1112,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -806,11 +1151,51 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, "license": "MIT" }, "node_modules/@types/feather-icons": { @@ -820,16 +1205,67 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.14.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, "node_modules/@vue/reactivity": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", @@ -858,7 +1294,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -871,7 +1306,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -884,14 +1318,12 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -905,7 +1337,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, "node_modules/autoprefixer": { @@ -950,14 +1381,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -970,7 +1399,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -980,7 +1408,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -993,7 +1420,6 @@ "version": "4.23.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1026,7 +1452,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -1036,7 +1461,6 @@ "version": "1.0.30001642", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1053,11 +1477,51 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -1082,7 +1546,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -1091,17 +1554,46 @@ "node": ">= 6" } }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", "license": "MIT" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -1114,19 +1606,23 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, "node_modules/core-js": { "version": "3.37.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", @@ -1142,7 +1638,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -1168,7 +1663,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -1177,6 +1671,12 @@ "node": ">=4" } }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, "node_modules/culori": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", @@ -1207,46 +1707,57 @@ "url": "https://opencollective.com/daisyui" } }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.4.832", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz", "integrity": "sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA==", - "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -1285,17 +1796,24 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1312,7 +1830,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -1332,7 +1849,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -1352,7 +1868,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -1365,7 +1880,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -1396,7 +1910,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1411,17 +1924,24 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -1442,7 +1962,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -1451,11 +1970,28 @@ "node": ">=10.13.0" } }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -1477,7 +2013,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -1490,7 +2025,6 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -1506,7 +2040,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1516,7 +2049,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1526,7 +2058,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -1539,7 +2070,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -1549,14 +2079,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -1572,17 +2100,45 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1592,7 +2148,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/litestar-vite-plugin": { @@ -1636,18 +2191,38 @@ "dev": true, "license": "MIT" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, + "node_modules/lucide-react": { + "version": "0.412.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.412.0.tgz", + "integrity": "sha512-m7argY/PhSfjhwP2Dxey+VzFBvusfd8ULt+vWWFnzQhURLOtNyD1qWmMVdtJ4Nn+d+DTcoOiILrjThSjY9kaow==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -1657,7 +2232,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -1671,7 +2245,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -1687,17 +2260,21 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0", @@ -1709,7 +2286,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -1728,14 +2304,12 @@ "version": "2.0.17", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1755,7 +2329,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1765,7 +2338,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -1775,14 +2347,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1792,14 +2362,12 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -1816,14 +2384,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -1836,7 +2402,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1846,7 +2411,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -1856,7 +2420,6 @@ "version": "8.4.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1885,7 +2448,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", @@ -1903,7 +2465,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -1923,7 +2484,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1959,7 +2519,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -1972,7 +2531,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1998,7 +2556,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2026,7 +2583,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, "license": "MIT" }, "node_modules/prettier": { @@ -2049,7 +2605,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -2066,11 +2621,32 @@ ], "license": "MIT" }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "license": "MIT", "dependencies": { "pify": "^2.3.0" @@ -2080,7 +2656,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -2093,7 +2668,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -2111,7 +2685,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -2122,7 +2695,6 @@ "version": "4.19.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.0.tgz", "integrity": "sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.5" @@ -2158,7 +2730,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -2178,11 +2749,19 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -2195,7 +2774,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2205,7 +2783,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -2218,7 +2795,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2228,7 +2804,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2247,7 +2822,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -2262,7 +2836,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2272,14 +2845,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2292,7 +2863,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -2309,7 +2879,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2322,7 +2891,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2332,7 +2900,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", @@ -2351,11 +2918,22 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2364,11 +2942,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwind-merge": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.4.0.tgz", + "integrity": "sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "3.4.6", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.6.tgz", "integrity": "sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==", - "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -2402,11 +2989,19 @@ "node": ">=14.0.0" } }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, "node_modules/tailwindcss/node_modules/postcss-selector-parser": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2420,7 +3015,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0" @@ -2430,7 +3024,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -2439,11 +3032,19 @@ "node": ">=0.8" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -2456,7 +3057,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, "license": "Apache-2.0" }, "node_modules/typescript": { @@ -2477,14 +3077,13 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2515,14 +3114,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/vite": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz", "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -2589,7 +3186,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -2605,7 +3201,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2624,7 +3219,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -2642,7 +3236,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2652,7 +3245,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2668,14 +3260,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -2690,7 +3280,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2699,11 +3288,16 @@ "node": ">=8" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, "node_modules/yaml": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/package.json b/package.json index ceff40d..d8947ba 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,17 @@ "build": "vite build" }, "dependencies": { + "@radix-ui/react-slot": "^1.1.0", + "@types/react-router": "^5.1.20", + "@vitejs/plugin-react": "^4.3.1", "alpinejs": "^3.13.7", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", "feather-icons": "^4.29.1", - "htmx": "^0.0.2" + "htmx": "^0.0.2", + "lucide-react": "^0.412.0", + "tailwind-merge": "^2.4.0", + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { "@tailwindcss/aspect-ratio": "^0.4.2", diff --git a/resources/badge.png b/resources/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..408d63acd69d8c187a4ccb01b57fed113b823b2e GIT binary patch literal 56400 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, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return + }, +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/resources/input.css b/resources/input.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/resources/input.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/lib/utils.ts b/resources/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/resources/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/resources/logo.png b/resources/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..721759d61826eb0cccdc7ece2c44f26ee8780354 GIT binary patch literal 42516 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 Template: + """A place to call home.""" + return Template(template_name="index.html") diff --git a/src/pybama_org/components/frontend/templates/base/base.html b/src/pybama_org/components/frontend/templates/base/base.html new file mode 100644 index 0000000..bf18595 --- /dev/null +++ b/src/pybama_org/components/frontend/templates/base/base.html @@ -0,0 +1,25 @@ + + + + + + + + + PyBama | {% block title %}{% endblock %} + {% block extrahead %}{% endblock %} {% block extrastyle %}{% endblock %} + + + +
+
+
{% block content %}{% endblock content %}
+
+
+ {{ vite_hmr() }} {{ vite('resources/main.ts') }} {{ vite('resources/listeners.js') }} + + + + diff --git a/src/pybama_org/components/frontend/templates/index.html b/src/pybama_org/components/frontend/templates/index.html new file mode 100644 index 0000000..7cd3200 --- /dev/null +++ b/src/pybama_org/components/frontend/templates/index.html @@ -0,0 +1,9 @@ + +{% extends 'base/base.html' %} +{% set active_page = 'index' %} +{% block extrastyle %}{% endblock extrastyle %} + + +{% block title %}Home{% endblock %} +{% block content %}{% endblock content %} +{% block extrajs %}{% endblock extrajs %} diff --git a/src/pybama_org/components/frontend/templates/partials/.gitkeep b/src/pybama_org/components/frontend/templates/partials/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/pybama_org/components/frontend/urls.py b/src/pybama_org/components/frontend/urls.py new file mode 100644 index 0000000..c378aeb --- /dev/null +++ b/src/pybama_org/components/frontend/urls.py @@ -0,0 +1,6 @@ +"""Frontend/Web URLs.""" + +from typing import Final + +INDEX: Final[str] = "/" +"""Index page.""" diff --git a/src/pybama_org/components/system/__init__.py b/src/pybama_org/components/system/__init__.py new file mode 100644 index 0000000..aa3c384 --- /dev/null +++ b/src/pybama_org/components/system/__init__.py @@ -0,0 +1 @@ +"""Core system components for the app.""" diff --git a/src/pybama_org/components/system/urls.py b/src/pybama_org/components/system/urls.py new file mode 100644 index 0000000..ea69f83 --- /dev/null +++ b/src/pybama_org/components/system/urls.py @@ -0,0 +1 @@ +"""System urls.""" diff --git a/src/pybama_org/components/urls.py b/src/pybama_org/components/urls.py new file mode 100644 index 0000000..d7f5543 --- /dev/null +++ b/src/pybama_org/components/urls.py @@ -0,0 +1 @@ +"""Base URLs.""" diff --git a/src/pybama_org/config/core.py b/src/pybama_org/config/core.py index 7710516..7ae37ad 100644 --- a/src/pybama_org/config/core.py +++ b/src/pybama_org/config/core.py @@ -9,13 +9,15 @@ from litestar.logging.config import LoggingConfig, StructLoggingConfig from litestar.middleware.logging import LoggingMiddlewareConfig from litestar.openapi.config import OpenAPIConfig -from litestar.openapi.plugins import ScalarRenderPlugin +from litestar.openapi.plugins import ScalarRenderPlugin, SwaggerRenderPlugin +from litestar.openapi.spec import Contact from litestar.plugins.structlog import StructlogConfig, StructlogPlugin +from litestar.template.config import TemplateConfig from litestar_granian import GranianPlugin from litestar_vite import ViteConfig, VitePlugin -from pybama_org.__metadata__ import __version__ from pybama_org.config.settings import get_settings +from pybama_org.utils import set_base_path settings = get_settings() @@ -27,6 +29,12 @@ cookie_name=settings.app.CSRF_COOKIE_NAME, ) cors_config = CORSConfig(allow_origins=cast("list[str]", settings.app.ALLOWED_CORS_ORIGINS)) +template = TemplateConfig( + directory=settings.vite.TEMPLATE_DIR, + engine=settings.vite.TEMPLATE_ENGINE, + engine_callback=set_base_path, +) +"""Template config. See :class:`TemplateSettings <.settings.TemplateSettings>` for configuration.""" vite_config = ViteConfig( bundle_dir=settings.vite.BUNDLE_DIR, resource_dir=settings.vite.RESOURCE_DIR, @@ -63,11 +71,18 @@ ), ) openapi_config = OpenAPIConfig( - title=settings.app.NAME, - version=__version__, - path="/api", + title=settings.openapi.TITLE or settings.app.NAME, + version=settings.openapi.VERSION, + contact=Contact(name=settings.openapi.CONTACT_NAME, email=settings.openapi.CONTACT_EMAIL), use_handler_docstrings=True, - render_plugins=[ScalarRenderPlugin()], + path=settings.openapi.PATH, + servers=settings.openapi.SERVERS, # type: ignore[arg-type] + external_docs=settings.openapi.EXTERNAL_DOCS, # type: ignore[arg-type] + create_examples=True, + render_plugins=[ + ScalarRenderPlugin(version="1.20.7", path="/scalar", css_url="/static/scalar_api.css"), + SwaggerRenderPlugin(), + ], ) # --- Plugin instances diff --git a/src/pybama_org/config/routers.py b/src/pybama_org/config/routers.py index cc5c5c6..2ddba16 100644 --- a/src/pybama_org/config/routers.py +++ b/src/pybama_org/config/routers.py @@ -4,8 +4,9 @@ from typing import TYPE_CHECKING +from pybama_org.components.frontend.controller import FrontendController + if TYPE_CHECKING: from litestar.types import ControllerRouterHandler - -route_handlers: list[ControllerRouterHandler] = [] +route_handlers: list[ControllerRouterHandler] = [FrontendController] diff --git a/src/pybama_org/config/settings.py b/src/pybama_org/config/settings.py index 2e8f353..4890bc1 100644 --- a/src/pybama_org/config/settings.py +++ b/src/pybama_org/config/settings.py @@ -11,8 +11,11 @@ from typing import TYPE_CHECKING, Final from advanced_alchemy.utils.text import slugify +from litestar.contrib.jinja import JinjaTemplateEngine from litestar.utils.module_loader import module_to_os_path +from pybama_org.__metadata__ import __project__, __version__ + if TYPE_CHECKING: from litestar.data_extractors import RequestExtractorField, ResponseExtractorField @@ -57,12 +60,14 @@ class ViteSettings: default_factory=lambda: os.getenv("VITE_ENABLE_REACT_HELPERS", "True") in TRUE_VALUES, ) """Enable React support in HMR.""" - BUNDLE_DIR: Path = field(default_factory=lambda: Path(f"{BASE_DIR}/domain/web/public")) + BUNDLE_DIR: Path = field(default_factory=lambda: Path(f"{BASE_DIR}/components/frontend/public")) """Bundle directory""" RESOURCE_DIR: Path = field(default_factory=lambda: Path("resources")) """Resource directory""" - TEMPLATE_DIR: Path = field(default_factory=lambda: Path(f"{BASE_DIR}/domain/web/templates")) + TEMPLATE_DIR: Path = field(default_factory=lambda: Path(f"{BASE_DIR}/components/frontend/templates")) """Template directory.""" + TEMPLATE_ENGINE: type[JinjaTemplateEngine] = JinjaTemplateEngine + """Template engine to use. (``Jinja2``, ``Mako``, or ``MiniJinja``)""" ASSET_URL: str = field(default_factory=lambda: os.getenv("ASSET_URL", "/static/")) """Base URL for assets""" @@ -197,6 +202,56 @@ def __post_init__(self) -> None: self.ALLOWED_CORS_ORIGINS = [host.strip() for host in self.ALLOWED_CORS_ORIGINS.split(",")] +@dataclass +class OpenAPISettings: + """OpenAPI configuration.""" + + TITLE: str = "API for the PyBama web service" + """OpenAPI Title""" + VERSION: str = __version__ + """OpenAPI Version""" + PATH: str = "/api" + """OpenAPI Path""" + CONTACT_NAME: str = "Jacob Coffee" + """OpenAPI Contact Name""" + CONTACT_EMAIL: str = "hello@pybama.org" + """OpenAPI Contact Email""" + DESCRIPTION: str | None = f"""This API provides a list of stores and their associated information based on the + OpenAPI 3.1 specification. You can find out more about this project in the + [docs]({os.getenv("APP_URL", "http://0.0.0.0/") + "docs"}). + This project is maintained by the [PyBama organization](https://github.com/PyBama).""" + SERVERS: list[dict[str, str]] = field(default_factory=list) + """Servers to use for the OpenAPI documentation.""" + EXTERNAL_DOCS: dict[str, str] | None = field( + default_factory=lambda: { + "description": f"{__project__} Docs", + "url": os.getenv("APP_URL", "http://0.0.0.0/") + "/docs", + } + ) + + def __post_init__(self) -> None: + """This is called after the dataclass is initialized. + + Check if the ``SERVERS`` is a :class:`str` or a :class:`list`. + """ + self.assemble_openapi_servers() + + def assemble_openapi_servers(self) -> None: + """Assemble OpenAPI servers based on environment.""" + environment = os.getenv("APP_ENVIRONMENT") or "dev" + port = os.getenv("APP_PORT") or "8000" + + if environment == "prod": + self.SERVERS = [ + { + "url": os.getenv("APP_URL", "https://www.pybama.org/api"), + "description": "Production Server", + }, + ] + elif environment == "dev": + self.SERVERS = [{"url": f"http://0.0.0.0:{port}/", "description": "Development Server"}] + + @dataclass class Settings: """Class to hold all settings.""" @@ -205,6 +260,7 @@ class Settings: vite: ViteSettings = field(default_factory=ViteSettings) server: ServerSettings = field(default_factory=ServerSettings) log: LogSettings = field(default_factory=LogSettings) + openapi: OpenAPISettings = field(default_factory=OpenAPISettings) @classmethod def from_env(cls, dotenv_filename: str = ".env") -> Settings: diff --git a/src/pybama_org/utils.py b/src/pybama_org/utils.py new file mode 100644 index 0000000..635bf6a --- /dev/null +++ b/src/pybama_org/utils.py @@ -0,0 +1,18 @@ +"""Global utilities and helpers to be used throughout the app.""" + +from __future__ import annotations + +from typing import Any + +from dotenv import load_dotenv +from jinja2 import Environment + +__all__ = ("set_base_path",) + +load_dotenv() + + +def set_base_path(engine_instance: Any) -> None: + """Set the base path for the template engine.""" + if hasattr(engine_instance, "engine") and isinstance(engine_instance.engine, Environment): + engine_instance.engine.globals["BASE_PATH"] = "/" diff --git a/tailwind.config.js b/tailwind.config.js index dde3808..d790af4 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,14 +1,8 @@ /** @type {import('tailwindcss').Config} */ -const defaultTheme = require("tailwindcss/defaultTheme") - module.exports = { - darkMode: "class", - content: [ - "{resources,templates}/**/*.{js,cjs,mjs,jsx,ts,tsx,vue,j2,html,htm,jinja,jinja2}", - "src/pybama_org/frontend/templates/**/*.{js,jsx,ts,cjs,mjs,tsx,vue,j2,html,htm,jinja,jinja2}", - ], - safelist: ["alert", "alert-success", "alert-error", "alert-warning", "alert-info"], - plugins: [require("@tailwindcss/typography"), require("@tailwindcss/aspect-ratio"), require("daisyui")], + darkMode: ["class"], + content: ["./pages/**/*.{ts,tsx}", "./components/**/*.{ts,tsx}", "./app/**/*.{ts,tsx}", "./src/**/*.{ts,tsx}"], + prefix: "", theme: { container: { center: true, @@ -19,42 +13,60 @@ module.exports = { }, extend: { colors: { - "python-primary": "#4584b6", - "python-accent": "#ffde57", - "python-secondary": "#646464", + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, }, - }, - }, - daisyui: { - darkTheme: "dark", - base: true, - styled: true, - utils: true, - themes: [ - { - light: { - primary: "#4584b6", - secondary: "#646464", - accent: "#70b2e7", - neutral: "#e5e7eb", - "base-100": "#f3f4f6", - info: "#7dd3fc", - success: "#86efac", - warning: "#fcd34d", - error: "#f87171", - }, - dark: { - primary: "#4584b6", - secondary: "#ebebe9", - accent: "#70b2e7", - neutral: "#202020", - "base-100": "#121212", - info: "#7dd3fc", - success: "#86efac", - warning: "#fcd34d", - error: "#f87171", + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, - ], + }, }, + plugins: [require("tailwindcss-animate")], } diff --git a/vite.config.ts b/vite.config.ts index f364167..4f5f016 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,6 @@ import { defineConfig } from "vite" import path from "path" +import react from "@vitejs/plugin-react" import litestar from "litestar-vite-plugin" const ASSET_URL = process.env.ASSET_URL || "/static/" @@ -18,6 +19,7 @@ export default defineConfig({ }, }, plugins: [ + react(), litestar({ input: ["resources/styles.css", "resources/main.ts"], assetUrl: `${ASSET_URL}`, From 3832f14d0ebf791b390bc14fc34cc2720efc207c Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Sat, 20 Jul 2024 18:20:00 -0500 Subject: [PATCH 2/2] chore: update ignores --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e6cc693..e586ce3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ src/pybama_org/components/frontend/public src/pybama_org/components/frontend/hot src/pybama_org/components/frontend/static .vite +public/