From b1cc802571670c7ad82dff0f077463ead80f389f Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Fri, 5 Dec 2025 00:32:52 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20[=EC=8B=A4=EC=8A=B51]=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=84=9C=EB=B9=84=EC=8A=A4=20useCallback(?= =?UTF-8?q?)=EC=9C=BC=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week10/.gitignore | 26 + week10/README.md | 73 + week10/eslint.config.js | 23 + week10/index.html | 14 + week10/package-lock.json | 6058 +++++++++++++++++ week10/package.json | 52 + week10/src/App.css | 0 week10/src/App.tsx | 53 + week10/src/apis/auth.ts | 70 + week10/src/apis/axios.ts | 121 + week10/src/apis/img.ts | 23 + week10/src/apis/lps.like.ts | 36 + week10/src/apis/lps.review.ts | 82 + week10/src/apis/lps.ts | 100 + week10/src/apis/movies.ts | 30 + week10/src/apis/user.ts | 43 + week10/src/assets/ex.svg | 14 + week10/src/assets/image.png | Bin 0 -> 37144 bytes week10/src/assets/user.svg | 1 + week10/src/components/AuthButton.tsx | 70 + week10/src/components/SignupStep.tsx | 201 + week10/src/components/UserDataDisplay.tsx | 72 + week10/src/components/common/Error.tsx | 57 + week10/src/components/common/Loading.tsx | 10 + week10/src/components/common/ModalPortal.tsx | 13 + week10/src/components/common/MovieNavbar.tsx | 71 + week10/src/components/common/Pending.tsx | 19 + week10/src/components/common/Sidebar.tsx | 82 + .../components/common/toggle/OrderToggle.tsx | 32 + .../src/components/google/GoogleCallback.tsx | 28 + .../components/google/GoogleLoginButton.tsx | 24 + week10/src/components/icons/CheckIcon.tsx | 31 + week10/src/components/icons/Hamburger.tsx | 31 + week10/src/components/icons/Heart.tsx | 25 + week10/src/components/icons/Kebab.tsx | 23 + week10/src/components/icons/Pencil.tsx | 39 + week10/src/components/icons/Search.tsx | 31 + week10/src/components/icons/Setting.tsx | 32 + week10/src/components/icons/Trash.tsx | 56 + week10/src/components/icons/XIcon.tsx | 28 + week10/src/components/lp/LpCard.tsx | 47 + week10/src/components/lp/LpList.tsx | 132 + week10/src/components/lp/LpModal.tsx | 222 + .../components/lp/cart/CartDeleteModal.tsx | 49 + week10/src/components/lp/cart/CartItem.tsx | 58 + week10/src/components/lp/cart/CartList.tsx | 39 + .../src/components/lp/detail/EditSection.tsx | 101 + week10/src/components/lp/detail/Header.tsx | 100 + week10/src/components/lp/detail/LpDetail.tsx | 153 + week10/src/components/lp/detail/LpLIke.tsx | 45 + .../src/components/lp/detail/ViewSection.tsx | 53 + week10/src/components/lp/review/LpReview.tsx | 151 + .../src/components/lp/review/LpReviewCard.tsx | 117 + .../lp/review/LpReviewEditButton.tsx | 53 + .../src/components/lp/review/LpReviewList.tsx | 43 + .../components/lp/review/LpReviewSkeleton.tsx | 8 + .../components/lp/skeleton/LpCardSkeleton.tsx | 26 + week10/src/components/movie/MovieDetail.tsx | 203 + week10/src/components/movie/MovieItem.tsx | 35 + .../src/components/movie/MoviePagination.tsx | 36 + week10/src/constants/cartItems.ts | 100 + week10/src/constants/key.ts | 14 + week10/src/context/AuthContext.tsx | 95 + week10/src/hooks/auth/mutation/useLogin.ts | 56 + week10/src/hooks/auth/useAuth.ts | 22 + week10/src/hooks/auth/useLoginForm.ts | 26 + week10/src/hooks/auth/useLoginHandler.ts | 11 + .../hooks/common/sidebar/useLockBodyScroll.ts | 13 + .../hooks/common/sidebar/useOnClickOutside.ts | 19 + .../common/sidebar/useResponsiveSidebar.ts | 26 + week10/src/hooks/common/sidebar/useSidebar.ts | 27 + week10/src/hooks/common/useAutoFillSync.ts | 38 + week10/src/hooks/common/useBack.ts | 13 + week10/src/hooks/common/useDebounce.ts | 17 + week10/src/hooks/common/useGetLocalStorage.ts | 41 + week10/src/hooks/common/useThrottle.ts | 33 + week10/src/hooks/fetch/useCustomFetch.ts | 45 + week10/src/hooks/fetch/useTanstackFetch.ts | 123 + week10/src/hooks/lps/mutation/useLike.ts | 150 + week10/src/hooks/lps/mutation/usePatchLp.ts | 72 + .../src/hooks/lps/mutation/usePatchReview.ts | 68 + week10/src/hooks/lps/mutation/usePostLp.ts | 38 + .../src/hooks/lps/mutation/usePostReview.ts | 33 + week10/src/hooks/lps/query/useGetLpDetail.ts | 19 + week10/src/hooks/lps/query/useGetLpList.ts | 26 + week10/src/hooks/lps/query/useGetLpReview.ts | 26 + week10/src/hooks/useAutoFillSync.ts | 38 + week10/src/hooks/useBack.ts | 13 + week10/src/hooks/useCustomFetch.ts | 45 + week10/src/hooks/useGetLocalStorage.ts | 38 + week10/src/hooks/user/useDeleteUser.ts | 26 + week10/src/hooks/user/useGetUser.ts | 23 + week10/src/hooks/user/usePatchUser.ts | 40 + week10/src/index.css | 1 + week10/src/layouts/BaseLayout.tsx | 62 + week10/src/layouts/NotFound.tsx | 4 + week10/src/main.tsx | 5 + week10/src/pages/HomePage.tsx | 62 + week10/src/pages/Login.tsx | 80 + week10/src/pages/MyPage.tsx | 190 + week10/src/pages/Signup.tsx | 23 + week10/src/pages/lp/LpDetailPage.tsx | 30 + week10/src/pages/lp/LpShoppingPage.tsx | 9 + week10/src/pages/movie/Movies.tsx | 50 + week10/src/pages/movie/MoviesHome.tsx | 5 + week10/src/router/router.tsx | 75 + week10/src/store/useCartStore.ts | 91 + week10/src/store/useModalStore.ts | 50 + week10/src/store/useSearchStore.ts | 26 + week10/src/styles/loader.css | 45 + week10/src/types/auth.ts | 38 + week10/src/types/common/common.ts | 6 + week10/src/types/common/enum.ts | 4 + week10/src/types/lps/cart.ts | 14 + week10/src/types/lps/like.ts | 24 + week10/src/types/lps/lp.ts | 74 + week10/src/types/lps/review.ts | 32 + week10/src/types/movie.ts | 68 + week10/src/types/user.ts | 25 + week10/src/utils/localStorage.ts | 44 + week10/src/utils/timeFormat.ts | 20 + week10/src/utils/validate.ts | 29 + week10/src/utils/validateSchema.ts | 43 + week10/tailwind.config.ts | 0 week10/tsconfig.app.json | 25 + week10/tsconfig.app.tsbuildinfo | 1 + week10/tsconfig.json | 7 + week10/tsconfig.node.json | 26 + week10/vite.config.ts | 8 + 129 files changed, 12135 insertions(+) create mode 100644 week10/.gitignore create mode 100644 week10/README.md create mode 100644 week10/eslint.config.js create mode 100644 week10/index.html create mode 100644 week10/package-lock.json create mode 100644 week10/package.json create mode 100644 week10/src/App.css create mode 100644 week10/src/App.tsx create mode 100644 week10/src/apis/auth.ts create mode 100644 week10/src/apis/axios.ts create mode 100644 week10/src/apis/img.ts create mode 100644 week10/src/apis/lps.like.ts create mode 100644 week10/src/apis/lps.review.ts create mode 100644 week10/src/apis/lps.ts create mode 100644 week10/src/apis/movies.ts create mode 100644 week10/src/apis/user.ts create mode 100644 week10/src/assets/ex.svg create mode 100644 week10/src/assets/image.png create mode 100644 week10/src/assets/user.svg create mode 100644 week10/src/components/AuthButton.tsx create mode 100644 week10/src/components/SignupStep.tsx create mode 100644 week10/src/components/UserDataDisplay.tsx create mode 100644 week10/src/components/common/Error.tsx create mode 100644 week10/src/components/common/Loading.tsx create mode 100644 week10/src/components/common/ModalPortal.tsx create mode 100644 week10/src/components/common/MovieNavbar.tsx create mode 100644 week10/src/components/common/Pending.tsx create mode 100644 week10/src/components/common/Sidebar.tsx create mode 100644 week10/src/components/common/toggle/OrderToggle.tsx create mode 100644 week10/src/components/google/GoogleCallback.tsx create mode 100644 week10/src/components/google/GoogleLoginButton.tsx create mode 100644 week10/src/components/icons/CheckIcon.tsx create mode 100644 week10/src/components/icons/Hamburger.tsx create mode 100644 week10/src/components/icons/Heart.tsx create mode 100644 week10/src/components/icons/Kebab.tsx create mode 100644 week10/src/components/icons/Pencil.tsx create mode 100644 week10/src/components/icons/Search.tsx create mode 100644 week10/src/components/icons/Setting.tsx create mode 100644 week10/src/components/icons/Trash.tsx create mode 100644 week10/src/components/icons/XIcon.tsx create mode 100644 week10/src/components/lp/LpCard.tsx create mode 100644 week10/src/components/lp/LpList.tsx create mode 100644 week10/src/components/lp/LpModal.tsx create mode 100644 week10/src/components/lp/cart/CartDeleteModal.tsx create mode 100644 week10/src/components/lp/cart/CartItem.tsx create mode 100644 week10/src/components/lp/cart/CartList.tsx create mode 100644 week10/src/components/lp/detail/EditSection.tsx create mode 100644 week10/src/components/lp/detail/Header.tsx create mode 100644 week10/src/components/lp/detail/LpDetail.tsx create mode 100644 week10/src/components/lp/detail/LpLIke.tsx create mode 100644 week10/src/components/lp/detail/ViewSection.tsx create mode 100644 week10/src/components/lp/review/LpReview.tsx create mode 100644 week10/src/components/lp/review/LpReviewCard.tsx create mode 100644 week10/src/components/lp/review/LpReviewEditButton.tsx create mode 100644 week10/src/components/lp/review/LpReviewList.tsx create mode 100644 week10/src/components/lp/review/LpReviewSkeleton.tsx create mode 100644 week10/src/components/lp/skeleton/LpCardSkeleton.tsx create mode 100644 week10/src/components/movie/MovieDetail.tsx create mode 100644 week10/src/components/movie/MovieItem.tsx create mode 100644 week10/src/components/movie/MoviePagination.tsx create mode 100644 week10/src/constants/cartItems.ts create mode 100644 week10/src/constants/key.ts create mode 100644 week10/src/context/AuthContext.tsx create mode 100644 week10/src/hooks/auth/mutation/useLogin.ts create mode 100644 week10/src/hooks/auth/useAuth.ts create mode 100644 week10/src/hooks/auth/useLoginForm.ts create mode 100644 week10/src/hooks/auth/useLoginHandler.ts create mode 100644 week10/src/hooks/common/sidebar/useLockBodyScroll.ts create mode 100644 week10/src/hooks/common/sidebar/useOnClickOutside.ts create mode 100644 week10/src/hooks/common/sidebar/useResponsiveSidebar.ts create mode 100644 week10/src/hooks/common/sidebar/useSidebar.ts create mode 100644 week10/src/hooks/common/useAutoFillSync.ts create mode 100644 week10/src/hooks/common/useBack.ts create mode 100644 week10/src/hooks/common/useDebounce.ts create mode 100644 week10/src/hooks/common/useGetLocalStorage.ts create mode 100644 week10/src/hooks/common/useThrottle.ts create mode 100644 week10/src/hooks/fetch/useCustomFetch.ts create mode 100644 week10/src/hooks/fetch/useTanstackFetch.ts create mode 100644 week10/src/hooks/lps/mutation/useLike.ts create mode 100644 week10/src/hooks/lps/mutation/usePatchLp.ts create mode 100644 week10/src/hooks/lps/mutation/usePatchReview.ts create mode 100644 week10/src/hooks/lps/mutation/usePostLp.ts create mode 100644 week10/src/hooks/lps/mutation/usePostReview.ts create mode 100644 week10/src/hooks/lps/query/useGetLpDetail.ts create mode 100644 week10/src/hooks/lps/query/useGetLpList.ts create mode 100644 week10/src/hooks/lps/query/useGetLpReview.ts create mode 100644 week10/src/hooks/useAutoFillSync.ts create mode 100644 week10/src/hooks/useBack.ts create mode 100644 week10/src/hooks/useCustomFetch.ts create mode 100644 week10/src/hooks/useGetLocalStorage.ts create mode 100644 week10/src/hooks/user/useDeleteUser.ts create mode 100644 week10/src/hooks/user/useGetUser.ts create mode 100644 week10/src/hooks/user/usePatchUser.ts create mode 100644 week10/src/index.css create mode 100644 week10/src/layouts/BaseLayout.tsx create mode 100644 week10/src/layouts/NotFound.tsx create mode 100644 week10/src/main.tsx create mode 100644 week10/src/pages/HomePage.tsx create mode 100644 week10/src/pages/Login.tsx create mode 100644 week10/src/pages/MyPage.tsx create mode 100644 week10/src/pages/Signup.tsx create mode 100644 week10/src/pages/lp/LpDetailPage.tsx create mode 100644 week10/src/pages/lp/LpShoppingPage.tsx create mode 100644 week10/src/pages/movie/Movies.tsx create mode 100644 week10/src/pages/movie/MoviesHome.tsx create mode 100644 week10/src/router/router.tsx create mode 100644 week10/src/store/useCartStore.ts create mode 100644 week10/src/store/useModalStore.ts create mode 100644 week10/src/store/useSearchStore.ts create mode 100644 week10/src/styles/loader.css create mode 100644 week10/src/types/auth.ts create mode 100644 week10/src/types/common/common.ts create mode 100644 week10/src/types/common/enum.ts create mode 100644 week10/src/types/lps/cart.ts create mode 100644 week10/src/types/lps/like.ts create mode 100644 week10/src/types/lps/lp.ts create mode 100644 week10/src/types/lps/review.ts create mode 100644 week10/src/types/movie.ts create mode 100644 week10/src/types/user.ts create mode 100644 week10/src/utils/localStorage.ts create mode 100644 week10/src/utils/timeFormat.ts create mode 100644 week10/src/utils/validate.ts create mode 100644 week10/src/utils/validateSchema.ts create mode 100644 week10/tailwind.config.ts create mode 100644 week10/tsconfig.app.json create mode 100644 week10/tsconfig.app.tsbuildinfo create mode 100644 week10/tsconfig.json create mode 100644 week10/tsconfig.node.json create mode 100644 week10/vite.config.ts diff --git a/week10/.gitignore b/week10/.gitignore new file mode 100644 index 00000000..3b0b4037 --- /dev/null +++ b/week10/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env \ No newline at end of file diff --git a/week10/README.md b/week10/README.md new file mode 100644 index 00000000..4866cf0f --- /dev/null +++ b/week10/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/week10/eslint.config.js b/week10/eslint.config.js new file mode 100644 index 00000000..b19330b1 --- /dev/null +++ b/week10/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/week10/index.html b/week10/index.html new file mode 100644 index 00000000..cf62eda3 --- /dev/null +++ b/week10/index.html @@ -0,0 +1,14 @@ + + + + + + + 돌려라돌려 + + +
+ + + + diff --git a/week10/package-lock.json b/week10/package-lock.json new file mode 100644 index 00000000..c6b5535b --- /dev/null +++ b/week10/package-lock.json @@ -0,0 +1,6058 @@ +{ + "name": "week03", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "week03", + "version": "0.0.0", + "dependencies": { + "@hookform/devtools": "^4.4.0", + "@hookform/resolvers": "^5.2.2", + "@reduxjs/toolkit": "^2.11.0", + "@svgr/cli": "^8.1.0", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/vite": "^4.1.13", + "@tanstack/react-query": "^5.90.6", + "@tanstack/react-query-devtools": "^5.90.2", + "axios": "^1.12.2", + "clsx": "^2.1.1", + "framer-motion": "^12.23.22", + "lodash": "^4.17.21", + "react": "^19.1.1", + "react-dom": "^19.2.0", + "react-error-boundary": "^6.0.0", + "react-hook-form": "^7.64.0", + "react-hot-toast": "^2.6.0", + "react-icons": "^5.5.0", + "react-intersection-observer": "^10.0.0", + "react-redux": "^9.2.0", + "react-router-dom": "^7.9.1", + "react-use": "^17.6.0", + "tailwindcss": "^4.1.13", + "zod": "^4.1.12", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.3", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.4.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.44.0", + "vite": "^7.1.7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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/babel-plugin/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/@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.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "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", + "peer": true, + "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/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/@esbuild/aix-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hookform/devtools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.4.0.tgz", + "integrity": "sha512-Mtlic+uigoYBPXlfvPBfiYYUZuyMrD3pTjDpVIhL6eCZTvQkHsKBSKeZCvXWUZr8fqrkzDg27N+ZuazLKq6Vmg==", + "license": "MIT", + "dependencies": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12", + "use-deep-compare-effect": "^1.8.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19", + "react-dom": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/@hookform/resolvers": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.2.tgz", + "integrity": "sha512-A/IxlMLShx3KjV/HeTcTfaMxdwy690+L/ZADoeaTltLx+CVuzkeVIPuybK3jrRfw7YZnmdKsVVHAlEPIAEUNlA==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.0.tgz", + "integrity": "sha512-hBjYg0aaRL1O2Z0IqWhnTLytnjDIxekmRxm1snsHjHaKVmIF1HiImWqsq+PuEbn6zdMlkIj9WofK1vR8jjx+Xw==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz", + "integrity": "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz", + "integrity": "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz", + "integrity": "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz", + "integrity": "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz", + "integrity": "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz", + "integrity": "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz", + "integrity": "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz", + "integrity": "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz", + "integrity": "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz", + "integrity": "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz", + "integrity": "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz", + "integrity": "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz", + "integrity": "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz", + "integrity": "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz", + "integrity": "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz", + "integrity": "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz", + "integrity": "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz", + "integrity": "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz", + "integrity": "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz", + "integrity": "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz", + "integrity": "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz", + "integrity": "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz", + "integrity": "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/cli": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/cli/-/cli-8.1.0.tgz", + "integrity": "sha512-SnlaLspB610XFXvs3PmhzViHErsXp0yIy4ERyZlHDlO1ro2iYtHMWYk2mztdLD/lBjiA4ZXe4RePON3qU/Tc4A==", + "license": "MIT", + "dependencies": { + "@svgr/core": "8.1.0", + "@svgr/plugin-jsx": "8.1.0", + "@svgr/plugin-prettier": "8.1.0", + "@svgr/plugin-svgo": "8.1.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "commander": "^9.4.1", + "dashify": "^2.0.0", + "glob": "^8.0.3", + "snake-case": "^3.0.4" + }, + "bin": { + "svgr": "bin/svgr" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-prettier": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-prettier/-/plugin-prettier-8.1.0.tgz", + "integrity": "sha512-o4/uFI8G64tAjBZ4E7gJfH+VP7Qi3T0+M4WnIsP91iFnGPqs5WvPDkpZALXPiyWEtzfYs1Rmwy1Zdfu8qoZuKw==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.3.1", + "prettier": "^2.8.7" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", + "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.1.3", + "deepmerge": "^4.3.1", + "svgo": "^3.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@tailwindcss/line-clamp": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", + "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.13.tgz", + "integrity": "sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "tailwindcss": "4.1.13" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.90.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.6.tgz", + "integrity": "sha512-AnZSLF26R8uX+tqb/ivdrwbVdGemdEDm1Q19qM6pry6eOZ6bEYiY7mWhzXT1YDIPTNEVcZ5kYP9nWjoxDLiIVw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.90.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.90.1.tgz", + "integrity": "sha512-GtINOPjPUH0OegJExZ70UahT9ykmAhmtNVcmtdnOZbxLwT7R5OmRztR5Ahe3/Cu7LArEmR6/588tAycuaWb1xQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.90.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.6.tgz", + "integrity": "sha512-gB1sljYjcobZKxjPbKSa31FUTyr+ROaBdoH+wSSs9Dk+yDCmMs+TkTV3PybRRVLC7ax7q0erJ9LvRWnMktnRAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tanstack/query-core": "5.90.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.90.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.90.2.tgz", + "integrity": "sha512-vAXJzZuBXtCQtrY3F/yUNJCV4obT/A/n81kb3+YqLbro5Z2+phdAbceO+deU3ywPw8B42oyJlp4FhO0SoivDFQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-devtools": "5.90.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.90.2", + "react": "^18 || ^19" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/js-cookie": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", + "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "license": "MIT" + }, + "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/react": { + "version": "19.1.13", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz", + "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", + "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz", + "integrity": "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/type-utils": "8.44.1", + "@typescript-eslint/utils": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.44.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", + "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.1.tgz", + "integrity": "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.44.1", + "@typescript-eslint/types": "^8.44.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz", + "integrity": "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz", + "integrity": "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz", + "integrity": "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/utils": "8.44.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", + "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz", + "integrity": "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.44.1", + "@typescript-eslint/tsconfig-utils": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.1.tgz", + "integrity": "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz", + "integrity": "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.44.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.3.tgz", + "integrity": "sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.35", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@xobotyi/scrollbar-width": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "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", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", + "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "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", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-in-js-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", + "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "license": "MIT", + "dependencies": { + "hyphenate-style-name": "^1.0.3" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT", + "peer": true + }, + "node_modules/dashify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dashify/-/dashify-2.0.0.tgz", + "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.223", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.223.tgz", + "integrity": "sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ==", + "license": "ISC" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.36.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.21.tgz", + "integrity": "sha512-MWDWTtNC4voTcWDxXbdmBNe8b/TxfxRFUL6hXgKWJjN9c1AagYEmpiFWBWzDw+5H3SulWUe1pJKTnoSdmk88UA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", + "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" + }, + "node_modules/fastest-stable-stringify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", + "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "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", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/framer-motion": { + "version": "12.23.22", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.22.tgz", + "integrity": "sha512-ZgGvdxXCw55ZYvhoZChTlG6pUuehecgvEAJz0BHoC5pQKW1EC5xf1Mul1ej5+ai+pVY0pylyFfdl45qnM1/GsA==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.21", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/goober": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", + "peerDependencies": { + "csstype": "^3.0.10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "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/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.0.1.tgz", + "integrity": "sha512-naDCyggtcBWANtIrjQEajhhBEuL9b0Zg4zmlWK2CzS6xCWSE39/vvf4LqnMjUAWHBhot4m9MHCM/Z+mfWhUkiA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inline-style-prefixer": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", + "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", + "license": "MIT", + "dependencies": { + "css-in-js-utils": "^3.1.0" + } + }, + "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-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz", + "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "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", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "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", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/little-state-machine": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.8.1.tgz", + "integrity": "sha512-liPHqaWMQ7rzZryQUDnbZ1Gclnnai3dIyaJ0nAgwZRXMzqbYrydrlCI0NDojRUbE5VYh5vu6hygEUZiH77nQkQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/motion-dom": { + "version": "12.23.21", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.21.tgz", + "integrity": "sha512-5xDXx/AbhrfgsQmSE7YESMn4Dpo6x5/DTZ4Iyy4xqDvVHWvFVoV+V2Ri2S/ksx+D40wrZ7gPYiMWshkdoqNgNQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nano-css": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", + "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==", + "license": "Unlicense", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "css-tree": "^1.1.2", + "csstype": "^3.1.2", + "fastest-stable-stringify": "^2.0.2", + "inline-style-prefixer": "^7.0.1", + "rtl-css-js": "^1.16.1", + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/nano-css/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nano-css/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/nano-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nano-css/node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "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==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "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", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "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/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/react-error-boundary": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.0.0.tgz", + "integrity": "sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "peerDependencies": { + "react": ">=16.13.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.64.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.64.0.tgz", + "integrity": "sha512-fnN+vvTiMLnRqKNTVhDysdrUay0kUUAymQnFIznmgDvapjveUWOOPqMNzPg+A+0yf9DuE2h6xzBjN1s+Qx8wcg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-hot-toast": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.6.0.tgz", + "integrity": "sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.3", + "goober": "^2.1.16" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-intersection-observer": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-10.0.0.tgz", + "integrity": "sha512-JJRgcnFQoVXmbE5+GXr1OS1NDD1gHk0HyfpLcRf0575IbJz+io8yzs4mWVlfaqOQq1FiVjLvuYAdEEcrrCfveg==", + "license": "MIT", + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.1.tgz", + "integrity": "sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.1.tgz", + "integrity": "sha512-U9WBQssBE9B1vmRjo9qTM7YRzfZ3lUxESIZnsf4VjR/lXYz9MHjvOxHzr/aUm4efpktbVOrF09rL/y4VHa8RMw==", + "license": "MIT", + "dependencies": { + "react-router": "7.9.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-simple-animate": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.5.3.tgz", + "integrity": "sha512-Ob+SmB5J1tXDEZyOe2Hf950K4M8VaWBBmQ3cS2BUnTORqHjhK0iKG8fB+bo47ZL15t8d3g/Y0roiqH05UBjG7A==", + "license": "MIT", + "peerDependencies": { + "react-dom": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-universal-interface": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", + "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", + "peerDependencies": { + "react": "*", + "tslib": "*" + } + }, + "node_modules/react-use": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.6.0.tgz", + "integrity": "sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==", + "license": "Unlicense", + "dependencies": { + "@types/js-cookie": "^2.2.6", + "@xobotyi/scrollbar-width": "^1.9.5", + "copy-to-clipboard": "^3.3.1", + "fast-deep-equal": "^3.1.3", + "fast-shallow-equal": "^1.0.0", + "js-cookie": "^2.2.1", + "nano-css": "^5.6.2", + "react-universal-interface": "^0.6.2", + "resize-observer-polyfill": "^1.5.1", + "screenfull": "^5.1.0", + "set-harmonic-interval": "^1.0.1", + "throttle-debounce": "^3.0.1", + "ts-easing": "^0.2.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT", + "peer": true + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.52.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", + "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.2", + "@rollup/rollup-android-arm64": "4.52.2", + "@rollup/rollup-darwin-arm64": "4.52.2", + "@rollup/rollup-darwin-x64": "4.52.2", + "@rollup/rollup-freebsd-arm64": "4.52.2", + "@rollup/rollup-freebsd-x64": "4.52.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", + "@rollup/rollup-linux-arm-musleabihf": "4.52.2", + "@rollup/rollup-linux-arm64-gnu": "4.52.2", + "@rollup/rollup-linux-arm64-musl": "4.52.2", + "@rollup/rollup-linux-loong64-gnu": "4.52.2", + "@rollup/rollup-linux-ppc64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-gnu": "4.52.2", + "@rollup/rollup-linux-riscv64-musl": "4.52.2", + "@rollup/rollup-linux-s390x-gnu": "4.52.2", + "@rollup/rollup-linux-x64-gnu": "4.52.2", + "@rollup/rollup-linux-x64-musl": "4.52.2", + "@rollup/rollup-openharmony-arm64": "4.52.2", + "@rollup/rollup-win32-arm64-msvc": "4.52.2", + "@rollup/rollup-win32-ia32-msvc": "4.52.2", + "@rollup/rollup-win32-x64-gnu": "4.52.2", + "@rollup/rollup-win32-x64-msvc": "4.52.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/rtl-css-js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", + "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/screenfull": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", + "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-harmonic-interval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", + "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", + "license": "Unlicense", + "engines": { + "node": ">=6.9" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "license": "MIT", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", + "license": "MIT", + "peer": true + }, + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-easing": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", + "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==", + "license": "Unlicense" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.44.1.tgz", + "integrity": "sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.44.1", + "@typescript-eslint/parser": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/utils": "8.44.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz", + "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.8.tgz", + "integrity": "sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/week10/package.json b/week10/package.json new file mode 100644 index 00000000..6f56e9de --- /dev/null +++ b/week10/package.json @@ -0,0 +1,52 @@ +{ + "name": "week03", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@hookform/devtools": "^4.4.0", + "@hookform/resolvers": "^5.2.2", + "@reduxjs/toolkit": "^2.11.0", + "@svgr/cli": "^8.1.0", + "@tailwindcss/line-clamp": "^0.4.4", + "@tailwindcss/vite": "^4.1.13", + "@tanstack/react-query": "^5.90.6", + "@tanstack/react-query-devtools": "^5.90.2", + "axios": "^1.12.2", + "clsx": "^2.1.1", + "framer-motion": "^12.23.22", + "lodash": "^4.17.21", + "react": "^19.1.1", + "react-dom": "^19.2.0", + "react-error-boundary": "^6.0.0", + "react-hook-form": "^7.64.0", + "react-hot-toast": "^2.6.0", + "react-icons": "^5.5.0", + "react-intersection-observer": "^10.0.0", + "react-redux": "^9.2.0", + "react-router-dom": "^7.9.1", + "react-use": "^17.6.0", + "tailwindcss": "^4.1.13", + "zod": "^4.1.12", + "zustand": "^5.0.8" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.3", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.4.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.44.0", + "vite": "^7.1.7" + } +} diff --git a/week10/src/App.css b/week10/src/App.css new file mode 100644 index 00000000..e69de29b diff --git a/week10/src/App.tsx b/week10/src/App.tsx new file mode 100644 index 00000000..6fed2498 --- /dev/null +++ b/week10/src/App.tsx @@ -0,0 +1,53 @@ +import { RouterProvider } from "react-router-dom"; +import "./App.css"; +import router from "./router/router"; +import { AuthProvider } from "./context/AuthContext"; +import { Toaster } from "react-hot-toast"; +import { + QueryClient, + QueryClientProvider, + QueryErrorResetBoundary, +} from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { Suspense } from "react"; +import Loader from "./components/common/Loading"; +import { ErrorBoundary } from "react-error-boundary"; +import Error from "./components/common/Error"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + throwOnError: true, + }, + }, +}); + +function App() { + return ( + + {/* 에러 바운더리 컴포넌트 사용 -> 공통 에러 처리 컴포넌트 */} + + {({ reset }) => ( + + + {import.meta.env.DEV && ( + + )} + + {/* 컴포넌트 로딩 중 보여줄 컴포넌트 */} + }> + + + + + )} + + + ); +} + +export default App; diff --git a/week10/src/apis/auth.ts b/week10/src/apis/auth.ts new file mode 100644 index 00000000..4e113190 --- /dev/null +++ b/week10/src/apis/auth.ts @@ -0,0 +1,70 @@ +import type { + ReqeustSignupDto, + RequestLoginDto, + ResponseLoginDto, + ResponseSignupDto, +} from "../types/auth"; +import { axiosInstance } from "./axios"; + +// POST v1/auth/signup +export const postSignup = async ( + body: ReqeustSignupDto +): Promise => { + try { + const { data } = await axiosInstance.post( + `v1/auth/signup`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// POST v1/auth/signin +export const postLogin = async ( + body: RequestLoginDto +): Promise => { + try { + const { data } = await axiosInstance.post( + `v1/auth/signin`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// POST v1/auth/signout +export const postLogout = async () => { + try { + const { data } = await axiosInstance.post( + `v1/auth/signout` + ); + + return data; + } catch (e) { + console.error(e); + } +}; + +// POST v1/auth/refresh +export const postRefresh = async ( + refreshToken: string +): Promise => { + try { + const { data } = await axiosInstance.post( + `v1/auth/refresh`, + { + refresh: refreshToken, + } + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/apis/axios.ts b/week10/src/apis/axios.ts new file mode 100644 index 00000000..791a0390 --- /dev/null +++ b/week10/src/apis/axios.ts @@ -0,0 +1,121 @@ +import axios, { type InternalAxiosRequestConfig } from "axios"; +// import { type AxiosResponse } from "axios"; +import { LOCAL_STORAGE_KEY } from "../constants/key"; +import { + getLocalStorageItem, + setLocalStorageItem, + removeLocalStorageItem, +} from "../utils/localStorage"; +import { postRefresh } from "./auth"; +// import toast from "react-hot-toast"; + +// 요청 재시도를 나타내는 retry 플래그 +interface CustomInternalAxiosRequestConfig extends InternalAxiosRequestConfig { + _retry?: boolean; +} + +// 전역 변수로 refresh 요청의 Promise를 저장해서 중복 요청을 방지한다. +let refreshPromise: Promise | null = null; + +const movieToken = import.meta.env.VITE_MOVIE_API_KEY; + +export const api = axios.create({ + baseURL: `https://api.themoviedb.org/3`, + headers: { + Authorization: `Bearer ${movieToken}`, + }, +}); + +export const axiosInstance = axios.create({ + baseURL: import.meta.env.VITE_SERVER_API_URL, + headers: { + Authorization: `Bearer ${localStorage.getItem( + LOCAL_STORAGE_KEY.accessToken + )}`, + }, +}); + +// 요청 인터셉터 : 요청 전에 매번 최신 토큰을 꺼내서 Authorization 헤더에 저장 +axiosInstance.interceptors.request.use( + (config) => { + const accessToken = localStorage.getItem(LOCAL_STORAGE_KEY.accessToken); + console.log("accessToken", accessToken); + + // AccessToken이 존재하면 Authorization 헤더에 추가 + if (accessToken) { + config.headers = config.headers || {}; + config.headers.Authorization = `Bearer ${accessToken}`; + } else { + console.warn("AccessToken이 없습니다."); + } + + return config; + }, + (error) => { + return Promise.reject(error); + } +); + +// // 응답 인터셉터 : 401 에러 발생 => refreshToken -> accessToken 재발급 -> 요청 재시도 (토큰 갱신) +axiosInstance.interceptors.response.use( + (response) => response, // 요청 정상 응답 + async (error) => { + const originalRequest: CustomInternalAxiosRequestConfig = error.config; + + // 401 에러이면서, 재시도 요청을 하지 않은 경우 + if ( + error.response && + error.response.status === 401 && + !originalRequest._retry + ) { + if (originalRequest.url !== "/v1/auth/refresh") { + removeLocalStorageItem(LOCAL_STORAGE_KEY.accessToken); + removeLocalStorageItem(LOCAL_STORAGE_KEY.refreshToken); + window.location.href = "/login"; + return Promise.reject(error); + } + + originalRequest._retry = true; + + // 이미 refresh 요청이 진행중이면 그 Promise를 재사용 + if (!refreshPromise) { + refreshPromise = (async () => { + const refreshToken = getLocalStorageItem( + LOCAL_STORAGE_KEY.refreshToken + ); + + const { data } = await postRefresh(refreshToken as string); + setLocalStorageItem(LOCAL_STORAGE_KEY.accessToken, data.accessToken); + setLocalStorageItem( + LOCAL_STORAGE_KEY.refreshToken, + data.refreshToken + ); + + return data.accessToken; + })() + .catch((error) => { + console.error(error); + removeLocalStorageItem(LOCAL_STORAGE_KEY.accessToken); + removeLocalStorageItem(LOCAL_STORAGE_KEY.refreshToken); + + return null; + }) + .finally(() => { + refreshPromise = null; + }); + // refreshPromise가 들어올때까지 기다림 + const newAccessToken = await refreshPromise; + if (newAccessToken) { + // refreshPromise가 들어오면 새로운 accessToken이 Auth 헤더로 Bearer 토큰 전달 + originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; + // 업데이트 된 요청을 재시도 + return axiosInstance.request(originalRequest); + } else { + return Promise.reject(error); + } + } + } + // 401 에러가 아닌 경우에 오류를 그대로 반환 + return Promise.reject(error); + } +); diff --git a/week10/src/apis/img.ts b/week10/src/apis/img.ts new file mode 100644 index 00000000..f71dea4b --- /dev/null +++ b/week10/src/apis/img.ts @@ -0,0 +1,23 @@ +import type { CommonResponse } from "./../types/common/common"; +import { axiosInstance } from "./axios"; + +// 이미지 업로드 응답 타입 +interface ResponseUploadImageDto extends CommonResponse<{ imageUrl: string }> { + data: { imageUrl: string }; +} + +// 이미지 업로드 +export const uploadImage = async (file: File): Promise => { + const formData = new FormData(); + formData.append("file", file); + try { + const { data } = await axiosInstance.post( + "/v1/uploads", + formData + ); + return data.data.imageUrl; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/apis/lps.like.ts b/week10/src/apis/lps.like.ts new file mode 100644 index 00000000..05123f6e --- /dev/null +++ b/week10/src/apis/lps.like.ts @@ -0,0 +1,36 @@ +import type { + RequestCreateLikeDto, + ResponseCreateLikeDto, + ResponseDeleteLikeDto, + RequestDeleteLikeDto, +} from "../types/lps/like"; +import { axiosInstance } from "./axios"; + +// 좋아요 생성 +export const postLike = async ( + body: RequestCreateLikeDto +): Promise => { + try { + const { data } = await axiosInstance.post( + `/v1/lps/${body.lpId}/likes`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// 좋아요 삭제 +export const deleteLike = async (body: RequestDeleteLikeDto) => { + try { + const { data } = await axiosInstance.delete( + `/v1/lps/${body.lpId}/likes` + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/apis/lps.review.ts b/week10/src/apis/lps.review.ts new file mode 100644 index 00000000..17f34fac --- /dev/null +++ b/week10/src/apis/lps.review.ts @@ -0,0 +1,82 @@ +import type { Order } from "../types/common/enum"; +import type { + ResponseCreateReviewDto, + ResponseDeleteReviewDto, + ResponsePatchReviewDto, + ResponseReviewListDto, +} from "../types/lps/review"; +import { axiosInstance } from "./axios"; + +// 리뷰 리스트 조회 +export const getReviewList = async ( + lpId: number, + cursor: number, + limit: number, + order: Order +) => { + try { + const { data } = await axiosInstance.get( + `/v1/lps/${lpId}/comments`, + { + params: { + cursor, + limit, + order, + }, + } + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +export interface PostPatchReviewBody { + content: string; +} + +// 리뷰 작성 +export const postReview = async (lpId: number, body: PostPatchReviewBody) => { + try { + const { data } = await axiosInstance.post( + `v1/lps/${lpId}/comments`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// 리뷰 수정 +export const patchReview = async ( + lpId: number, + commentId: number, + body: PostPatchReviewBody +) => { + try { + const { data } = await axiosInstance.patch( + `v1/lps/${lpId}/comments/${commentId}`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// 리뷰 삭제 +export const deleteReview = async (lpId: number, commentId: number) => { + try { + const { data } = await axiosInstance.delete( + `v1/lps/${lpId}/comments/${commentId}` + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/apis/lps.ts b/week10/src/apis/lps.ts new file mode 100644 index 00000000..b8798fe6 --- /dev/null +++ b/week10/src/apis/lps.ts @@ -0,0 +1,100 @@ +import type { Order } from "../types/common/enum"; +import type { + RequestCreateLpDto, + RequestUpdateLpDto, + ResponseCreateLpDto, + ResponseDeleteLpDto, + ResponseLpDetailDto, + ResponseLpListDto, + ResponseUpdateLpDto, +} from "../types/lps/lp"; +import { axiosInstance } from "./axios"; + +interface GetLpListParams { + cursor: number | null; + limit: number; + search: string | null; + order: Order; +} + +// LP 리스트 조회 +export const getLpList = async ({ + cursor, + limit, + search, + order, +}: GetLpListParams) => { + try { + const { data } = await axiosInstance.get(`/v1/lps`, { + params: { + cursor, + limit, + search, + order, + }, + }); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// LP 상세 조회 +export const getLpDetail = async (lpId: number) => { + try { + const { data } = await axiosInstance.get( + `/v1/lps/${lpId}` + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// LP 생성 +export const createLp = async ( + body: RequestCreateLpDto +): Promise => { + try { + const { data } = await axiosInstance.post( + `/v1/lps`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// LP 수정 +export const updateLp = async ( + lpId: number, + body: RequestUpdateLpDto +): Promise => { + try { + const { data } = await axiosInstance.patch( + `/v1/lps/${lpId}`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// LP 삭제 +export const deleteLp = async (lpId: number) => { + try { + const { data } = await axiosInstance.delete( + `/v1/lps/${lpId}` + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/apis/movies.ts b/week10/src/apis/movies.ts new file mode 100644 index 00000000..13693155 --- /dev/null +++ b/week10/src/apis/movies.ts @@ -0,0 +1,30 @@ +import type { + ResponseMovie, + ResponseMovieCredits, + ResponseMovieDetail, +} from "../types/movie"; +import { api } from "./axios"; + +// Movie 조회 +export const getMovies = async (category: string, page: number) => { + const { data } = await api.get( + `/movie/${category}?language=ko-KR&page=${page}` + ); + return data; +}; + +// Movie Detail 조회 +export const getMovieDetails = async (movieId: number) => { + const { data } = await api.get( + `/movie/${movieId}?language=ko-KO` + ); + return { data }; +}; + +// Movie Credits 조회 +export const getMovieCredits = async (movieId: number) => { + const { data } = await api.get( + `/movie/${movieId}/credits?language=ko-KO` + ); + return { data }; +}; diff --git a/week10/src/apis/user.ts b/week10/src/apis/user.ts new file mode 100644 index 00000000..32af0184 --- /dev/null +++ b/week10/src/apis/user.ts @@ -0,0 +1,43 @@ +import type { + RequestPatchUserDto, + ResponsePatchUserDto, + ResponseUserDto, +} from "../types/user"; +import { axiosInstance } from "./axios"; + +// GET v1/users/me +export const getUser = async () => { + try { + const { data } = await axiosInstance.get(`v1/users/me`); + return data; + } catch (e) { + console.error(e); + } +}; + +// 유저 정보 수정 +export const patchUser = async ( + body: RequestPatchUserDto +): Promise => { + try { + const { data } = await axiosInstance.patch( + `v1/users`, + body + ); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; + +// 유저 탈퇴 +export const deleteUser = async () => { + try { + const { data } = await axiosInstance.delete(`v1/users`); + return data; + } catch (e) { + console.error(e); + throw e; + } +}; diff --git a/week10/src/assets/ex.svg b/week10/src/assets/ex.svg new file mode 100644 index 00000000..74f48b03 --- /dev/null +++ b/week10/src/assets/ex.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/week10/src/assets/image.png b/week10/src/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..e972bf31e1150f3eb74ae3d8b4de329d8bfd9e48 GIT binary patch literal 37144 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 N002ovPDHLkV1jca-je_T literal 0 HcmV?d00001 diff --git a/week10/src/assets/user.svg b/week10/src/assets/user.svg new file mode 100644 index 00000000..2c78e32b --- /dev/null +++ b/week10/src/assets/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/week10/src/components/AuthButton.tsx b/week10/src/components/AuthButton.tsx new file mode 100644 index 00000000..b8a8478e --- /dev/null +++ b/week10/src/components/AuthButton.tsx @@ -0,0 +1,70 @@ +import { useLocation, useNavigate } from "react-router-dom"; +import { useAuth } from "../hooks/auth/useAuth"; +import { useGetUser } from "../hooks/user/useGetUser"; +import { SearchIcon } from "./icons/Search"; +import { useSearchStore } from "../store/useSearchStore"; + +const AuthButton = () => { + const navigate = useNavigate(); + const location = useLocation(); + const { accessToken, logout } = useAuth(); + const { data: user } = useGetUser(); + const { openSearch, isSearchOpen, closeSearch } = useSearchStore(); + + const handleLogout = async () => { + await logout(); + navigate(`/`); + window.location.reload(); + }; + + const handleOpenSearch = () => { + if (isSearchOpen) { + closeSearch(); + } else { + openSearch(); + } + }; + + if (accessToken) { + return ( + <> + {/* search 페이지로 이동 현재 미구현 */} + + + {user?.name}님 환영합니다! + + + + ); + } + + return ( + <> + + + + ); +}; + +export default AuthButton; diff --git a/week10/src/components/SignupStep.tsx b/week10/src/components/SignupStep.tsx new file mode 100644 index 00000000..b1f78fb1 --- /dev/null +++ b/week10/src/components/SignupStep.tsx @@ -0,0 +1,201 @@ +import { useState } from "react"; +import { RiEyeCloseLine } from "react-icons/ri"; +import { IoEyeSharp } from "react-icons/io5"; +import { CiMail } from "react-icons/ci"; +import User from "../assets/user.svg"; +import { type SubmitHandler } from "react-hook-form"; +import { useNavigate } from "react-router-dom"; +import toast from "react-hot-toast"; +import { postSignup } from "../apis/auth"; +import { useSignupForm } from "../hooks/auth/useLoginForm"; +import type { UserSignupInformation } from "../utils/validateSchema"; +import GoogleLoginButton from "./google/GoogleLoginButton"; + +const SignupStep = () => { + const [passwordVisible, setPasswordVisible] = useState({ + password: false, + confirmPassword: false, + }); + const [step, setStep] = useState<1 | 2 | 3>(1); + const [data, setData] = useState(); + const navigate = useNavigate(); + + const { + register, + handleSubmit, + getValues, + watch, + formState: { errors, isValid }, + } = useSignupForm(); + + const onSubmit: SubmitHandler = async ( + data: UserSignupInformation + ) => { + try { + const res = await toast.promise( + postSignup(data), + { + loading: "회원가입 중...", + success: "회원가입 성공!", + error: "회원가입 실패!", + }, + { id: "signup" } + ); + console.log("회원가입 성공", res); + setTimeout(() => navigate("/login"), 2000); + } catch (e) { + console.error(e); + } + }; + + const handlePasswordVisible = (toggle: "password" | "confirmPassword") => { + setPasswordVisible((prev) => ({ + ...prev, + [toggle]: !prev[toggle], + })); + }; + + const handleNextStep = () => { + const current = getValues(); + setData(current); + setStep((prev) => (prev < 3 ? ((prev + 1) as 1 | 2 | 3) : prev)); + }; + + return ( +
+ {step === 1 && ( +
+ +
+
+

OR

+
+
+ { + if (e.key === "Enter") { + e.preventDefault(); + handleNextStep(); + } + }} + className="text-start border-2 border-[#50bcdf] rounded-lg px-4 py-3 focus:outline-[#1298c5]" + type="email" + placeholder="이메일을 입력해주세요!" + /> + {errors.email && ( +
+ {errors.email.message} +
+ )} + +
+ )} +
+ {/* Step 2 */} + {step === 2 && ( + <> + + +

{data?.email}

+
+
+ + +
+ {errors?.password && ( +
+ {errors.password.message} +
+ )} +
+ { + if (e.key === "Enter") { + e.preventDefault(); + handleNextStep(); + } + }} + className="border-2 w-full border-[#50bcdf] rounded-lg px-4 py-3 focus:outline-[#1298c5]" + type={!passwordVisible.confirmPassword ? "password" : "text"} + placeholder="비밀번호를 다시 한 번 입력해주세요!" + /> + +
+ {errors?.confirmPassword && ( +
+ {errors.confirmPassword.message} +
+ )} + + + )} + {/* Step 3 */} + {step === 3 && ( + <> +
+ user +
+ + {errors?.name && ( +

+ {errors.name.message} +

+ )} + + + )} +
+ + ); +}; + +export default SignupStep; diff --git a/week10/src/components/UserDataDisplay.tsx b/week10/src/components/UserDataDisplay.tsx new file mode 100644 index 00000000..0c6e8710 --- /dev/null +++ b/week10/src/components/UserDataDisplay.tsx @@ -0,0 +1,72 @@ +import { useState } from "react"; +import { useTanstackFetch } from "../hooks/fetch/useTanstackFetch"; + +interface WelcomeData { + id: number; + name: string; + email: string; +} + +export const WelcomeData = () => { + const [userId, setUserId] = useState(1); + const [isVisible, setIsVisible] = useState(true); + + const handleChangeUser = () => { + const randomId = Math.floor(Math.random() * 10) + 1; + setUserId(randomId); + }; + + const handleTestRetry = () => { + setUserId(999999); + }; + + console.log("welcomeData 실행"); + + return ( +
+
+ + + +
+ + {isVisible && } +
+ ); +}; + +const UserDataDisplay = ({ userId }: { userId: number }) => { + const { data, isPending, isError } = useTanstackFetch( + `https://jsonplaceholder.typicode.com/users/${userId}` + ); + + if (isPending) { + return
Loading... (User ID: {userId})
; + } + + if (isError) { + return
Error Occurred
; + } + + return ( +
+

{data?.name}

+

{data?.email}

+

User ID: {data?.id}

+
+ ); +}; diff --git a/week10/src/components/common/Error.tsx b/week10/src/components/common/Error.tsx new file mode 100644 index 00000000..81da7aa9 --- /dev/null +++ b/week10/src/components/common/Error.tsx @@ -0,0 +1,57 @@ +import { motion } from "framer-motion"; + +interface ErrorProps { + error: string | null; +} + +const Error = ({ error }: ErrorProps) => { + return ( + + {/* 에러 아이콘 */} + + ! + + + {/* 텍스트 */} + + 문제가 발생했어요 + + + + {error} + + + {/* 버튼 */} + window.location.reload()} + className="mt-4 px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600 transition" + whileHover={{ scale: 1.05 }} + whileTap={{ scale: 0.95 }} + > + 다시 시도하기 + + + ); +}; + +export default Error; diff --git a/week10/src/components/common/Loading.tsx b/week10/src/components/common/Loading.tsx new file mode 100644 index 00000000..990b6ac8 --- /dev/null +++ b/week10/src/components/common/Loading.tsx @@ -0,0 +1,10 @@ +// 예: src/components/common/Loader.tsx +import "../../styles/loader.css"; + +export default function Loader() { + return ( +
+
+
+ ); +} diff --git a/week10/src/components/common/ModalPortal.tsx b/week10/src/components/common/ModalPortal.tsx new file mode 100644 index 00000000..c163f453 --- /dev/null +++ b/week10/src/components/common/ModalPortal.tsx @@ -0,0 +1,13 @@ +import type { ReactNode } from "react"; +import { createPortal } from "react-dom"; + +interface ModalPortalProps { + children: ReactNode; +} + +export default function ModalPortal({ children }: ModalPortalProps) { + const modalRoot = document.getElementById("modal-root") as HTMLElement; + if (!modalRoot) return null; + + return createPortal(children, modalRoot); +} diff --git a/week10/src/components/common/MovieNavbar.tsx b/week10/src/components/common/MovieNavbar.tsx new file mode 100644 index 00000000..5083f28e --- /dev/null +++ b/week10/src/components/common/MovieNavbar.tsx @@ -0,0 +1,71 @@ +import { NavLink } from "react-router-dom"; +import type { NavItem } from "../../types/movie"; +import AuthButton from "../AuthButton"; +import { Hamburger } from "../../components/icons/Hamburger"; +import { CiShoppingCart } from "react-icons/ci"; + +import { useEffect } from "react"; +import { useCartActions, useCartInfo } from "../../store/useCartStore"; + +const navItems: Record = { + home: { label: "홈", path: "/" }, + popular: { label: "인기 영화", path: "/movies/popular" }, + now_playing: { label: "상영 중", path: "/movies/now_playing" }, + top_rated: { label: "평점 높은", path: "/movies/top_rated" }, + upcoming: { label: "개봉 예정", path: "/movies/upcoming" }, +}; + +interface NavbarProps { + triggerRef: React.RefObject; + onToggle: () => void; +} + +const MovieNavbar = ({ triggerRef, onToggle }: NavbarProps) => { + const { items, amount: cartAmount } = useCartInfo(); + const { calculateTotals } = useCartActions(); + + // 카트 정보 계산 + useEffect(() => { + calculateTotals(); + }, [calculateTotals, items]); + + return ( +
+
    + {/* 햄버거 버튼 클릭 시 사이드바 열림 + data-hamburger 속성을 활용하여 사이드바 열림 방지 */} + + {/* Record 객체로 매핑해주는 Object.entries() */} + {Object.entries(navItems).map(([key, cat]) => ( +
  • + {/* NavLink의 active 속성을 활용 -> useLocation() 대체 가능 */} + (isActive ? "text-green-500" : "")} + > + {cat.label} + +
  • + ))} +
    + {/* 장바구니 페이지로 이동 */} + + + + {cartAmount} + {/* 로그인 인증시 바뀌는 냅바 버튼 */} + +
    +
+
+ ); +}; + +export default MovieNavbar; diff --git a/week10/src/components/common/Pending.tsx b/week10/src/components/common/Pending.tsx new file mode 100644 index 00000000..a7222d15 --- /dev/null +++ b/week10/src/components/common/Pending.tsx @@ -0,0 +1,19 @@ +import { motion } from "framer-motion"; + +const Pending = () => { + return ( +
+ +
+ ); +}; + +export default Pending; diff --git a/week10/src/components/common/Sidebar.tsx b/week10/src/components/common/Sidebar.tsx new file mode 100644 index 00000000..fe86b532 --- /dev/null +++ b/week10/src/components/common/Sidebar.tsx @@ -0,0 +1,82 @@ +import { useEffect, useCallback } from "react"; +import { useNavigate } from "react-router-dom"; +import { useDeleteUser } from "../../hooks/user/useDeleteUser"; +import toast from "react-hot-toast"; +import useLockBodyScroll from "../../hooks/common/sidebar/useLockBodyScroll"; + +interface SidebarProps { + isOpen: boolean; + sidebarRef: React.RefObject; + onClose: () => void; +} + +export default function Sidebar({ isOpen, sidebarRef, onClose }: SidebarProps) { + const navigate = useNavigate(); + + const handleNavigate = useCallback( + (path: string) => { + navigate(path, { replace: true }); + onClose(); + }, + [navigate, onClose] + ); + + // 창 크기 변경 시 자동 닫힘 + useEffect(() => { + const handleResize = () => { + if (window.innerWidth < 768 && isOpen) onClose(); + }; + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, [isOpen, onClose]); + + const deleteUser = useDeleteUser(); + const handleDeleteUser = useCallback(() => { + if (confirm("정말 탈퇴하시겠습니까?")) { + toast.promise( + async () => await deleteUser.mutate(), + { + loading: "탈퇴 중...", + success: "탈퇴 성공!", + error: "탈퇴 실패!", + }, + { id: "user-delete" } + ); + } + }, [deleteUser]); + + useLockBodyScroll(isOpen); + + return ( + + ); +} diff --git a/week10/src/components/common/toggle/OrderToggle.tsx b/week10/src/components/common/toggle/OrderToggle.tsx new file mode 100644 index 00000000..5e6b5ac2 --- /dev/null +++ b/week10/src/components/common/toggle/OrderToggle.tsx @@ -0,0 +1,32 @@ +import type { Order } from "../../../types/common/enum"; + +interface OrderToggleProps { + order: Order; + onChangeOrder: (order: Order) => void; +} + +export const OrderToggle = ({ order, onChangeOrder }: OrderToggleProps) => { + const buttons = [ + { label: "오래된순", value: "asc" }, + { label: "최신순", value: "desc" }, + ]; + + return ( +
+ {buttons.map(({ label, value }) => ( + + ))} +
+ ); +}; diff --git a/week10/src/components/google/GoogleCallback.tsx b/week10/src/components/google/GoogleCallback.tsx new file mode 100644 index 00000000..9e414a29 --- /dev/null +++ b/week10/src/components/google/GoogleCallback.tsx @@ -0,0 +1,28 @@ +import { useEffect } from "react"; +import { useNavigate } from "react-router-dom"; +import { LOCAL_STORAGE_KEY } from "../../constants/key"; +import { useAuth } from "../../hooks/auth/useAuth"; + +const GoogleLoginRedirect = () => { + const navigate = useNavigate(); + const { setToken } = useAuth(); + + useEffect(() => { + const params = new URLSearchParams(window.location.search); + const accessToken = params.get(LOCAL_STORAGE_KEY.accessToken); + const refreshToken = params.get(LOCAL_STORAGE_KEY.refreshToken); + + if (accessToken) { + // AuthContext와 localStorage 업데이트 + setToken(accessToken, refreshToken || undefined); + const redirectPath = + localStorage.getItem(LOCAL_STORAGE_KEY.redirectPath) ?? "/mypage"; + localStorage.removeItem(LOCAL_STORAGE_KEY.redirectPath); + navigate(redirectPath, { replace: true }); + } + }, [setToken, navigate]); + + return
구글 로그인
; +}; + +export default GoogleLoginRedirect; diff --git a/week10/src/components/google/GoogleLoginButton.tsx b/week10/src/components/google/GoogleLoginButton.tsx new file mode 100644 index 00000000..e1598594 --- /dev/null +++ b/week10/src/components/google/GoogleLoginButton.tsx @@ -0,0 +1,24 @@ +const GoogleLoginButton = () => { + const handleGoogleLogin = () => { + window.location.href = + import.meta.env.VITE_SERVER_API_URL + "/v1/auth/google/login"; + }; + + return ( + <> + + + ); +}; + +export default GoogleLoginButton; diff --git a/week10/src/components/icons/CheckIcon.tsx b/week10/src/components/icons/CheckIcon.tsx new file mode 100644 index 00000000..c372bdde --- /dev/null +++ b/week10/src/components/icons/CheckIcon.tsx @@ -0,0 +1,31 @@ +import type { SVGProps } from "react"; + +export const CheckIcon = ({ + color = "currentColor", + width = 24, + height = 24, + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; +}) => { + return ( + + + + ); +}; diff --git a/week10/src/components/icons/Hamburger.tsx b/week10/src/components/icons/Hamburger.tsx new file mode 100644 index 00000000..11841c39 --- /dev/null +++ b/week10/src/components/icons/Hamburger.tsx @@ -0,0 +1,31 @@ +import type { SVGProps } from "react"; + +export const Hamburger = ({ + color = "currentColor", + width = 12, + height = 12, + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; +}) => { + return ( + + + + ); +}; diff --git a/week10/src/components/icons/Heart.tsx b/week10/src/components/icons/Heart.tsx new file mode 100644 index 00000000..72f512b1 --- /dev/null +++ b/week10/src/components/icons/Heart.tsx @@ -0,0 +1,25 @@ +import type { SVGProps } from "react"; + +export const HeartIcon = ({ + color = "currentColor", + width = 12, + height = 12, + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; +}) => { + return ( + + + + ); +}; diff --git a/week10/src/components/icons/Kebab.tsx b/week10/src/components/icons/Kebab.tsx new file mode 100644 index 00000000..f4bd68c9 --- /dev/null +++ b/week10/src/components/icons/Kebab.tsx @@ -0,0 +1,23 @@ +import type { SVGProps } from "react"; + +export const Kebab = ({ + color = "currentColor", + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; + className?: string; +}) => { + return ( + + ); +}; + +export default Kebab; diff --git a/week10/src/components/icons/Pencil.tsx b/week10/src/components/icons/Pencil.tsx new file mode 100644 index 00000000..88629452 --- /dev/null +++ b/week10/src/components/icons/Pencil.tsx @@ -0,0 +1,39 @@ +import type { SVGProps } from "react"; + +export const Pencil = ({ + color = "currentColor", + width = 24, + height = 24, + ...props +}: { + color?: string; + width?: number; + height?: number; +} & SVGProps) => { + return ( + + + + + ); +}; diff --git a/week10/src/components/icons/Search.tsx b/week10/src/components/icons/Search.tsx new file mode 100644 index 00000000..a3ce5215 --- /dev/null +++ b/week10/src/components/icons/Search.tsx @@ -0,0 +1,31 @@ +import type { SVGProps } from "react"; + +export const SearchIcon = ({ + color = "currentColor", + width = 12, + height = 12, + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; +}) => { + return ( + + + + ); +}; diff --git a/week10/src/components/icons/Setting.tsx b/week10/src/components/icons/Setting.tsx new file mode 100644 index 00000000..31e07d21 --- /dev/null +++ b/week10/src/components/icons/Setting.tsx @@ -0,0 +1,32 @@ +import type { SVGProps } from "react"; + +export const SettingIcon = ({ + color = "currentColor", + width = 24, + height = 24, + ...props +}: { + color?: string; + width?: number; + height?: number; +} & SVGProps) => { + return ( + + + + + ); +}; diff --git a/week10/src/components/icons/Trash.tsx b/week10/src/components/icons/Trash.tsx new file mode 100644 index 00000000..e630206c --- /dev/null +++ b/week10/src/components/icons/Trash.tsx @@ -0,0 +1,56 @@ +import type { SVGProps } from "react"; + +export const Trash = ({ + color = "currentColor", + width = 24, + height = 24, + ...props +}: { + color?: string; + width?: number; + height?: number; +} & SVGProps) => { + return ( + + + + + + + + ); +}; diff --git a/week10/src/components/icons/XIcon.tsx b/week10/src/components/icons/XIcon.tsx new file mode 100644 index 00000000..e47af112 --- /dev/null +++ b/week10/src/components/icons/XIcon.tsx @@ -0,0 +1,28 @@ +import type { SVGProps } from "react"; + +export const XIcon = ({ + width = 24, + height = 24, + ...props +}: SVGProps & { + color?: string; + width?: number; + height?: number; +}) => { + return ( + + + + + ); +}; diff --git a/week10/src/components/lp/LpCard.tsx b/week10/src/components/lp/LpCard.tsx new file mode 100644 index 00000000..e15471d0 --- /dev/null +++ b/week10/src/components/lp/LpCard.tsx @@ -0,0 +1,47 @@ +import { useNavigate } from "react-router-dom"; +import type { Lp } from "../../types/lps/lp"; +import timeAgo from "../../utils/timeFormat"; +import { HeartIcon } from "../icons/Heart"; + +export const LpCard = ({ data }: { data: Lp }) => { + const navigate = useNavigate(); + + return ( +
navigate(`/lp/${data.id}`)} + > +
+ {data.title} (e.currentTarget.src = "/src/assets/image.png")} + width={100} + height={100} + /> +
+
+

+ {data.title} +

+
+

{timeAgo(data.createdAt)}

+ {/* 좋아요 섹션 */} +
+ +

{data.likes?.length ?? 0}

+
+
+
+
+
+ ); +}; + +export default LpCard; diff --git a/week10/src/components/lp/LpList.tsx b/week10/src/components/lp/LpList.tsx new file mode 100644 index 00000000..8afed47b --- /dev/null +++ b/week10/src/components/lp/LpList.tsx @@ -0,0 +1,132 @@ +import { useCallback } from "react"; +import LpCard from "./LpCard"; +import { LpCardSkeleton } from "./skeleton/LpCardSkeleton"; +import { Order } from "../../types/common/enum"; +import useGetLpList from "../../hooks/lps/query/useGetLpList"; +import { useOnInView } from "react-intersection-observer"; +import Error from "../common/Error"; +import { useSearchStore } from "../../store/useSearchStore"; +import useDebounce from "../../hooks/common/useDebounce"; +import toast from "react-hot-toast"; +import useThrottle from "../../hooks/common/useThrottle"; + +const LpList = ({ order }: { order: Order }) => { + // 검색어 상태 관리 + const { search, searchQuery, isSearchOpen, setSearch, setSearchQuery } = + useSearchStore(); + const debouncedSearch = useDebounce(search?.trim() ?? null, 500); + + const { + data, + fetchNextPage, + hasNextPage, + isFetching, + isFetchingNextPage, + isError, + error, + isPending, + } = useGetLpList(order, 20, 0, isSearchOpen ? searchQuery : null); + + // 다음 페이지 로드 스로틀링 + const throttleFetchNextPage = useThrottle(fetchNextPage, 3_000); + + // 무한 스크롤 추적 + const trackingRef = useOnInView((inView, entry) => { + if (inView && hasNextPage && !isFetchingNextPage) { + console.log("요소가 보여집니다.", entry.target); + throttleFetchNextPage?.(); + } + }); + + // 검색 핸들러 + const handleSearch = useCallback(() => { + if (!debouncedSearch || debouncedSearch === "") { + setSearchQuery(null); + toast.error("검색어를 입력해주세요.", { + duration: 2000, + id: "search-error", + }); + return; + } + setSearchQuery(debouncedSearch); + }, [debouncedSearch, setSearchQuery]); + + // 엔터키 핸들러 + const handleKeyUp = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + handleSearch(); + } + }, + [handleSearch] + ); + + // 데이터 리스트가 있는지 확인 + const hasData = Boolean(data && data.length > 0); + // 초기 스켈레톤 표시 여부 결정 + const showInitialSkeleton = isPending || (!hasData && isFetching); + + if (isError) { + const message = + error instanceof Error ? error.message : "알 수 없는 오류가 발생했어요."; + return ; + } + + return ( + <> + {isSearchOpen && ( +
+ setSearch(e.target.value)} + onKeyUp={handleKeyUp} + /> + + +
+ )} + {/* 초기 스켈레톤 표시 */} +
+ {/* 초기 스켈레톤 표시 */} + {showInitialSkeleton && !hasData + ? Array.from({ length: 10 }).map((_, index) => ( + + )) + : data?.map((item) => )} + {/* 다음 페이지 스켈레톤 표시 */} + {isFetchingNextPage && + Array.from({ length: 10 }).map((_, index) => ( + + ))} +
+
+ + ); +}; + +export default LpList; diff --git a/week10/src/components/lp/LpModal.tsx b/week10/src/components/lp/LpModal.tsx new file mode 100644 index 00000000..40ef05d2 --- /dev/null +++ b/week10/src/components/lp/LpModal.tsx @@ -0,0 +1,222 @@ +import { useCallback, useEffect, useRef, useState } from "react"; +import { XIcon } from "../icons/XIcon"; +import useLockBodyScroll from "../../hooks/common/sidebar/useLockBodyScroll"; +import { useOnClickOutside } from "../../hooks/common/sidebar/useOnClickOutside"; +import usePostLp from "../../hooks/lps/mutation/usePostLp"; +import { uploadImage } from "../../apis/img"; + +interface LpModalProps { + onClose?: () => void; + isOpen: boolean; +} + +export function LpModal({ onClose, isOpen }: LpModalProps) { + const ModalRef = useRef(null); + const fileInputRef = useRef(null); + const [lpName, setLpName] = useState(""); + const [lpContent, setLpContent] = useState(""); + const [lpTag, setLpTag] = useState([]); + const [lpTagInput, setLpTagInput] = useState(""); + const [image, setImage] = useState(null); + const [imageFile, setImageFile] = useState(""); + + // 모니터 스크롤 방지 + useLockBodyScroll(isOpen); + + // 모달 영역 밖 클릭 시 닫기 + useOnClickOutside([ModalRef as React.RefObject], () => { + if (onClose) { + onClose(); + } + }); + const createLp = usePostLp(); + + // 이미지 변경 시 이미지 미리보기 + const handleImageChange = useCallback( + async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + + if (!file) return; + + const fileUrl = URL.createObjectURL(file); + // 미리보기용 + setImage(fileUrl); + + // 서버 전송용 + const uploadUrl = await uploadImage(file); + setImageFile(uploadUrl); + }, + [] + ); + + // 이미지 미리보기 해제 -> 메모리 누수 방지 + useEffect(() => { + return () => { + if (image) { + URL.revokeObjectURL(image); + } + }; + }, [image]); + + // LP 생성 버튼 (Add LP) + const handleCreateLp = useCallback(() => { + createLp.mutate({ + title: lpName, + content: lpContent, + tags: lpTag, + thumbnail: imageFile, + published: false, + }); + + onClose?.(); // 모달 닫기 + }, [createLp, lpName, lpContent, lpTag, imageFile, onClose]); + + // LP 태그 입력 시 엔터키 누르면 추가 + const handleAddLpTag = useCallback( + (e: React.KeyboardEvent) => { + if (e.key !== "Enter") return; + if (!lpTagInput.trim()) return; + + setLpTag((prev) => [...prev, lpTagInput.trim()]); + setLpTagInput(""); + }, + [lpTagInput] + ); + + // LP 태그 추가 버튼 (Add) + const handleAddLpTagButton = useCallback(() => { + if (lpTagInput.trim() === "") return; + + setLpTag((prev) => [...prev, lpTagInput]); + setLpTagInput(""); + }, [lpTagInput]); + + // LP 태그 삭제 (X) + const handleRemoveLpTag = useCallback((tag: string) => { + setLpTag((prev) => prev.filter((t) => t !== tag)); + }, []); + + return ( +
+ {/* 모달 카드 */} +
+ {/* 닫기 버튼 */} + + + {/* LP 이미지 영역 */} +
+ + +
+ {image && ( +
+ LP +
+ )} +
fileInputRef.current?.click()} + className="h-44 w-44 cursor-pointer overflow-hidden rounded-full bg-black shadow-lg" + > + LP +
+
+
+ + {/* 입력 폼 영역 */} +
+ {/* LP Name */} +
+ setLpName(e.target.value)} + /> +
+ + {/* LP Content */} +
+ setLpContent(e.target.value)} + /> +
+ + {/* LP Tag + Add 버튼 */} +
+ setLpTagInput(e.target.value)} + onKeyUp={handleAddLpTag} + /> + +
+
+ {lpTag.map((tag, i) => ( +
+ {tag} + +
+ ))} +
+
+ + {/* 하단 Add LP 버튼 */} + +
+
+ ); +} diff --git a/week10/src/components/lp/cart/CartDeleteModal.tsx b/week10/src/components/lp/cart/CartDeleteModal.tsx new file mode 100644 index 00000000..64722ef5 --- /dev/null +++ b/week10/src/components/lp/cart/CartDeleteModal.tsx @@ -0,0 +1,49 @@ +import useLockBodyScroll from "../../../hooks/common/sidebar/useLockBodyScroll"; +import { useCartActions } from "../../../store/useCartStore"; +import { useModalActions, useModalInfo } from "../../../store/useModalStore"; + +const CartDeleteModal = () => { + const { clearCart } = useCartActions(); + const { isOpen } = useModalInfo(); + const { closeModal } = useModalActions(); + + // 모니터 스크롤 방지 + useLockBodyScroll(isOpen); + + // 장바구니 초기화 + const handleClearCart = () => { + closeModal(); + clearCart(); + }; + + // 모달 닫기 + const handleCloseModal = () => { + closeModal(); + }; + + if (!isOpen) return null; + + return ( +
+
+

장바구니를 초기화하시겠습니까?

+
+ + +
+
+
+ ); +}; + +export default CartDeleteModal; diff --git a/week10/src/components/lp/cart/CartItem.tsx b/week10/src/components/lp/cart/CartItem.tsx new file mode 100644 index 00000000..aefca23e --- /dev/null +++ b/week10/src/components/lp/cart/CartItem.tsx @@ -0,0 +1,58 @@ +import { useCallback } from "react"; +import { useCartActions } from "../../../store/useCartStore"; +import type { CartItem } from "../../../types/lps/cart"; + +interface CartItemProps { + item: CartItem; +} + +export default function CartItem({ item }: CartItemProps) { + const { increase, decrease, remove } = useCartActions(); + + const handleIncrease = useCallback(() => { + increase(item.id); + }, [increase, item.id]); + + const handleDecrease = useCallback(() => { + if (item.amount === 1) { + remove(item.id); + return; + } + decrease(item.id); + }, [decrease, remove, item.id, item.amount]); + + return ( +
  • +
    + {item.title} +
    +
    +
    +

    {item.title}

    +

    {item.singer}

    +

    {item.price}원

    +
    +
    +
    + + {item.amount} + +
    +
    +
  • + ); +} diff --git a/week10/src/components/lp/cart/CartList.tsx b/week10/src/components/lp/cart/CartList.tsx new file mode 100644 index 00000000..a21c6d01 --- /dev/null +++ b/week10/src/components/lp/cart/CartList.tsx @@ -0,0 +1,39 @@ +import { useCallback } from "react"; +import CartItem from "./CartItem"; +import CartDeleteModal from "./CartDeleteModal"; +import { useCartInfo } from "../../../store/useCartStore"; +import { useModalActions, useModalInfo } from "../../../store/useModalStore"; + +export default function CartList() { + const { items, total } = useCartInfo(); + const { isOpen } = useModalInfo(); + const { openModal } = useModalActions(); + + const handleClearCart = useCallback(() => { + if (!isOpen) { + openModal("cart"); + } + }, [isOpen, openModal]); + + return ( +
    +
      + {items.map((item) => ( + + ))} +
    +
    + 총 결제 금액: {total}원 +
    + {isOpen && } +
    + +
    +
    + ); +} diff --git a/week10/src/components/lp/detail/EditSection.tsx b/week10/src/components/lp/detail/EditSection.tsx new file mode 100644 index 00000000..b1b08813 --- /dev/null +++ b/week10/src/components/lp/detail/EditSection.tsx @@ -0,0 +1,101 @@ +import { useCallback } from "react"; + +interface EditSectionProps { + title: string; + setTitle: (title: string) => void; + thumbnail: string; + setThumbnail: (thumbnail: string) => void; + content: string; + setContent: (content: string) => void; + tags: string[]; + setTags: (tags: string[]) => void; + tagInput: string; + setTagInput: (tagInput: string) => void; +} + +export default function EditSection({ + title, + setTitle, + thumbnail, + setThumbnail, + content, + setContent, + setTags, + tagInput, + setTagInput, +}: EditSectionProps) { + // 태그 인풋 변경 시 태그 배열 동기화 + const handleTagChange = useCallback( + (e: React.ChangeEvent) => { + const value = e.target.value; + + // 1. 사용자가 친 문자열 그대로 유지 + setTagInput(value); + + // 2. 이 문자열을 기반으로 태그 배열만 계산 + const parsed = value + .split("#") + .map((t) => t.trim()) + .filter((t) => t.length > 0); + + setTags(parsed); + }, + [setTagInput, setTags] + ); + + return ( + <> + {/* 제목 인풋 */} + setTitle(e.target.value)} + placeholder="제목을 입력하세요" + /> + + {/* 아트워크 + 썸네일 URL 인풋 */} +
    +
    + thumbnail { + e.currentTarget.src = "/src/assets/image.png"; + e.currentTarget.alt = "thumbnail"; + }} + /> +
    +
    + setThumbnail(e.target.value)} + placeholder="썸네일 이미지 URL" + /> +
    + + {/* 설명 인풋 */} +