From 83eb34244be18b4e68f758820827acb6b5b95a64 Mon Sep 17 00:00:00 2001 From: Jane Al-Shihabi Date: Mon, 10 Mar 2025 21:52:01 -0400 Subject: [PATCH 1/2] set up chakra ui for frontend --- frontend/next.config.mjs | 3 + frontend/package-lock.json | 1377 ++++++++++++++++++- frontend/src/components/ui/avatar.tsx | 34 + frontend/src/components/ui/checkbox.tsx | 25 + frontend/src/components/ui/close-button.tsx | 17 + frontend/src/components/ui/color-mode.tsx | 107 ++ frontend/src/components/ui/dialog.tsx | 62 + frontend/src/components/ui/drawer.tsx | 52 + frontend/src/components/ui/field.tsx | 33 + frontend/src/components/ui/input-group.tsx | 53 + frontend/src/components/ui/popover.tsx | 59 + frontend/src/components/ui/provider.tsx | 15 + frontend/src/components/ui/radio.tsx | 24 + frontend/src/components/ui/slider.tsx | 82 ++ frontend/src/components/ui/tooltip.tsx | 46 + frontend/src/pages/_app.tsx | 13 +- frontend/tsconfig.json | 1 + 17 files changed, 1979 insertions(+), 24 deletions(-) create mode 100644 frontend/src/components/ui/avatar.tsx create mode 100644 frontend/src/components/ui/checkbox.tsx create mode 100644 frontend/src/components/ui/close-button.tsx create mode 100644 frontend/src/components/ui/color-mode.tsx create mode 100644 frontend/src/components/ui/dialog.tsx create mode 100644 frontend/src/components/ui/drawer.tsx create mode 100644 frontend/src/components/ui/field.tsx create mode 100644 frontend/src/components/ui/input-group.tsx create mode 100644 frontend/src/components/ui/popover.tsx create mode 100644 frontend/src/components/ui/provider.tsx create mode 100644 frontend/src/components/ui/radio.tsx create mode 100644 frontend/src/components/ui/slider.tsx create mode 100644 frontend/src/components/ui/tooltip.tsx diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index d5456a15..b3e664fd 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -1,6 +1,9 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, + experimental: { + optimizePackageImports: ["@chakra-ui/react"], + }, }; export default nextConfig; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d1967c61..f967691d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,6 +9,8 @@ "version": "0.1.0", "dependencies": { "next": "^14.2.24", + "@chakra-ui/react": "^3.8.2", + "@emotion/react": "^11.14.0", "react": "^18", "react-dom": "^18" }, @@ -36,6 +38,356 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ark-ui/react": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-4.9.2.tgz", + "integrity": "sha512-LJnz8nwXgGRszlkU2AiH3yLsAeXiXeQl4JBjMA7d8klZJBiBUp7URwLhBSWmoAIWRH7bW6fSPjhRAEkJLmD8gA==", + "license": "MIT", + "dependencies": { + "@internationalized/date": "3.7.0", + "@zag-js/accordion": "0.82.2", + "@zag-js/anatomy": "0.82.2", + "@zag-js/auto-resize": "0.82.2", + "@zag-js/avatar": "0.82.2", + "@zag-js/carousel": "0.82.2", + "@zag-js/checkbox": "0.82.2", + "@zag-js/clipboard": "0.82.2", + "@zag-js/collapsible": "0.82.2", + "@zag-js/collection": "0.82.2", + "@zag-js/color-picker": "0.82.2", + "@zag-js/color-utils": "0.82.2", + "@zag-js/combobox": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/date-picker": "0.82.2", + "@zag-js/date-utils": "0.82.2", + "@zag-js/dialog": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/editable": "0.82.2", + "@zag-js/file-upload": "0.82.2", + "@zag-js/file-utils": "0.82.2", + "@zag-js/focus-trap": "0.82.2", + "@zag-js/highlight-word": "0.82.2", + "@zag-js/hover-card": "0.82.2", + "@zag-js/i18n-utils": "0.82.2", + "@zag-js/menu": "0.82.2", + "@zag-js/number-input": "0.82.2", + "@zag-js/pagination": "0.82.2", + "@zag-js/pin-input": "0.82.2", + "@zag-js/popover": "0.82.2", + "@zag-js/presence": "0.82.2", + "@zag-js/progress": "0.82.2", + "@zag-js/qr-code": "0.82.2", + "@zag-js/radio-group": "0.82.2", + "@zag-js/rating-group": "0.82.2", + "@zag-js/react": "0.82.2", + "@zag-js/select": "0.82.2", + "@zag-js/signature-pad": "0.82.2", + "@zag-js/slider": "0.82.2", + "@zag-js/splitter": "0.82.2", + "@zag-js/steps": "0.82.2", + "@zag-js/switch": "0.82.2", + "@zag-js/tabs": "0.82.2", + "@zag-js/tags-input": "0.82.2", + "@zag-js/time-picker": "0.82.2", + "@zag-js/timer": "0.82.2", + "@zag-js/toast": "0.82.2", + "@zag-js/toggle-group": "0.82.2", + "@zag-js/tooltip": "0.82.2", + "@zag-js/tour": "0.82.2", + "@zag-js/tree-view": "0.82.2", + "@zag-js/types": "0.82.2" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", + "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", + "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chakra-ui/react": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.8.2.tgz", + "integrity": "sha512-aAzmlxxH3voOmkf99OUUjtkijlwOlOUJ1P9tw+lND9miD9yYZ4E8vglilrBfyxmBTyHDRqZD6FRSCYXn7F1APQ==", + "license": "MIT", + "dependencies": { + "@ark-ui/react": "4.9.2", + "@emotion/is-prop-valid": "1.3.1", + "@emotion/serialize": "1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "1.2.0", + "@emotion/utils": "1.4.2", + "@pandacss/is-valid-prop": "0.41.0", + "csstype": "3.1.3", + "fast-safe-stringify": "2.1.1" + }, + "peerDependencies": { + "@emotion/react": ">=11", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -96,6 +448,31 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -134,6 +511,24 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@internationalized/date": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.7.0.tgz", + "integrity": "sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz", + "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -185,7 +580,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", @@ -200,7 +594,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" @@ -210,7 +603,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" @@ -220,14 +612,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", @@ -432,6 +822,11 @@ "node": ">=12.4.0" } }, + "node_modules/@pandacss/is-valid-prop": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-0.41.0.tgz", + "integrity": "sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -490,6 +885,12 @@ "undici-types": "~6.19.2" } }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", @@ -741,6 +1142,781 @@ "dev": true, "license": "ISC" }, + "node_modules/@zag-js/accordion": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-0.82.2.tgz", + "integrity": "sha512-w8+oFbSEbW0otT6LG1boO5Iy9UP5K+NalLhoD5XxP/FHS6Rp4R4zk3iolOxxtOh6JXHnghXzG7VZbDQN9R8OWw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/anatomy": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-0.82.2.tgz", + "integrity": "sha512-WHGKs5O443T2RSQQvUzYhEV5SNJxO5ysAnHxHdFLWBrMdLjLwLDnvyY7w30kzxeXR9/Z+2yxkgDipxRsC+qC8w==", + "license": "MIT" + }, + "node_modules/@zag-js/aria-hidden": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-0.82.2.tgz", + "integrity": "sha512-V+PjbCABKM4yxFnq9M/t3W1hvwLMVe/0Sj9VyOiAAJDICfSDudGzO+5EfJBTJt59z2Gr4r55X+wtH1uBOtTF7w==", + "license": "MIT" + }, + "node_modules/@zag-js/auto-resize": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-0.82.2.tgz", + "integrity": "sha512-93HhdycOkQMzn4g5MRWRgb5QKk03KwIiTkaU1jhx5eAatT/yYFDvrzNbAXQvr0WePcDNPnPrFS5lAY/85p0eew==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/avatar": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-0.82.2.tgz", + "integrity": "sha512-rGlZno6S9lm/wWLC12sLj7nyFjUXZ/76hOvpcg5d+e2bmysu+chKz1Z08ecLBVVLWkk4JRq9M3v9Jgji0EgaDQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/carousel": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-0.82.2.tgz", + "integrity": "sha512-GMbGnoDFwWS8hDUk2unlg3Selmo6JvnTaI5DKEVmwIgp0MGT8zqUk4eAClsLNiS/JunEeK6tyER7K3b4dhYz8Q==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/scroll-snap": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/checkbox": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-0.82.2.tgz", + "integrity": "sha512-9gE4P21YsrY+sFJaJOGG84jW64aAxl7M9S+wsmRruKmzNAwri30bOviMV11qZH2isJ44HxPuJ3iezXsLMN+Thg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-visible": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/clipboard": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-0.82.2.tgz", + "integrity": "sha512-FU2SEHP0KthhtYJNtKU98Aw21ugHyX3CT3a75C9wJKGp5gSUDQ6FMIUT3K7GSFR8JGBQ7f/VI8AgE9gNiRpmdg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/collapsible": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-0.82.2.tgz", + "integrity": "sha512-SWOy9ANjO8vbkYwX8AvEOntkPOAXiT9b4Cg3YT5QALPEB2UMUk0CzxJXw+ilbDoRMWWus2nqgx2g6D+IAabjLQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/collection": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-0.82.2.tgz", + "integrity": "sha512-moWCnb2F8nfnzYpyLPnCNd10pFSIqrBJrnB4ME0C3QydYIxxwmZsnVLPzTPtnDKGT3uVfL4QX2+nsBoeu1LXrw==", + "license": "MIT", + "dependencies": { + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/color-picker": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-0.82.2.tgz", + "integrity": "sha512-BRxnToGNyg1HzkWfQquQM8/xg7Jd8HpJeXWQMT9hIh/XqLiz9HRsGN90I6Avv9vYXYJChw1VdSExdfR2HjlqlA==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/color-utils": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/color-utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-0.82.2.tgz", + "integrity": "sha512-tBVocNpmWWBPOla0NPj5yMKefg36X176BsvhItlls3/4TB4We8Cad5Wi9G4SGm0ClYaUGPtQUK/E7UEUhfUjxA==", + "license": "MIT", + "dependencies": { + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/combobox": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-0.82.2.tgz", + "integrity": "sha512-SVLcfJNqY17MqDL4i3QbxyjEDD/t0xUB37QjgsrKzvnq6IviM6FDh6UfsTX6/NHqy28HL0Aty6NIn2NNM7WyjQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/aria-hidden": "0.82.2", + "@zag-js/collection": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/core": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-0.82.2.tgz", + "integrity": "sha512-yj4trnU4RzO4duiZJ7uvxECg+6MPVkEbTvTwf2TynotXBYX65LGMTqvMzZP062wvdu0jvTgZ/IbCpN1gc3hmsQ==", + "license": "MIT", + "dependencies": { + "@zag-js/store": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/date-picker": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-0.82.2.tgz", + "integrity": "sha512-6thJ3ou3u49k4mnnYMecbw0JHvHiaF2nPyToaq/Hsf5grqSijgyZtfkHoDSNFiNN4DKcv1GXErM0N0MiY0dc4A==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/date-utils": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/live-region": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + }, + "peerDependencies": { + "@internationalized/date": ">=3.0.0" + } + }, + "node_modules/@zag-js/date-utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-0.82.2.tgz", + "integrity": "sha512-e2jZ6AFMzwJBNgoOdmATKRH5/Mgr6EqlZmmhI061JzB3uteVOv4x2k5je+g8kWS1IADC5D2OMFQHI/bXSJ5ZFQ==", + "license": "MIT", + "peerDependencies": { + "@internationalized/date": ">=3.0.0" + } + }, + "node_modules/@zag-js/dialog": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-0.82.2.tgz", + "integrity": "sha512-p0E6m28HXQMFj+l0MHJcoh326+p/iMocDFOSL1JT3h/U7JLDeW3kNJvpVGK+6vCLngJ/jnAszgQQYhlaz5smJg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/aria-hidden": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-trap": "0.82.2", + "@zag-js/remove-scroll": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/dismissable": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-0.82.2.tgz", + "integrity": "sha512-oi2wLiWEll9vhgFgE4FIH9aWPwId8QExO6kcnfeZPSkytnTRetKlyhj5xsOCygElZK994JRkFP3lpGrGCET+kg==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2", + "@zag-js/interact-outside": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/dom-query": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.82.2.tgz", + "integrity": "sha512-4gI1A7Rh9/vZhOuuWzUldP3+2PIiOyR91TBDA0an1VICzHRKBelntlkBR6cZMtjH9gGxhSVxeKN2b060kJ8VQw==", + "license": "MIT", + "dependencies": { + "@zag-js/types": "0.82.2" + } + }, + "node_modules/@zag-js/editable": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-0.82.2.tgz", + "integrity": "sha512-BHheMo+gRo72GCqc8rowtg8yGg7fg39AdiwIrXUQ4PU2oI+jKkxAKamLXFgu19Ne+1keLcGjNAtVWRZkqszjzw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/interact-outside": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/element-rect": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/element-rect/-/element-rect-0.82.2.tgz", + "integrity": "sha512-VdHlu9fLWhKxHFL5vCQXgzqEmxhSBgzTOU0SidR3hsGLcO6dgioz86bJ7i8uPFU+uZDHhyv9Q7lBQQoO76Cr7g==", + "license": "MIT" + }, + "node_modules/@zag-js/element-size": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.82.2.tgz", + "integrity": "sha512-33sCUNJITNAqlNOP+KdMRh8R10s8MPwH+XrxucUBi2R55vWRVs9G3gcA/2uSf1mo/2us74Z4U+/KLnI5FkZycg==", + "license": "MIT" + }, + "node_modules/@zag-js/file-upload": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-0.82.2.tgz", + "integrity": "sha512-r1618x7BkYLh3qaKQOabD838lwM1ARP4aVbzBb5om1cNUjWgy9wCBU1PCNjsqyFzm/bTmHTXgiWdTz06NFpbTg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/file-utils": "0.82.2", + "@zag-js/i18n-utils": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/file-utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-0.82.2.tgz", + "integrity": "sha512-cjmG+HUBXS+hYsgOfdpNOe/xIYPAQ6CyFDGvuqr4wBnhOd9YyCtn7/M+O4VfodVA9rnVQ67RQsbI/eBBZTQ+/A==", + "license": "MIT", + "dependencies": { + "@zag-js/i18n-utils": "0.82.2" + } + }, + "node_modules/@zag-js/focus-trap": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-0.82.2.tgz", + "integrity": "sha512-TZNSAqqoml6avv6puO8afMJ0ttfYQC4BvIuA/Z8yjMVPvXHcUUeVyP5mgwp2tadMWY2TJ4Bv0/xxJJvvbwNNXQ==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.82.2.tgz", + "integrity": "sha512-fwmNDVHulJ+L6sOFavDhAMYOIZYwo/ivhkPkko2pah6pYYQDwyp4bjsmpofW/VkCgdXgClpcElCC8aoQ83A6Jg==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/highlight-word": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-0.82.2.tgz", + "integrity": "sha512-9sN//8j+TZFTrYIhuSSIJ0rMREVAV8xkJ8250zH///cYfVDuFLCbJp69E613ZfevipemlTQJWP1vTJ1HZGZ5vg==", + "license": "MIT" + }, + "node_modules/@zag-js/hover-card": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-0.82.2.tgz", + "integrity": "sha512-11xb3BzVxMvhSGEx9k/umq4/gt7wbjKB/TVEn2dYTdZ2NTyAa+PLXkZ60VBPnprEZ3Or3AzuWJw68uaSdqxh0A==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/i18n-utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-0.82.2.tgz", + "integrity": "sha512-ANmNMA7f5Hrhd0ZXVASTV62HRIJut/ioQ6lm/L6PL1+QW+o60j5wJv4HSslQuWWsdyzEpq05u2Sy9ndbcSQ5RA==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/interact-outside": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-0.82.2.tgz", + "integrity": "sha512-9AB7S6NpOr49oSh+nIl+X8wEiKj2YfXtW2Qk/GOTQ0eP9boXK45Y1pqjWvBpDF0rQYofnWPgoldw9B+rZa+lZQ==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/live-region": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-0.82.2.tgz", + "integrity": "sha512-q6j4qggfyUFgpAWBe48cRiaByrJVrOf3x6gHWhK7EsLu45D/0HPkvZjmDgwoRoIISoJVLeT9YquaNsh7rFKFrQ==", + "license": "MIT" + }, + "node_modules/@zag-js/menu": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-0.82.2.tgz", + "integrity": "sha512-vPRLdv9ZcQYgzgtZimXY0LKj7Rs+3EPowc2GEWcMe5ergzhKRlmG/2eRn/mSgESnLmMNx6CaYAYQdNcndd+ksA==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/rect-utils": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/number-input": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-0.82.2.tgz", + "integrity": "sha512-gVJZny2MS3ptOpP5W+DGnY7igOCyO9I+Z+dDWlKiLNvHM8v6GlMtxtiPuV8kL1u7TqL8HEGQENA1NZYSr+rcKQ==", + "license": "MIT", + "dependencies": { + "@internationalized/number": "3.6.0", + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/pagination": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-0.82.2.tgz", + "integrity": "sha512-xPMhYQOb/QoVwQm8TTchameMsrKR6VhZmcCMzjR0KlBIf7WG4Z5H3Rfzw3HXoQaNTipY2k56YH5p4PEirGYvzA==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/pin-input": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-0.82.2.tgz", + "integrity": "sha512-8omi7JeA2UXMOeuMdcE2qNk86AfnA19CpY7pQ0GVKuqsxF4zSniC+4SC7uAOUymNtkdv6xVheJF696bRIoChRw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/popover": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-0.82.2.tgz", + "integrity": "sha512-OD0hBCasb8gJU97uWE3m8bAL8XqPrIDkQF4mJ0clAC9puusDdKgRS9W5kCQzgzei3JYdZbK81Bnx5X0gOGWKwQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/aria-hidden": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-trap": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/remove-scroll": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/popper": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-0.82.2.tgz", + "integrity": "sha512-hrc9WtFge+m8zVgrxFxOPpBRvqf4YhWoJSnhPfjruBSJDrvrgBkozjCsazM3618b7bB+jpw4Pzj0H+lSsv4Ygw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "1.6.13", + "@zag-js/dom-query": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/presence": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-0.82.2.tgz", + "integrity": "sha512-N818BC/PBkdh/yQBECrBONoN9DcYT/PNIblgHic3mG8IIfI49jnAC103gDFbROVJoI/38bk4gwMMOWesZtX/IA==", + "license": "MIT", + "dependencies": { + "@zag-js/core": "0.82.2", + "@zag-js/types": "0.82.2" + } + }, + "node_modules/@zag-js/progress": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-0.82.2.tgz", + "integrity": "sha512-YxQXBHLUXF8BOG68sZCXkthKrZPebt02cSinafpjYXIOwauSBeMdmd8rAjsrAIFWhonaXcqxCs+jqlZRn18tEA==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/qr-code": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-0.82.2.tgz", + "integrity": "sha512-dotI3wXTGArwxKnqaLWrgNfXZGq2oe0Ur3KT8JPxHy9Kv6JWYGkge5AmtiGkwXFQR/ZxnRYE1vF1RNjFG50OKQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2", + "proxy-memoize": "3.0.1", + "uqr": "0.1.2" + } + }, + "node_modules/@zag-js/radio-group": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-0.82.2.tgz", + "integrity": "sha512-Peh3zLq8BEmoC9zHrd1n08gLlrlb5VXUpofOdEj9GqtEphLNCf/S3O5jeM6MlYZ9gHe+CkXIpXH16GDBoZVWjw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/element-rect": "0.82.2", + "@zag-js/focus-visible": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/rating-group": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-0.82.2.tgz", + "integrity": "sha512-J2JX9leShV3HbiFqPoKCITaSshpjjt2U9mNakGU09YUlYEtjKwlNPFpYLSkKw2ItA/T9QbYJC58kbF+bAnTL5w==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/react": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-0.82.2.tgz", + "integrity": "sha512-lDul3lRZae2ptkOQSfobl5ZQfX6rhcoN5ILLVbGzBJ9hRtNfMTVfKKxXdF2/pg53sMgggK4hZNR3W2P21uC+Wg==", + "license": "MIT", + "dependencies": { + "@zag-js/core": "0.82.2", + "@zag-js/store": "0.82.2", + "@zag-js/types": "0.82.2", + "proxy-compare": "3.0.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@zag-js/rect-utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-0.82.2.tgz", + "integrity": "sha512-cmjxI+90La4Kz4CeGAN7EJ6wFbPEjZArnvU7TeUA+FrgRQvotjFrzI4zZ20BTgnlgMH7ahVNFO2qsVp+kcc2LQ==", + "license": "MIT" + }, + "node_modules/@zag-js/remove-scroll": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-0.82.2.tgz", + "integrity": "sha512-v6ELaC9+sC+YoAkFjOBabjsXAoQgQA5secFDWWjzSVROWynH1mKNbBxakGCqEKtF67ZGbkAy+ysAZJoOkDsW4g==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/scroll-snap": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-0.82.2.tgz", + "integrity": "sha512-Fl+utIAJr6nwNDnIML2jGIDRiFrDsQS77soGt8rT9Bj5swqdHpzwdTW3yu/VYlnPbvfrsB7SmMt1HzldukdOHQ==", + "license": "MIT", + "dependencies": { + "@zag-js/dom-query": "0.82.2" + } + }, + "node_modules/@zag-js/select": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-0.82.2.tgz", + "integrity": "sha512-2aiXx/3PKc6vexloHj6GYndAbnPoe5W5mH2VSHM25Obu0XYkn28OLKTDIyHlqcycypVci2j5MnhCEkqQK/JKuw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/collection": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/signature-pad": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-0.82.2.tgz", + "integrity": "sha512-o44M7B+cKmmiKmNFEIVTufr59jqvFShLri/EmkS1fY3KMSrnMHWNoa6xbJlVpz4DJMwI8PxapoN+lYxMTYUUEQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2", + "perfect-freehand": "^1.2.2" + } + }, + "node_modules/@zag-js/slider": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-0.82.2.tgz", + "integrity": "sha512-ef059F+zWcYVjX3lxTDgb2KEcYNrLMrvJEFyaVg11wRLtwjRqVrjFxn9W/ZpR6pWnJol2D+BV8b478NmTpRwog==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/element-size": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/splitter": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-0.82.2.tgz", + "integrity": "sha512-36KJkdjtogjG0MTXbcf5b8Ienl02KFoKPPx96uOwlWdvbuypwww6z9kAsWQ+CGkpaKXqxZIweO7BCO4seVCwuQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/steps": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-0.82.2.tgz", + "integrity": "sha512-otREJYUKLY+Dku89fCJ5TzkMHxe1Nk4Y5jffyWWOHkf+xy50Ist6jWjGxdIcU2cUwomAJZvPIuz0bq6WjBZ+zg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/store": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-0.82.2.tgz", + "integrity": "sha512-tjG99kSFfnUHWMTe3y+CAqCrH/RGCB2V5y0BoasITYAqTpqbCfPJH0R2+UYsY3kLqPnE+JDkkh1TnwcqKLc0/w==", + "license": "MIT", + "dependencies": { + "proxy-compare": "3.0.1" + } + }, + "node_modules/@zag-js/switch": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-0.82.2.tgz", + "integrity": "sha512-sUZTcHN1+UxtU7cv+kRaz31OVrNdBqR3BC4bqWkjz/ihshAdzHquwKDkOtYiKjIGV9h8CwcuuCksrbwqCJ3apw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-visible": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/tabs": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-0.82.2.tgz", + "integrity": "sha512-8y4eYpu4oZlANehMavGqu4bG5fepgjGuPDZNeNHzwWnbCh1TjoKJ20HvluRRzOgKoErQqD9+WT3V4Khw8Sd62Q==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/element-rect": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/tags-input": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-0.82.2.tgz", + "integrity": "sha512-L9bXHImBs+F0nlWbM6TeUZFN3ur/vwGGbT0sFw9FtsL/+5XmTQfZ5wert3l/qeUE1RJrohFBxsVvq4hz6UYUCw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/auto-resize": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/interact-outside": "0.82.2", + "@zag-js/live-region": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/time-picker": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/time-picker/-/time-picker-0.82.2.tgz", + "integrity": "sha512-NIJUrZMrLH6ciphwsmVsqMGyNEw6qtYlI3F6tlPLhVvnXJDcvc0PaGMe5OBM3yKFluQaVWUIVAR84urdhCBbpg==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + }, + "peerDependencies": { + "@internationalized/date": ">=3.0.0" + } + }, + "node_modules/@zag-js/timer": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-0.82.2.tgz", + "integrity": "sha512-lpCgHcSL4FNRb+UwlLu/J70iEr0vb2Dybwu39NkzxRi8LuBJGxrXGlTG8Apn2nldf7HHsSLT6cF7Nr0NohQa+Q==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/toast": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-0.82.2.tgz", + "integrity": "sha512-jAPzB4hxq90DmsvcuHepqzl/YMTnQQivkA7WG03hq/C5bAoPhpIvLauCTKiVW9SjgGfaTM6wuOQmMQEYiIe/rQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/toggle-group": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-0.82.2.tgz", + "integrity": "sha512-aJKP96iwDw/2Z98VWT40ii6CHTSrrvfsGJ03+dE8Mio6a43wiFKhatGLFIMTcu1EExiBmTAec4uUm4A1Xzbu1w==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/tooltip": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-0.82.2.tgz", + "integrity": "sha512-s7kXaBR3Ehu7kPzr9xX7FoWlqQ76eEViqGS1RPDtdDVgD1Hg7bfjZ1nCWDKgIuZF7gP/Iq4iC1i5iTOBIdeIOQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-visible": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/tour": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-0.82.2.tgz", + "integrity": "sha512-oQyVXSJIw7PeXRnHypI+zKp0mHm8oNiVzgcYBIASk/E9JU0U+DGXh8vRdvzsrQlZD+AKT2rjv1v8xvbVUEngSw==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dismissable": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/focus-trap": "0.82.2", + "@zag-js/interact-outside": "0.82.2", + "@zag-js/popper": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/tree-view": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-0.82.2.tgz", + "integrity": "sha512-7+05aXig4mlISMZ+eKJpi3p+9r9u+h0S5Mvsw2o5Dz7XX/BfPTK8GEEDFWwuJKm03wNBuKCQ8+X1pxUisZqXVQ==", + "license": "MIT", + "dependencies": { + "@zag-js/anatomy": "0.82.2", + "@zag-js/collection": "0.82.2", + "@zag-js/core": "0.82.2", + "@zag-js/dom-query": "0.82.2", + "@zag-js/types": "0.82.2", + "@zag-js/utils": "0.82.2" + } + }, + "node_modules/@zag-js/types": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-0.82.2.tgz", + "integrity": "sha512-OUN4QropdK3XZcjtm4n5JVMhbgp78F3pavLDvWCcwW0QwtckJljX6E17N9ViajVti8itKKXCuNRHCMhqLT8jwQ==", + "license": "MIT", + "dependencies": { + "csstype": "3.1.3" + } + }, + "node_modules/@zag-js/utils": { + "version": "0.82.2", + "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-0.82.2.tgz", + "integrity": "sha512-tN87VEEoo240O2CzQdHvtBVPF8hHqLdpNzDT+obNIQrRj4wbNQ5Ze3Zwrd6/SoBe7ImKgkwbAlgu4k5+v9sDcA==", + "license": "MIT" + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -1053,6 +2229,21 @@ "node": ">= 0.4" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1132,7 +2323,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1266,6 +2456,37 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1297,7 +2518,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -1365,7 +2585,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1510,6 +2729,15 @@ "node": ">=10.13.0" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -1701,7 +2929,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2209,6 +3436,12 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -2245,6 +3478,12 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2337,7 +3576,6 @@ "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" @@ -2623,7 +3861,6 @@ "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" @@ -2632,6 +3869,15 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2646,7 +3892,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -2737,6 +3982,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -2823,7 +4074,6 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -3204,6 +4454,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -3211,6 +4473,12 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3312,7 +4580,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/locate-path": { @@ -3418,7 +4685,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/mz": { @@ -3754,7 +5020,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -3763,6 +5028,24 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -3797,7 +5080,6 @@ "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": { @@ -3817,6 +5099,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/perfect-freehand": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.2.tgz", + "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", @@ -4051,6 +5348,21 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.1.tgz", + "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==", + "license": "MIT" + }, + "node_modules/proxy-memoize": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.1.tgz", + "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==", + "license": "MIT", + "dependencies": { + "proxy-compare": "^3.0.0" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -4111,7 +5423,6 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, "node_modules/read-cache": { @@ -4159,6 +5470,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -4182,7 +5499,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", @@ -4200,7 +5516,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -4438,6 +5753,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4712,6 +6036,12 @@ } } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -4752,7 +6082,6 @@ "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" @@ -5031,6 +6360,12 @@ "dev": true, "license": "MIT" }, + "node_modules/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "license": "MIT" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/frontend/src/components/ui/avatar.tsx b/frontend/src/components/ui/avatar.tsx new file mode 100644 index 00000000..0f1d3a37 --- /dev/null +++ b/frontend/src/components/ui/avatar.tsx @@ -0,0 +1,34 @@ +import { + Avatar as ChakraAvatar, + AvatarGroup as ChakraAvatarGroup, +} from "@chakra-ui/react" +import * as React from "react" + +type ImageProps = React.ImgHTMLAttributes + +export interface AvatarProps extends ChakraAvatar.RootProps { + name?: string + src?: string + srcSet?: string + loading?: ImageProps["loading"] + icon?: React.ReactElement + fallback?: React.ReactNode +} + +export const Avatar = React.forwardRef( + function Avatar(props, ref) { + const { name, src, srcSet, loading, icon, fallback, children, ...rest } = + props + return ( + + + {icon || fallback} + + + {children} + + ) + }, +) + +export const AvatarGroup = ChakraAvatarGroup diff --git a/frontend/src/components/ui/checkbox.tsx b/frontend/src/components/ui/checkbox.tsx new file mode 100644 index 00000000..2a27c2ff --- /dev/null +++ b/frontend/src/components/ui/checkbox.tsx @@ -0,0 +1,25 @@ +import { Checkbox as ChakraCheckbox } from "@chakra-ui/react" +import * as React from "react" + +export interface CheckboxProps extends ChakraCheckbox.RootProps { + icon?: React.ReactNode + inputProps?: React.InputHTMLAttributes + rootRef?: React.Ref +} + +export const Checkbox = React.forwardRef( + function Checkbox(props, ref) { + const { icon, children, inputProps, rootRef, ...rest } = props + return ( + + + + {icon || } + + {children != null && ( + {children} + )} + + ) + }, +) diff --git a/frontend/src/components/ui/close-button.tsx b/frontend/src/components/ui/close-button.tsx new file mode 100644 index 00000000..94af4885 --- /dev/null +++ b/frontend/src/components/ui/close-button.tsx @@ -0,0 +1,17 @@ +import type { ButtonProps } from "@chakra-ui/react" +import { IconButton as ChakraIconButton } from "@chakra-ui/react" +import * as React from "react" +import { LuX } from "react-icons/lu" + +export type CloseButtonProps = ButtonProps + +export const CloseButton = React.forwardRef< + HTMLButtonElement, + CloseButtonProps +>(function CloseButton(props, ref) { + return ( + + {props.children ?? } + + ) +}) diff --git a/frontend/src/components/ui/color-mode.tsx b/frontend/src/components/ui/color-mode.tsx new file mode 100644 index 00000000..f93feabc --- /dev/null +++ b/frontend/src/components/ui/color-mode.tsx @@ -0,0 +1,107 @@ +"use client" + +import type { IconButtonProps, SpanProps } from "@chakra-ui/react" +import { ClientOnly, IconButton, Skeleton, Span } from "@chakra-ui/react" +import { ThemeProvider, useTheme } from "next-themes" +import type { ThemeProviderProps } from "next-themes" +import * as React from "react" +import { LuMoon, LuSun } from "react-icons/lu" + +export interface ColorModeProviderProps extends ThemeProviderProps {} + +export function ColorModeProvider(props: ColorModeProviderProps) { + return ( + + ) +} + +export type ColorMode = "light" | "dark" + +export interface UseColorModeReturn { + colorMode: ColorMode + setColorMode: (colorMode: ColorMode) => void + toggleColorMode: () => void +} + +export function useColorMode(): UseColorModeReturn { + const { resolvedTheme, setTheme } = useTheme() + const toggleColorMode = () => { + setTheme(resolvedTheme === "dark" ? "light" : "dark") + } + return { + colorMode: resolvedTheme as ColorMode, + setColorMode: setTheme, + toggleColorMode, + } +} + +export function useColorModeValue(light: T, dark: T) { + const { colorMode } = useColorMode() + return colorMode === "dark" ? dark : light +} + +export function ColorModeIcon() { + const { colorMode } = useColorMode() + return colorMode === "dark" ? : +} + +interface ColorModeButtonProps extends Omit {} + +export const ColorModeButton = React.forwardRef< + HTMLButtonElement, + ColorModeButtonProps +>(function ColorModeButton(props, ref) { + const { toggleColorMode } = useColorMode() + return ( + }> + + + + + ) +}) + +export const LightMode = React.forwardRef( + function LightMode(props, ref) { + return ( + + ) + }, +) + +export const DarkMode = React.forwardRef( + function DarkMode(props, ref) { + return ( + + ) + }, +) diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx new file mode 100644 index 00000000..89d68a5d --- /dev/null +++ b/frontend/src/components/ui/dialog.tsx @@ -0,0 +1,62 @@ +import { Dialog as ChakraDialog, Portal } from "@chakra-ui/react" +import { CloseButton } from "./close-button" +import * as React from "react" + +interface DialogContentProps extends ChakraDialog.ContentProps { + portalled?: boolean + portalRef?: React.RefObject + backdrop?: boolean +} + +export const DialogContent = React.forwardRef< + HTMLDivElement, + DialogContentProps +>(function DialogContent(props, ref) { + const { + children, + portalled = true, + portalRef, + backdrop = true, + ...rest + } = props + + return ( + + {backdrop && } + + + {children} + + + + ) +}) + +export const DialogCloseTrigger = React.forwardRef< + HTMLButtonElement, + ChakraDialog.CloseTriggerProps +>(function DialogCloseTrigger(props, ref) { + return ( + + + {props.children} + + + ) +}) + +export const DialogRoot = ChakraDialog.Root +export const DialogFooter = ChakraDialog.Footer +export const DialogHeader = ChakraDialog.Header +export const DialogBody = ChakraDialog.Body +export const DialogBackdrop = ChakraDialog.Backdrop +export const DialogTitle = ChakraDialog.Title +export const DialogDescription = ChakraDialog.Description +export const DialogTrigger = ChakraDialog.Trigger +export const DialogActionTrigger = ChakraDialog.ActionTrigger diff --git a/frontend/src/components/ui/drawer.tsx b/frontend/src/components/ui/drawer.tsx new file mode 100644 index 00000000..ccb96c80 --- /dev/null +++ b/frontend/src/components/ui/drawer.tsx @@ -0,0 +1,52 @@ +import { Drawer as ChakraDrawer, Portal } from "@chakra-ui/react" +import { CloseButton } from "./close-button" +import * as React from "react" + +interface DrawerContentProps extends ChakraDrawer.ContentProps { + portalled?: boolean + portalRef?: React.RefObject + offset?: ChakraDrawer.ContentProps["padding"] +} + +export const DrawerContent = React.forwardRef< + HTMLDivElement, + DrawerContentProps +>(function DrawerContent(props, ref) { + const { children, portalled = true, portalRef, offset, ...rest } = props + return ( + + + + {children} + + + + ) +}) + +export const DrawerCloseTrigger = React.forwardRef< + HTMLButtonElement, + ChakraDrawer.CloseTriggerProps +>(function DrawerCloseTrigger(props, ref) { + return ( + + + + ) +}) + +export const DrawerTrigger = ChakraDrawer.Trigger +export const DrawerRoot = ChakraDrawer.Root +export const DrawerFooter = ChakraDrawer.Footer +export const DrawerHeader = ChakraDrawer.Header +export const DrawerBody = ChakraDrawer.Body +export const DrawerBackdrop = ChakraDrawer.Backdrop +export const DrawerDescription = ChakraDrawer.Description +export const DrawerTitle = ChakraDrawer.Title +export const DrawerActionTrigger = ChakraDrawer.ActionTrigger diff --git a/frontend/src/components/ui/field.tsx b/frontend/src/components/ui/field.tsx new file mode 100644 index 00000000..dd3b66f1 --- /dev/null +++ b/frontend/src/components/ui/field.tsx @@ -0,0 +1,33 @@ +import { Field as ChakraField } from "@chakra-ui/react" +import * as React from "react" + +export interface FieldProps extends Omit { + label?: React.ReactNode + helperText?: React.ReactNode + errorText?: React.ReactNode + optionalText?: React.ReactNode +} + +export const Field = React.forwardRef( + function Field(props, ref) { + const { label, children, helperText, errorText, optionalText, ...rest } = + props + return ( + + {label && ( + + {label} + + + )} + {children} + {helperText && ( + {helperText} + )} + {errorText && ( + {errorText} + )} + + ) + }, +) diff --git a/frontend/src/components/ui/input-group.tsx b/frontend/src/components/ui/input-group.tsx new file mode 100644 index 00000000..5d8fb32a --- /dev/null +++ b/frontend/src/components/ui/input-group.tsx @@ -0,0 +1,53 @@ +import type { BoxProps, InputElementProps } from "@chakra-ui/react" +import { Group, InputElement } from "@chakra-ui/react" +import * as React from "react" + +export interface InputGroupProps extends BoxProps { + startElementProps?: InputElementProps + endElementProps?: InputElementProps + startElement?: React.ReactNode + endElement?: React.ReactNode + children: React.ReactElement + startOffset?: InputElementProps["paddingStart"] + endOffset?: InputElementProps["paddingEnd"] +} + +export const InputGroup = React.forwardRef( + function InputGroup(props, ref) { + const { + startElement, + startElementProps, + endElement, + endElementProps, + children, + startOffset = "6px", + endOffset = "6px", + ...rest + } = props + + const child = + React.Children.only>(children) + + return ( + + {startElement && ( + + {startElement} + + )} + {React.cloneElement(child, { + ...(startElement && { + ps: `calc(var(--input-height) - ${startOffset})`, + }), + ...(endElement && { pe: `calc(var(--input-height) - ${endOffset})` }), + ...children.props, + })} + {endElement && ( + + {endElement} + + )} + + ) + }, +) diff --git a/frontend/src/components/ui/popover.tsx b/frontend/src/components/ui/popover.tsx new file mode 100644 index 00000000..3320659d --- /dev/null +++ b/frontend/src/components/ui/popover.tsx @@ -0,0 +1,59 @@ +import { Popover as ChakraPopover, Portal } from "@chakra-ui/react" +import { CloseButton } from "./close-button" +import * as React from "react" + +interface PopoverContentProps extends ChakraPopover.ContentProps { + portalled?: boolean + portalRef?: React.RefObject +} + +export const PopoverContent = React.forwardRef< + HTMLDivElement, + PopoverContentProps +>(function PopoverContent(props, ref) { + const { portalled = true, portalRef, ...rest } = props + return ( + + + + + + ) +}) + +export const PopoverArrow = React.forwardRef< + HTMLDivElement, + ChakraPopover.ArrowProps +>(function PopoverArrow(props, ref) { + return ( + + + + ) +}) + +export const PopoverCloseTrigger = React.forwardRef< + HTMLButtonElement, + ChakraPopover.CloseTriggerProps +>(function PopoverCloseTrigger(props, ref) { + return ( + + + + ) +}) + +export const PopoverTitle = ChakraPopover.Title +export const PopoverDescription = ChakraPopover.Description +export const PopoverFooter = ChakraPopover.Footer +export const PopoverHeader = ChakraPopover.Header +export const PopoverRoot = ChakraPopover.Root +export const PopoverBody = ChakraPopover.Body +export const PopoverTrigger = ChakraPopover.Trigger diff --git a/frontend/src/components/ui/provider.tsx b/frontend/src/components/ui/provider.tsx new file mode 100644 index 00000000..fd0331bf --- /dev/null +++ b/frontend/src/components/ui/provider.tsx @@ -0,0 +1,15 @@ +"use client" + +import { ChakraProvider, defaultSystem } from "@chakra-ui/react" +import { + ColorModeProvider, + type ColorModeProviderProps, +} from "./color-mode" + +export function Provider(props: ColorModeProviderProps) { + return ( + + + + ) +} diff --git a/frontend/src/components/ui/radio.tsx b/frontend/src/components/ui/radio.tsx new file mode 100644 index 00000000..b3919d08 --- /dev/null +++ b/frontend/src/components/ui/radio.tsx @@ -0,0 +1,24 @@ +import { RadioGroup as ChakraRadioGroup } from "@chakra-ui/react" +import * as React from "react" + +export interface RadioProps extends ChakraRadioGroup.ItemProps { + rootRef?: React.Ref + inputProps?: React.InputHTMLAttributes +} + +export const Radio = React.forwardRef( + function Radio(props, ref) { + const { children, inputProps, rootRef, ...rest } = props + return ( + + + + {children && ( + {children} + )} + + ) + }, +) + +export const RadioGroup = ChakraRadioGroup.Root diff --git a/frontend/src/components/ui/slider.tsx b/frontend/src/components/ui/slider.tsx new file mode 100644 index 00000000..55a7283b --- /dev/null +++ b/frontend/src/components/ui/slider.tsx @@ -0,0 +1,82 @@ +import { Slider as ChakraSlider, For, HStack } from "@chakra-ui/react" +import * as React from "react" + +export interface SliderProps extends ChakraSlider.RootProps { + marks?: Array + label?: React.ReactNode + showValue?: boolean +} + +export const Slider = React.forwardRef( + function Slider(props, ref) { + const { marks: marksProp, label, showValue, ...rest } = props + const value = props.defaultValue ?? props.value + + const marks = marksProp?.map((mark) => { + if (typeof mark === "number") return { value: mark, label: undefined } + return mark + }) + + const hasMarkLabel = !!marks?.some((mark) => mark.label) + + return ( + + {label && !showValue && ( + {label} + )} + {label && showValue && ( + + {label} + + + )} + + + + + + + + + ) + }, +) + +function SliderThumbs(props: { value?: number[] }) { + const { value } = props + return ( + + {(_, index) => ( + + + + )} + + ) +} + +interface SliderMarksProps { + marks?: Array +} + +const SliderMarks = React.forwardRef( + function SliderMarks(props, ref) { + const { marks } = props + if (!marks?.length) return null + + return ( + + {marks.map((mark, index) => { + const value = typeof mark === "number" ? mark : mark.value + const label = typeof mark === "number" ? undefined : mark.label + return ( + + + {label} + + ) + })} + + ) + }, +) diff --git a/frontend/src/components/ui/tooltip.tsx b/frontend/src/components/ui/tooltip.tsx new file mode 100644 index 00000000..43a8a6c0 --- /dev/null +++ b/frontend/src/components/ui/tooltip.tsx @@ -0,0 +1,46 @@ +import { Tooltip as ChakraTooltip, Portal } from "@chakra-ui/react" +import * as React from "react" + +export interface TooltipProps extends ChakraTooltip.RootProps { + showArrow?: boolean + portalled?: boolean + portalRef?: React.RefObject + content: React.ReactNode + contentProps?: ChakraTooltip.ContentProps + disabled?: boolean +} + +export const Tooltip = React.forwardRef( + function Tooltip(props, ref) { + const { + showArrow, + children, + disabled, + portalled = true, + content, + contentProps, + portalRef, + ...rest + } = props + + if (disabled) return children + + return ( + + {children} + + + + {showArrow && ( + + + + )} + {content} + + + + + ) + }, +) diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index c14313e8..b08070c1 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,6 +1,13 @@ -import '@/styles/globals.css'; -import type { AppProps } from 'next/app'; +import "@/styles/globals.css"; +import type { AppProps } from "next/app"; +import { Provider } from "@/components/ui/provider"; export default function App({ Component, pageProps }: AppProps) { - return ; + return ( + + + + + + ); } diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 5dd49ef6..35b20514 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -8,6 +8,7 @@ "noFallthroughCasesInSwitch": true, "noEmit": true, "esModuleInterop": true, + "target": "ESNext", "module": "esnext", "moduleResolution": "bundler", "resolveJsonModule": true, From 59f4b64937d530d572b727b4bb2762e7c8937f4a Mon Sep 17 00:00:00 2001 From: janealsh Date: Tue, 11 Mar 2025 21:42:32 -0400 Subject: [PATCH 2/2] linting --- frontend/next.config.mjs | 2 +- frontend/src/components/ui/avatar.tsx | 48 +++----- frontend/src/components/ui/checkbox.tsx | 24 ++-- frontend/src/components/ui/close-button.tsx | 29 +++-- frontend/src/components/ui/color-mode.tsx | 127 ++++++++++---------- frontend/src/components/ui/dialog.tsx | 79 +++++------- frontend/src/components/ui/drawer.tsx | 71 +++++------ frontend/src/components/ui/field.tsx | 53 ++++---- frontend/src/components/ui/input-group.tsx | 33 +++-- frontend/src/components/ui/popover.tsx | 72 ++++++----- frontend/src/components/ui/provider.tsx | 11 +- frontend/src/components/ui/radio.tsx | 34 +++--- frontend/src/components/ui/slider.tsx | 86 +++++++------ frontend/src/components/ui/tooltip.tsx | 78 ++++++------ frontend/src/pages/_app.tsx | 6 +- 15 files changed, 346 insertions(+), 407 deletions(-) diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index b3e664fd..8c87562a 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -2,7 +2,7 @@ const nextConfig = { reactStrictMode: true, experimental: { - optimizePackageImports: ["@chakra-ui/react"], + optimizePackageImports: ['@chakra-ui/react'], }, }; diff --git a/frontend/src/components/ui/avatar.tsx b/frontend/src/components/ui/avatar.tsx index 0f1d3a37..2a7023f1 100644 --- a/frontend/src/components/ui/avatar.tsx +++ b/frontend/src/components/ui/avatar.tsx @@ -1,34 +1,26 @@ -import { - Avatar as ChakraAvatar, - AvatarGroup as ChakraAvatarGroup, -} from "@chakra-ui/react" -import * as React from "react" +import { Avatar as ChakraAvatar, AvatarGroup as ChakraAvatarGroup } from '@chakra-ui/react'; +import * as React from 'react'; -type ImageProps = React.ImgHTMLAttributes +type ImageProps = React.ImgHTMLAttributes; export interface AvatarProps extends ChakraAvatar.RootProps { - name?: string - src?: string - srcSet?: string - loading?: ImageProps["loading"] - icon?: React.ReactElement - fallback?: React.ReactNode + name?: string; + src?: string; + srcSet?: string; + loading?: ImageProps['loading']; + icon?: React.ReactElement; + fallback?: React.ReactNode; } -export const Avatar = React.forwardRef( - function Avatar(props, ref) { - const { name, src, srcSet, loading, icon, fallback, children, ...rest } = - props - return ( - - - {icon || fallback} - - - {children} - - ) - }, -) +export const Avatar = React.forwardRef(function Avatar(props, ref) { + const { name, src, srcSet, loading, icon, fallback, children, ...rest } = props; + return ( + + {icon || fallback} + + {children} + + ); +}); -export const AvatarGroup = ChakraAvatarGroup +export const AvatarGroup = ChakraAvatarGroup; diff --git a/frontend/src/components/ui/checkbox.tsx b/frontend/src/components/ui/checkbox.tsx index 2a27c2ff..2f71f805 100644 --- a/frontend/src/components/ui/checkbox.tsx +++ b/frontend/src/components/ui/checkbox.tsx @@ -1,25 +1,21 @@ -import { Checkbox as ChakraCheckbox } from "@chakra-ui/react" -import * as React from "react" +import { Checkbox as ChakraCheckbox } from '@chakra-ui/react'; +import * as React from 'react'; export interface CheckboxProps extends ChakraCheckbox.RootProps { - icon?: React.ReactNode - inputProps?: React.InputHTMLAttributes - rootRef?: React.Ref + icon?: React.ReactNode; + inputProps?: React.InputHTMLAttributes; + rootRef?: React.Ref; } export const Checkbox = React.forwardRef( function Checkbox(props, ref) { - const { icon, children, inputProps, rootRef, ...rest } = props + const { icon, children, inputProps, rootRef, ...rest } = props; return ( - - {icon || } - - {children != null && ( - {children} - )} + {icon || } + {children != null && {children}} - ) + ); }, -) +); diff --git a/frontend/src/components/ui/close-button.tsx b/frontend/src/components/ui/close-button.tsx index 94af4885..e5345f43 100644 --- a/frontend/src/components/ui/close-button.tsx +++ b/frontend/src/components/ui/close-button.tsx @@ -1,17 +1,16 @@ -import type { ButtonProps } from "@chakra-ui/react" -import { IconButton as ChakraIconButton } from "@chakra-ui/react" -import * as React from "react" -import { LuX } from "react-icons/lu" +import type { ButtonProps } from '@chakra-ui/react'; +import { IconButton as ChakraIconButton } from '@chakra-ui/react'; +import * as React from 'react'; +import { LuX } from 'react-icons/lu'; -export type CloseButtonProps = ButtonProps +export type CloseButtonProps = ButtonProps; -export const CloseButton = React.forwardRef< - HTMLButtonElement, - CloseButtonProps ->(function CloseButton(props, ref) { - return ( - - {props.children ?? } - - ) -}) +export const CloseButton = React.forwardRef( + function CloseButton(props, ref) { + return ( + + {props.children ?? } + + ); + }, +); diff --git a/frontend/src/components/ui/color-mode.tsx b/frontend/src/components/ui/color-mode.tsx index f93feabc..9a263897 100644 --- a/frontend/src/components/ui/color-mode.tsx +++ b/frontend/src/components/ui/color-mode.tsx @@ -1,78 +1,75 @@ -"use client" +'use client'; -import type { IconButtonProps, SpanProps } from "@chakra-ui/react" -import { ClientOnly, IconButton, Skeleton, Span } from "@chakra-ui/react" -import { ThemeProvider, useTheme } from "next-themes" -import type { ThemeProviderProps } from "next-themes" -import * as React from "react" -import { LuMoon, LuSun } from "react-icons/lu" +import type { IconButtonProps, SpanProps } from '@chakra-ui/react'; +import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react'; +import { ThemeProvider, useTheme } from 'next-themes'; +import type { ThemeProviderProps } from 'next-themes'; +import * as React from 'react'; +import { LuMoon, LuSun } from 'react-icons/lu'; export interface ColorModeProviderProps extends ThemeProviderProps {} export function ColorModeProvider(props: ColorModeProviderProps) { - return ( - - ) + return ; } -export type ColorMode = "light" | "dark" +export type ColorMode = 'light' | 'dark'; export interface UseColorModeReturn { - colorMode: ColorMode - setColorMode: (colorMode: ColorMode) => void - toggleColorMode: () => void + colorMode: ColorMode; + setColorMode: (colorMode: ColorMode) => void; + toggleColorMode: () => void; } export function useColorMode(): UseColorModeReturn { - const { resolvedTheme, setTheme } = useTheme() + const { resolvedTheme, setTheme } = useTheme(); const toggleColorMode = () => { - setTheme(resolvedTheme === "dark" ? "light" : "dark") - } + setTheme(resolvedTheme === 'dark' ? 'light' : 'dark'); + }; return { colorMode: resolvedTheme as ColorMode, setColorMode: setTheme, toggleColorMode, - } + }; } export function useColorModeValue(light: T, dark: T) { - const { colorMode } = useColorMode() - return colorMode === "dark" ? dark : light + const { colorMode } = useColorMode(); + return colorMode === 'dark' ? dark : light; } export function ColorModeIcon() { - const { colorMode } = useColorMode() - return colorMode === "dark" ? : + const { colorMode } = useColorMode(); + return colorMode === 'dark' ? : ; } -interface ColorModeButtonProps extends Omit {} +interface ColorModeButtonProps extends Omit {} -export const ColorModeButton = React.forwardRef< - HTMLButtonElement, - ColorModeButtonProps ->(function ColorModeButton(props, ref) { - const { toggleColorMode } = useColorMode() - return ( - }> - - - - - ) -}) +export const ColorModeButton = React.forwardRef( + function ColorModeButton(props, ref) { + const { toggleColorMode } = useColorMode(); + return ( + }> + + + + + ); + }, +); export const LightMode = React.forwardRef( function LightMode(props, ref) { @@ -86,22 +83,20 @@ export const LightMode = React.forwardRef( ref={ref} {...props} /> - ) + ); }, -) +); -export const DarkMode = React.forwardRef( - function DarkMode(props, ref) { - return ( - - ) - }, -) +export const DarkMode = React.forwardRef(function DarkMode(props, ref) { + return ( + + ); +}); diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx index 89d68a5d..3d92a9c6 100644 --- a/frontend/src/components/ui/dialog.tsx +++ b/frontend/src/components/ui/dialog.tsx @@ -1,62 +1,49 @@ -import { Dialog as ChakraDialog, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" +import { Dialog as ChakraDialog, Portal } from '@chakra-ui/react'; +import { CloseButton } from './close-button'; +import * as React from 'react'; interface DialogContentProps extends ChakraDialog.ContentProps { - portalled?: boolean - portalRef?: React.RefObject - backdrop?: boolean + portalled?: boolean; + portalRef?: React.RefObject; + backdrop?: boolean; } -export const DialogContent = React.forwardRef< - HTMLDivElement, - DialogContentProps ->(function DialogContent(props, ref) { - const { - children, - portalled = true, - portalRef, - backdrop = true, - ...rest - } = props +export const DialogContent = React.forwardRef( + function DialogContent(props, ref) { + const { children, portalled = true, portalRef, backdrop = true, ...rest } = props; - return ( - - {backdrop && } - - - {children} - - - - ) -}) + return ( + + {backdrop && } + + + {children} + + + + ); + }, +); export const DialogCloseTrigger = React.forwardRef< HTMLButtonElement, ChakraDialog.CloseTriggerProps >(function DialogCloseTrigger(props, ref) { return ( - + {props.children} - ) -}) + ); +}); -export const DialogRoot = ChakraDialog.Root -export const DialogFooter = ChakraDialog.Footer -export const DialogHeader = ChakraDialog.Header -export const DialogBody = ChakraDialog.Body -export const DialogBackdrop = ChakraDialog.Backdrop -export const DialogTitle = ChakraDialog.Title -export const DialogDescription = ChakraDialog.Description -export const DialogTrigger = ChakraDialog.Trigger -export const DialogActionTrigger = ChakraDialog.ActionTrigger +export const DialogRoot = ChakraDialog.Root; +export const DialogFooter = ChakraDialog.Footer; +export const DialogHeader = ChakraDialog.Header; +export const DialogBody = ChakraDialog.Body; +export const DialogBackdrop = ChakraDialog.Backdrop; +export const DialogTitle = ChakraDialog.Title; +export const DialogDescription = ChakraDialog.Description; +export const DialogTrigger = ChakraDialog.Trigger; +export const DialogActionTrigger = ChakraDialog.ActionTrigger; diff --git a/frontend/src/components/ui/drawer.tsx b/frontend/src/components/ui/drawer.tsx index ccb96c80..3a6a812b 100644 --- a/frontend/src/components/ui/drawer.tsx +++ b/frontend/src/components/ui/drawer.tsx @@ -1,52 +1,45 @@ -import { Drawer as ChakraDrawer, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" +import { Drawer as ChakraDrawer, Portal } from '@chakra-ui/react'; +import { CloseButton } from './close-button'; +import * as React from 'react'; interface DrawerContentProps extends ChakraDrawer.ContentProps { - portalled?: boolean - portalRef?: React.RefObject - offset?: ChakraDrawer.ContentProps["padding"] + portalled?: boolean; + portalRef?: React.RefObject; + offset?: ChakraDrawer.ContentProps['padding']; } -export const DrawerContent = React.forwardRef< - HTMLDivElement, - DrawerContentProps ->(function DrawerContent(props, ref) { - const { children, portalled = true, portalRef, offset, ...rest } = props - return ( - - - - {children} - - - - ) -}) +export const DrawerContent = React.forwardRef( + function DrawerContent(props, ref) { + const { children, portalled = true, portalRef, offset, ...rest } = props; + return ( + + + + {children} + + + + ); + }, +); export const DrawerCloseTrigger = React.forwardRef< HTMLButtonElement, ChakraDrawer.CloseTriggerProps >(function DrawerCloseTrigger(props, ref) { return ( - + - ) -}) + ); +}); -export const DrawerTrigger = ChakraDrawer.Trigger -export const DrawerRoot = ChakraDrawer.Root -export const DrawerFooter = ChakraDrawer.Footer -export const DrawerHeader = ChakraDrawer.Header -export const DrawerBody = ChakraDrawer.Body -export const DrawerBackdrop = ChakraDrawer.Backdrop -export const DrawerDescription = ChakraDrawer.Description -export const DrawerTitle = ChakraDrawer.Title -export const DrawerActionTrigger = ChakraDrawer.ActionTrigger +export const DrawerTrigger = ChakraDrawer.Trigger; +export const DrawerRoot = ChakraDrawer.Root; +export const DrawerFooter = ChakraDrawer.Footer; +export const DrawerHeader = ChakraDrawer.Header; +export const DrawerBody = ChakraDrawer.Body; +export const DrawerBackdrop = ChakraDrawer.Backdrop; +export const DrawerDescription = ChakraDrawer.Description; +export const DrawerTitle = ChakraDrawer.Title; +export const DrawerActionTrigger = ChakraDrawer.ActionTrigger; diff --git a/frontend/src/components/ui/field.tsx b/frontend/src/components/ui/field.tsx index dd3b66f1..6bf73db8 100644 --- a/frontend/src/components/ui/field.tsx +++ b/frontend/src/components/ui/field.tsx @@ -1,33 +1,26 @@ -import { Field as ChakraField } from "@chakra-ui/react" -import * as React from "react" +import { Field as ChakraField } from '@chakra-ui/react'; +import * as React from 'react'; -export interface FieldProps extends Omit { - label?: React.ReactNode - helperText?: React.ReactNode - errorText?: React.ReactNode - optionalText?: React.ReactNode +export interface FieldProps extends Omit { + label?: React.ReactNode; + helperText?: React.ReactNode; + errorText?: React.ReactNode; + optionalText?: React.ReactNode; } -export const Field = React.forwardRef( - function Field(props, ref) { - const { label, children, helperText, errorText, optionalText, ...rest } = - props - return ( - - {label && ( - - {label} - - - )} - {children} - {helperText && ( - {helperText} - )} - {errorText && ( - {errorText} - )} - - ) - }, -) +export const Field = React.forwardRef(function Field(props, ref) { + const { label, children, helperText, errorText, optionalText, ...rest } = props; + return ( + + {label && ( + + {label} + + + )} + {children} + {helperText && {helperText}} + {errorText && {errorText}} + + ); +}); diff --git a/frontend/src/components/ui/input-group.tsx b/frontend/src/components/ui/input-group.tsx index 5d8fb32a..6ee185e3 100644 --- a/frontend/src/components/ui/input-group.tsx +++ b/frontend/src/components/ui/input-group.tsx @@ -1,15 +1,15 @@ -import type { BoxProps, InputElementProps } from "@chakra-ui/react" -import { Group, InputElement } from "@chakra-ui/react" -import * as React from "react" +import type { BoxProps, InputElementProps } from '@chakra-ui/react'; +import { Group, InputElement } from '@chakra-ui/react'; +import * as React from 'react'; export interface InputGroupProps extends BoxProps { - startElementProps?: InputElementProps - endElementProps?: InputElementProps - startElement?: React.ReactNode - endElement?: React.ReactNode - children: React.ReactElement - startOffset?: InputElementProps["paddingStart"] - endOffset?: InputElementProps["paddingEnd"] + startElementProps?: InputElementProps; + endElementProps?: InputElementProps; + startElement?: React.ReactNode; + endElement?: React.ReactNode; + children: React.ReactElement; + startOffset?: InputElementProps['paddingStart']; + endOffset?: InputElementProps['paddingEnd']; } export const InputGroup = React.forwardRef( @@ -20,13 +20,12 @@ export const InputGroup = React.forwardRef( endElement, endElementProps, children, - startOffset = "6px", - endOffset = "6px", + startOffset = '6px', + endOffset = '6px', ...rest - } = props + } = props; - const child = - React.Children.only>(children) + const child = React.Children.only>(children); return ( @@ -48,6 +47,6 @@ export const InputGroup = React.forwardRef( )} - ) + ); }, -) +); diff --git a/frontend/src/components/ui/popover.tsx b/frontend/src/components/ui/popover.tsx index 3320659d..c9cec41b 100644 --- a/frontend/src/components/ui/popover.tsx +++ b/frontend/src/components/ui/popover.tsx @@ -1,36 +1,34 @@ -import { Popover as ChakraPopover, Portal } from "@chakra-ui/react" -import { CloseButton } from "./close-button" -import * as React from "react" +import { Popover as ChakraPopover, Portal } from '@chakra-ui/react'; +import { CloseButton } from './close-button'; +import * as React from 'react'; interface PopoverContentProps extends ChakraPopover.ContentProps { - portalled?: boolean - portalRef?: React.RefObject + portalled?: boolean; + portalRef?: React.RefObject; } -export const PopoverContent = React.forwardRef< - HTMLDivElement, - PopoverContentProps ->(function PopoverContent(props, ref) { - const { portalled = true, portalRef, ...rest } = props - return ( - - - - - - ) -}) +export const PopoverContent = React.forwardRef( + function PopoverContent(props, ref) { + const { portalled = true, portalRef, ...rest } = props; + return ( + + + + + + ); + }, +); -export const PopoverArrow = React.forwardRef< - HTMLDivElement, - ChakraPopover.ArrowProps ->(function PopoverArrow(props, ref) { - return ( - - - - ) -}) +export const PopoverArrow = React.forwardRef( + function PopoverArrow(props, ref) { + return ( + + + + ); + }, +); export const PopoverCloseTrigger = React.forwardRef< HTMLButtonElement, @@ -47,13 +45,13 @@ export const PopoverCloseTrigger = React.forwardRef< > - ) -}) + ); +}); -export const PopoverTitle = ChakraPopover.Title -export const PopoverDescription = ChakraPopover.Description -export const PopoverFooter = ChakraPopover.Footer -export const PopoverHeader = ChakraPopover.Header -export const PopoverRoot = ChakraPopover.Root -export const PopoverBody = ChakraPopover.Body -export const PopoverTrigger = ChakraPopover.Trigger +export const PopoverTitle = ChakraPopover.Title; +export const PopoverDescription = ChakraPopover.Description; +export const PopoverFooter = ChakraPopover.Footer; +export const PopoverHeader = ChakraPopover.Header; +export const PopoverRoot = ChakraPopover.Root; +export const PopoverBody = ChakraPopover.Body; +export const PopoverTrigger = ChakraPopover.Trigger; diff --git a/frontend/src/components/ui/provider.tsx b/frontend/src/components/ui/provider.tsx index fd0331bf..1ca22df5 100644 --- a/frontend/src/components/ui/provider.tsx +++ b/frontend/src/components/ui/provider.tsx @@ -1,15 +1,12 @@ -"use client" +'use client'; -import { ChakraProvider, defaultSystem } from "@chakra-ui/react" -import { - ColorModeProvider, - type ColorModeProviderProps, -} from "./color-mode" +import { ChakraProvider, defaultSystem } from '@chakra-ui/react'; +import { ColorModeProvider, type ColorModeProviderProps } from './color-mode'; export function Provider(props: ColorModeProviderProps) { return ( - ) + ); } diff --git a/frontend/src/components/ui/radio.tsx b/frontend/src/components/ui/radio.tsx index b3919d08..66d946d9 100644 --- a/frontend/src/components/ui/radio.tsx +++ b/frontend/src/components/ui/radio.tsx @@ -1,24 +1,20 @@ -import { RadioGroup as ChakraRadioGroup } from "@chakra-ui/react" -import * as React from "react" +import { RadioGroup as ChakraRadioGroup } from '@chakra-ui/react'; +import * as React from 'react'; export interface RadioProps extends ChakraRadioGroup.ItemProps { - rootRef?: React.Ref - inputProps?: React.InputHTMLAttributes + rootRef?: React.Ref; + inputProps?: React.InputHTMLAttributes; } -export const Radio = React.forwardRef( - function Radio(props, ref) { - const { children, inputProps, rootRef, ...rest } = props - return ( - - - - {children && ( - {children} - )} - - ) - }, -) +export const Radio = React.forwardRef(function Radio(props, ref) { + const { children, inputProps, rootRef, ...rest } = props; + return ( + + + + {children && {children}} + + ); +}); -export const RadioGroup = ChakraRadioGroup.Root +export const RadioGroup = ChakraRadioGroup.Root; diff --git a/frontend/src/components/ui/slider.tsx b/frontend/src/components/ui/slider.tsx index 55a7283b..54e29454 100644 --- a/frontend/src/components/ui/slider.tsx +++ b/frontend/src/components/ui/slider.tsx @@ -1,49 +1,45 @@ -import { Slider as ChakraSlider, For, HStack } from "@chakra-ui/react" -import * as React from "react" +import { Slider as ChakraSlider, For, HStack } from '@chakra-ui/react'; +import * as React from 'react'; export interface SliderProps extends ChakraSlider.RootProps { - marks?: Array - label?: React.ReactNode - showValue?: boolean + marks?: Array; + label?: React.ReactNode; + showValue?: boolean; } -export const Slider = React.forwardRef( - function Slider(props, ref) { - const { marks: marksProp, label, showValue, ...rest } = props - const value = props.defaultValue ?? props.value +export const Slider = React.forwardRef(function Slider(props, ref) { + const { marks: marksProp, label, showValue, ...rest } = props; + const value = props.defaultValue ?? props.value; - const marks = marksProp?.map((mark) => { - if (typeof mark === "number") return { value: mark, label: undefined } - return mark - }) + const marks = marksProp?.map((mark) => { + if (typeof mark === 'number') return { value: mark, label: undefined }; + return mark; + }); - const hasMarkLabel = !!marks?.some((mark) => mark.label) + const hasMarkLabel = !!marks?.some((mark) => mark.label); - return ( - - {label && !showValue && ( + return ( + + {label && !showValue && {label}} + {label && showValue && ( + {label} - )} - {label && showValue && ( - - {label} - - - )} - - - - - - - - - ) - }, -) + + + )} + + + + + + + + + ); +}); function SliderThumbs(props: { value?: number[] }) { - const { value } = props + const { value } = props; return ( {(_, index) => ( @@ -52,31 +48,31 @@ function SliderThumbs(props: { value?: number[] }) { )} - ) + ); } interface SliderMarksProps { - marks?: Array + marks?: Array; } const SliderMarks = React.forwardRef( function SliderMarks(props, ref) { - const { marks } = props - if (!marks?.length) return null + const { marks } = props; + if (!marks?.length) return null; return ( {marks.map((mark, index) => { - const value = typeof mark === "number" ? mark : mark.value - const label = typeof mark === "number" ? undefined : mark.label + const value = typeof mark === 'number' ? mark : mark.value; + const label = typeof mark === 'number' ? undefined : mark.label; return ( {label} - ) + ); })} - ) + ); }, -) +); diff --git a/frontend/src/components/ui/tooltip.tsx b/frontend/src/components/ui/tooltip.tsx index 43a8a6c0..9f3b8ba1 100644 --- a/frontend/src/components/ui/tooltip.tsx +++ b/frontend/src/components/ui/tooltip.tsx @@ -1,46 +1,44 @@ -import { Tooltip as ChakraTooltip, Portal } from "@chakra-ui/react" -import * as React from "react" +import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react'; +import * as React from 'react'; export interface TooltipProps extends ChakraTooltip.RootProps { - showArrow?: boolean - portalled?: boolean - portalRef?: React.RefObject - content: React.ReactNode - contentProps?: ChakraTooltip.ContentProps - disabled?: boolean + showArrow?: boolean; + portalled?: boolean; + portalRef?: React.RefObject; + content: React.ReactNode; + contentProps?: ChakraTooltip.ContentProps; + disabled?: boolean; } -export const Tooltip = React.forwardRef( - function Tooltip(props, ref) { - const { - showArrow, - children, - disabled, - portalled = true, - content, - contentProps, - portalRef, - ...rest - } = props +export const Tooltip = React.forwardRef(function Tooltip(props, ref) { + const { + showArrow, + children, + disabled, + portalled = true, + content, + contentProps, + portalRef, + ...rest + } = props; - if (disabled) return children + if (disabled) return children; - return ( - - {children} - - - - {showArrow && ( - - - - )} - {content} - - - - - ) - }, -) + return ( + + {children} + + + + {showArrow && ( + + + + )} + {content} + + + + + ); +}); diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index b08070c1..382a5ec8 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -1,6 +1,6 @@ -import "@/styles/globals.css"; -import type { AppProps } from "next/app"; -import { Provider } from "@/components/ui/provider"; +import '@/styles/globals.css'; +import type { AppProps } from 'next/app'; +import { Provider } from '@/components/ui/provider'; export default function App({ Component, pageProps }: AppProps) { return (