diff --git a/frontend/appflowy_tauri/pnpm-lock.yaml b/frontend/appflowy_tauri/pnpm-lock.yaml index 426fb22859..abf64686be 100644 --- a/frontend/appflowy_tauri/pnpm-lock.yaml +++ b/frontend/appflowy_tauri/pnpm-lock.yaml @@ -1,142 +1,204 @@ -lockfileVersion: 5.4 - -specifiers: - '@emotion/react': ^11.10.6 - '@emotion/styled': ^11.10.6 - '@mui/icons-material': ^5.11.11 - '@mui/material': ^5.11.12 - '@reduxjs/toolkit': ^1.9.2 - '@slate-yjs/core': ^0.3.1 - '@tanstack/react-virtual': 3.0.0-beta.54 - '@tauri-apps/api': ^1.2.0 - '@tauri-apps/cli': ^1.2.2 - '@types/google-protobuf': ^3.15.6 - '@types/is-hotkey': ^0.1.7 - '@types/node': ^18.7.10 - '@types/react': ^18.0.15 - '@types/react-dom': ^18.0.6 - '@types/utf8': ^3.0.1 - '@types/uuid': ^9.0.1 - '@typescript-eslint/eslint-plugin': ^5.51.0 - '@typescript-eslint/parser': ^5.51.0 - '@vitejs/plugin-react': ^3.0.0 - autoprefixer: ^10.4.13 - eslint: ^8.34.0 - eslint-plugin-react: ^7.32.2 - events: ^3.3.0 - google-protobuf: ^3.21.2 - i18next: ^22.4.10 - i18next-browser-languagedetector: ^7.0.1 - is-hotkey: ^0.2.0 - jest: ^29.5.0 - nanoid: ^4.0.0 - postcss: ^8.4.21 - prettier: 2.8.4 - prettier-plugin-tailwindcss: ^0.2.2 - protoc-gen-ts: ^0.8.5 - react: ^18.2.0 - react-dom: ^18.2.0 - react-error-boundary: ^3.1.4 - react-i18next: ^12.2.0 - react-redux: ^8.0.5 - react-router-dom: ^6.8.0 - react18-input-otp: ^1.1.2 - redux: ^4.2.1 - rxjs: ^7.8.0 - slate: ^0.91.4 - slate-react: ^0.91.9 - tailwindcss: ^3.2.7 - ts-results: ^3.3.0 - typescript: ^4.6.4 - utf8: ^3.0.0 - uuid: ^9.0.0 - vite: ^4.0.0 - y-indexeddb: ^9.0.9 - yjs: ^13.5.51 +lockfileVersion: '6.0' dependencies: - '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 - '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/icons-material': 5.11.11_ao76n7r2cajsoyr3cbwrn7geoi - '@mui/material': 5.11.12_xqeqsl5kvjjtyxwyi3jhw3yuli - '@reduxjs/toolkit': 1.9.3_k4ae6lp43ej6mezo3ztvx6pykq - '@slate-yjs/core': 0.3.1_slate@0.91.4+yjs@13.5.51 - '@tanstack/react-virtual': 3.0.0-beta.54_react@18.2.0 - '@tauri-apps/api': 1.2.0 - events: 3.3.0 - google-protobuf: 3.21.2 - i18next: 22.4.10 - i18next-browser-languagedetector: 7.0.1 - is-hotkey: 0.2.0 - jest: 29.5.0_@types+node@18.14.6 - nanoid: 4.0.1 - protoc-gen-ts: 0.8.6_ss7alqtodw6rv4lluxhr36xjoa - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-error-boundary: 3.1.4_react@18.2.0 - react-i18next: 12.2.0_3yopsigl4h4eb2nqrqfsy65uwi - react-redux: 8.0.5_ctrls2ti7t7iutxbwkm5ipogyy - react-router-dom: 6.8.2_biqbaboplfbrettd7655fr4n2y - react18-input-otp: 1.1.2_biqbaboplfbrettd7655fr4n2y - redux: 4.2.1 - rxjs: 7.8.0 - slate: 0.91.4 - slate-react: 0.91.9_6tgy34rvmll7duwkm4ydcekf3u - ts-results: 3.3.0 - utf8: 3.0.0 - y-indexeddb: 9.0.9_yjs@13.5.51 - yjs: 13.5.51 + '@emotion/react': + specifier: ^11.10.6 + version: 11.10.6(@types/react@18.0.28)(react@18.2.0) + '@emotion/styled': + specifier: ^11.10.6 + version: 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0) + '@mui/icons-material': + specifier: ^5.11.11 + version: 5.11.11(@mui/material@5.11.12)(@types/react@18.0.28)(react@18.2.0) + '@mui/material': + specifier: ^5.11.12 + version: 5.11.12(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) + '@reduxjs/toolkit': + specifier: ^1.9.2 + version: 1.9.3(react-redux@8.0.5)(react@18.2.0) + '@slate-yjs/core': + specifier: ^0.3.1 + version: 0.3.1(slate@0.91.4)(yjs@13.5.51) + '@tanstack/react-virtual': + specifier: 3.0.0-beta.54 + version: 3.0.0-beta.54(react@18.2.0) + '@tauri-apps/api': + specifier: ^1.2.0 + version: 1.2.0 + dayjs: + specifier: ^1.11.7 + version: 1.11.7 + events: + specifier: ^3.3.0 + version: 3.3.0 + google-protobuf: + specifier: ^3.21.2 + version: 3.21.2 + i18next: + specifier: ^22.4.10 + version: 22.4.10 + i18next-browser-languagedetector: + specifier: ^7.0.1 + version: 7.0.1 + is-hotkey: + specifier: ^0.2.0 + version: 0.2.0 + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.14.6) + nanoid: + specifier: ^4.0.0 + version: 4.0.1 + protoc-gen-ts: + specifier: ^0.8.5 + version: 0.8.6(google-protobuf@3.21.2)(typescript@4.9.5) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-beautiful-dnd: + specifier: ^13.1.1 + version: 13.1.1(react-dom@18.2.0)(react@18.2.0) + react-calendar: + specifier: ^4.1.0 + version: 4.2.1(react-dom@18.2.0)(react@18.2.0) + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-error-boundary: + specifier: ^3.1.4 + version: 3.1.4(react@18.2.0) + react-i18next: + specifier: ^12.2.0 + version: 12.2.0(i18next@22.4.10)(react-dom@18.2.0)(react@18.2.0) + react-redux: + specifier: ^8.0.5 + version: 8.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1) + react-router-dom: + specifier: ^6.8.0 + version: 6.8.2(react-dom@18.2.0)(react@18.2.0) + react18-input-otp: + specifier: ^1.1.2 + version: 1.1.2(react-dom@18.2.0)(react@18.2.0) + redux: + specifier: ^4.2.1 + version: 4.2.1 + rxjs: + specifier: ^7.8.0 + version: 7.8.0 + slate: + specifier: ^0.91.4 + version: 0.91.4 + slate-react: + specifier: ^0.91.9 + version: 0.91.9(react-dom@18.2.0)(react@18.2.0)(slate@0.91.4) + ts-results: + specifier: ^3.3.0 + version: 3.3.0 + utf8: + specifier: ^3.0.0 + version: 3.0.0 + y-indexeddb: + specifier: ^9.0.9 + version: 9.0.9(yjs@13.5.51) + yjs: + specifier: ^13.5.51 + version: 13.5.51 devDependencies: - '@tauri-apps/cli': 1.2.3 - '@types/google-protobuf': 3.15.6 - '@types/is-hotkey': 0.1.7 - '@types/node': 18.14.6 - '@types/react': 18.0.28 - '@types/react-dom': 18.0.11 - '@types/utf8': 3.0.1 - '@types/uuid': 9.0.1 - '@typescript-eslint/eslint-plugin': 5.54.0_6mj2wypvdnknez7kws2nfdgupi - '@typescript-eslint/parser': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu - '@vitejs/plugin-react': 3.1.0_vite@4.1.4 - autoprefixer: 10.4.13_postcss@8.4.21 - eslint: 8.35.0 - eslint-plugin-react: 7.32.2_eslint@8.35.0 - postcss: 8.4.21 - prettier: 2.8.4 - prettier-plugin-tailwindcss: 0.2.4_prettier@2.8.4 - tailwindcss: 3.2.7_postcss@8.4.21 - typescript: 4.9.5 - uuid: 9.0.0 - vite: 4.1.4_@types+node@18.14.6 + '@tauri-apps/cli': + specifier: ^1.2.2 + version: 1.2.3 + '@types/google-protobuf': + specifier: ^3.15.6 + version: 3.15.6 + '@types/is-hotkey': + specifier: ^0.1.7 + version: 0.1.7 + '@types/node': + specifier: ^18.7.10 + version: 18.14.6 + '@types/react': + specifier: ^18.0.15 + version: 18.0.28 + '@types/react-beautiful-dnd': + specifier: ^13.1.3 + version: 13.1.4 + '@types/react-dom': + specifier: ^18.0.6 + version: 18.0.11 + '@types/utf8': + specifier: ^3.0.1 + version: 3.0.1 + '@types/uuid': + specifier: ^9.0.1 + version: 9.0.1 + '@typescript-eslint/eslint-plugin': + specifier: ^5.51.0 + version: 5.54.0(@typescript-eslint/parser@5.54.0)(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.51.0 + version: 5.54.0(eslint@8.35.0)(typescript@4.9.5) + '@vitejs/plugin-react': + specifier: ^3.0.0 + version: 3.1.0(vite@4.1.4) + autoprefixer: + specifier: ^10.4.13 + version: 10.4.13(postcss@8.4.21) + eslint: + specifier: ^8.34.0 + version: 8.35.0 + eslint-plugin-react: + specifier: ^7.32.2 + version: 7.32.2(eslint@8.35.0) + postcss: + specifier: ^8.4.21 + version: 8.4.21 + prettier: + specifier: 2.8.4 + version: 2.8.4 + prettier-plugin-tailwindcss: + specifier: ^0.2.2 + version: 0.2.4(prettier@2.8.4) + tailwindcss: + specifier: ^3.2.7 + version: 3.2.7(postcss@8.4.21) + typescript: + specifier: ^4.6.4 + version: 4.9.5 + uuid: + specifier: ^9.0.0 + version: 9.0.0 + vite: + specifier: ^4.0.0 + version: 4.1.4(@types/node@18.14.6) packages: - /@ampproject/remapping/2.2.0: + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 - /@babel/code-frame/7.18.6: + /@babel/code-frame@7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data/7.21.0: + /@babel/compat-data@7.21.0: resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} engines: {node: '>=6.9.0'} - /@babel/core/7.21.0: + /@babel/core@7.21.0: resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 '@babel/generator': 7.21.1 - '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.0) '@babel/helper-module-transforms': 7.21.2 '@babel/helpers': 7.21.0 '@babel/parser': 7.21.2 @@ -151,7 +213,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator/7.21.1: + /@babel/generator@7.21.1: resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} engines: {node: '>=6.9.0'} dependencies: @@ -160,7 +222,7 @@ packages: '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 - /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0: + /@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.0): resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -173,30 +235,30 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 - /@babel/helper-environment-visitor/7.18.9: + /@babel/helper-environment-visitor@7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name/7.21.0: + /@babel/helper-function-name@7.21.0: resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 '@babel/types': 7.21.2 - /@babel/helper-hoist-variables/7.18.6: + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.2 - /@babel/helper-module-imports/7.18.6: + /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.2 - /@babel/helper-module-transforms/7.21.2: + /@babel/helper-module-transforms@7.21.2: resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: @@ -211,35 +273,35 @@ packages: transitivePeerDependencies: - supports-color - /@babel/helper-plugin-utils/7.20.2: + /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} - /@babel/helper-simple-access/7.20.2: + /@babel/helper-simple-access@7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.2 - /@babel/helper-split-export-declaration/7.18.6: + /@babel/helper-split-export-declaration@7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.21.2 - /@babel/helper-string-parser/7.19.4: + /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier/7.19.1: + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option/7.21.0: + /@babel/helper-validator-option@7.21.0: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} - /@babel/helpers/7.21.0: + /@babel/helpers@7.21.0: resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: @@ -249,7 +311,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/highlight/7.18.6: + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: @@ -257,14 +319,14 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.21.2: + /@babel/parser@7.21.2: resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.21.2 - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.0: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.0): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -273,7 +335,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -282,7 +344,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.0: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.0): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -291,7 +353,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.0: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.0): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -300,7 +362,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -309,7 +371,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.21.0: + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.21.0): resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: @@ -319,7 +381,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.0: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.0): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -328,7 +390,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -337,7 +399,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.0: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.0): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -346,7 +408,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -355,7 +417,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -364,7 +426,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.0: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.0): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -373,7 +435,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.0: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.0): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: @@ -383,7 +445,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.21.0: + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.21.0): resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -393,7 +455,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: false - /@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.21.0: + /@babel/plugin-transform-react-jsx-self@7.21.0(@babel/core@7.21.0): resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -403,7 +465,7 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.21.0: + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.21.0): resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -413,14 +475,14 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/runtime/7.21.0: + /@babel/runtime@7.21.0: resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 dev: false - /@babel/template/7.20.7: + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: @@ -428,7 +490,7 @@ packages: '@babel/parser': 7.21.2 '@babel/types': 7.21.2 - /@babel/traverse/7.21.2: + /@babel/traverse@7.21.2: resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==} engines: {node: '>=6.9.0'} dependencies: @@ -445,7 +507,7 @@ packages: transitivePeerDependencies: - supports-color - /@babel/types/7.21.2: + /@babel/types@7.21.2: resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==} engines: {node: '>=6.9.0'} dependencies: @@ -453,11 +515,11 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@bcoe/v8-coverage/0.2.3: + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: false - /@emotion/babel-plugin/11.10.6: + /@emotion/babel-plugin@11.10.6: resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} dependencies: '@babel/helper-module-imports': 7.18.6 @@ -473,7 +535,7 @@ packages: stylis: 4.1.3 dev: false - /@emotion/cache/11.10.5: + /@emotion/cache@11.10.5: resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} dependencies: '@emotion/memoize': 0.8.0 @@ -483,21 +545,21 @@ packages: stylis: 4.1.3 dev: false - /@emotion/hash/0.9.0: + /@emotion/hash@0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: false - /@emotion/is-prop-valid/1.2.0: + /@emotion/is-prop-valid@1.2.0: resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==} dependencies: '@emotion/memoize': 0.8.0 dev: false - /@emotion/memoize/0.8.0: + /@emotion/memoize@0.8.0: resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} dev: false - /@emotion/react/11.10.6_pmekkgnqduwlme35zpnqhenc34: + /@emotion/react@11.10.6(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==} peerDependencies: '@types/react': '*' @@ -510,7 +572,7 @@ packages: '@emotion/babel-plugin': 11.10.6 '@emotion/cache': 11.10.5 '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) '@emotion/utils': 1.2.0 '@emotion/weak-memoize': 0.3.0 '@types/react': 18.0.28 @@ -518,7 +580,7 @@ packages: react: 18.2.0 dev: false - /@emotion/serialize/1.1.1: + /@emotion/serialize@1.1.1: resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} dependencies: '@emotion/hash': 0.9.0 @@ -528,11 +590,11 @@ packages: csstype: 3.1.1 dev: false - /@emotion/sheet/1.2.1: + /@emotion/sheet@1.2.1: resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} dev: false - /@emotion/styled/11.10.6_oouaibmszuch5k64ms7uxp2aia: + /@emotion/styled@11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -545,19 +607,19 @@ packages: '@babel/runtime': 7.21.0 '@emotion/babel-plugin': 11.10.6 '@emotion/is-prop-valid': 1.2.0 - '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 + '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0) '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) '@emotion/utils': 1.2.0 '@types/react': 18.0.28 react: 18.2.0 dev: false - /@emotion/unitless/0.8.0: + /@emotion/unitless@0.8.0: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false - /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@18.2.0: + /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0): resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} peerDependencies: react: '>=16.8.0' @@ -565,24 +627,15 @@ packages: react: 18.2.0 dev: false - /@emotion/utils/1.2.0: + /@emotion/utils@1.2.0: resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} dev: false - /@emotion/weak-memoize/0.3.0: + /@emotion/weak-memoize@0.3.0: resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@esbuild/android-arm/0.16.17: - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64/0.16.17: + /@esbuild/android-arm64@0.16.17: resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} cpu: [arm64] @@ -591,7 +644,16 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.16.17: + /@esbuild/android-arm@0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.16.17: resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] @@ -600,7 +662,7 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.17: + /@esbuild/darwin-arm64@0.16.17: resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] @@ -609,7 +671,7 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.17: + /@esbuild/darwin-x64@0.16.17: resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] @@ -618,7 +680,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.17: + /@esbuild/freebsd-arm64@0.16.17: resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] @@ -627,7 +689,7 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.17: + /@esbuild/freebsd-x64@0.16.17: resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] @@ -636,16 +698,7 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.17: - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64/0.16.17: + /@esbuild/linux-arm64@0.16.17: resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} cpu: [arm64] @@ -654,7 +707,16 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.16.17: + /@esbuild/linux-arm@0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.16.17: resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] @@ -663,7 +725,7 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.17: + /@esbuild/linux-loong64@0.16.17: resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] @@ -672,7 +734,7 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.17: + /@esbuild/linux-mips64el@0.16.17: resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] @@ -681,7 +743,7 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.17: + /@esbuild/linux-ppc64@0.16.17: resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] @@ -690,7 +752,7 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.17: + /@esbuild/linux-riscv64@0.16.17: resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] @@ -699,7 +761,7 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.17: + /@esbuild/linux-s390x@0.16.17: resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] @@ -708,7 +770,7 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.17: + /@esbuild/linux-x64@0.16.17: resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] @@ -717,7 +779,7 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.17: + /@esbuild/netbsd-x64@0.16.17: resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] @@ -726,7 +788,7 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.17: + /@esbuild/openbsd-x64@0.16.17: resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] @@ -735,7 +797,7 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.17: + /@esbuild/sunos-x64@0.16.17: resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] @@ -744,7 +806,7 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.17: + /@esbuild/win32-arm64@0.16.17: resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] @@ -753,7 +815,7 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.17: + /@esbuild/win32-ia32@0.16.17: resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] @@ -762,7 +824,7 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.17: + /@esbuild/win32-x64@0.16.17: resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] @@ -771,7 +833,7 @@ packages: dev: true optional: true - /@eslint/eslintrc/2.0.0: + /@eslint/eslintrc@2.0.0: resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -788,12 +850,12 @@ packages: - supports-color dev: true - /@eslint/js/8.35.0: + /@eslint/js@8.35.0: resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array/0.11.8: + /@humanwhocodes/config-array@0.11.8: resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} dependencies: @@ -804,16 +866,16 @@ packages: - supports-color dev: true - /@humanwhocodes/module-importer/1.0.1: + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -824,12 +886,12 @@ packages: resolve-from: 5.0.0 dev: false - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} dev: false - /@jest/console/29.5.0: + /@jest/console@29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -841,7 +903,7 @@ packages: slash: 3.0.0 dev: false - /@jest/core/29.5.0: + /@jest/core@29.5.0: resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -862,7 +924,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.5.0_@types+node@18.14.6 + jest-config: 29.5.0(@types/node@18.14.6) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -883,7 +945,7 @@ packages: - ts-node dev: false - /@jest/environment/29.5.0: + /@jest/environment@29.5.0: resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -893,14 +955,14 @@ packages: jest-mock: 29.5.0 dev: false - /@jest/expect-utils/29.5.0: + /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 dev: false - /@jest/expect/29.5.0: + /@jest/expect@29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -910,7 +972,7 @@ packages: - supports-color dev: false - /@jest/fake-timers/29.5.0: + /@jest/fake-timers@29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -922,7 +984,7 @@ packages: jest-util: 29.5.0 dev: false - /@jest/globals/29.5.0: + /@jest/globals@29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -934,7 +996,7 @@ packages: - supports-color dev: false - /@jest/reporters/29.5.0: + /@jest/reporters@29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -971,14 +1033,14 @@ packages: - supports-color dev: false - /@jest/schemas/29.4.3: + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.24 dev: false - /@jest/source-map/29.4.3: + /@jest/source-map@29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -987,7 +1049,7 @@ packages: graceful-fs: 4.2.10 dev: false - /@jest/test-result/29.5.0: + /@jest/test-result@29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -997,7 +1059,7 @@ packages: collect-v8-coverage: 1.0.1 dev: false - /@jest/test-sequencer/29.5.0: + /@jest/test-sequencer@29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1007,7 +1069,7 @@ packages: slash: 3.0.0 dev: false - /@jest/transform/29.5.0: + /@jest/transform@29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1030,7 +1092,7 @@ packages: - supports-color dev: false - /@jest/types/29.5.0: + /@jest/types@29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1042,14 +1104,14 @@ packages: chalk: 4.1.2 dev: false - /@jridgewell/gen-mapping/0.1.1: + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/gen-mapping/0.3.2: + /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: @@ -1057,28 +1119,28 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.17: + /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@juggle/resize-observer/3.4.0: + /@juggle/resize-observer@3.4.0: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: false - /@mui/base/5.0.0-alpha.119_zula6vjvt3wdocc4mwcxqa6nzi: + /@mui/base@5.0.0-alpha.119(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-XA5zhlYfXi67u613eIF0xRmktkatx6ERy3h+PwrMN5IcWFbgiL1guz8VpdXON+GWb8+G7B8t5oqTFIaCqaSAeA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1091,22 +1153,22 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@emotion/is-prop-valid': 1.2.0 - '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.12_react@18.2.0 + '@mui/types': 7.2.3(@types/react@18.0.28) + '@mui/utils': 5.11.12(react@18.2.0) '@popperjs/core': 2.11.6 '@types/react': 18.0.28 clsx: 1.2.1 prop-types: 15.8.1 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 dev: false - /@mui/core-downloads-tracker/5.11.12: + /@mui/core-downloads-tracker@5.11.12: resolution: {integrity: sha512-LHh8HZQ5nPVcW5QnyLwkAZ40txc/S2bzKMQ3bTO+5mjuwAJ2AzQrjZINLVy1geY7ei1pHXVqO1hcWHg/QdT44w==} dev: false - /@mui/icons-material/5.11.11_ao76n7r2cajsoyr3cbwrn7geoi: + /@mui/icons-material@5.11.11(@mui/material@5.11.12)(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-Eell3ADmQVE8HOpt/LZ3zIma8JSvPh3XgnhwZLT0k5HRqZcd6F/QDHc7xsWtgz09t+UEFvOYJXjtrwKmLdwwpw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1118,12 +1180,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@mui/material': 5.11.12_xqeqsl5kvjjtyxwyi3jhw3yuli + '@mui/material': 5.11.12(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.0.28 react: 18.2.0 dev: false - /@mui/material/5.11.12_xqeqsl5kvjjtyxwyi3jhw3yuli: + /@mui/material@5.11.12(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-M6BiIeJjySeEzWeiFJQ9pIjJy6mx5mHPWeMT99wjQdAmA2GxCQhE9A0fh6jQP4jMmYzxhOIhjsGcp0vSdpseXg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1141,25 +1203,25 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 - '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/base': 5.0.0-alpha.119_zula6vjvt3wdocc4mwcxqa6nzi + '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0) + '@mui/base': 5.0.0-alpha.119(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0) '@mui/core-downloads-tracker': 5.11.12 - '@mui/system': 5.11.12_d2lgyfpecxdc2bsiwyag5wf7ti - '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.12_react@18.2.0 + '@mui/system': 5.11.12(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react@18.2.0) + '@mui/types': 7.2.3(@types/react@18.0.28) + '@mui/utils': 5.11.12(react@18.2.0) '@types/react': 18.0.28 '@types/react-transition-group': 4.4.5 clsx: 1.2.1 csstype: 3.1.1 prop-types: 15.8.1 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 - react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) dev: false - /@mui/private-theming/5.11.12_pmekkgnqduwlme35zpnqhenc34: + /@mui/private-theming@5.11.12(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-hnJ0svNI1TPeWZ18E6DvES8PB4NyMLwal6EyXf69rTrYqT6wZPLjB+HiCYfSOCqU/fwArhupSqIIkQpDs8CkAw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1170,13 +1232,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@mui/utils': 5.11.12_react@18.2.0 + '@mui/utils': 5.11.12(react@18.2.0) '@types/react': 18.0.28 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/styled-engine/5.11.11_xqp3pgpqjlfxxa3zxu4zoc4fba: + /@mui/styled-engine@5.11.11(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0): resolution: {integrity: sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1191,14 +1253,14 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@emotion/cache': 11.10.5 - '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 - '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia + '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0) csstype: 3.1.1 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/system/5.11.12_d2lgyfpecxdc2bsiwyag5wf7ti: + /@mui/system@5.11.12(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(react@18.2.0): resolution: {integrity: sha512-sYjsXkiwKpZDC3aS6O/6KTjji0jGINLQcrD5EJ5NTkIDiLf19I4HJhnufgKqlTWNfoDBlRohuTf3TzfM06c4ug==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1215,12 +1277,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@emotion/react': 11.10.6_pmekkgnqduwlme35zpnqhenc34 - '@emotion/styled': 11.10.6_oouaibmszuch5k64ms7uxp2aia - '@mui/private-theming': 5.11.12_pmekkgnqduwlme35zpnqhenc34 - '@mui/styled-engine': 5.11.11_xqp3pgpqjlfxxa3zxu4zoc4fba - '@mui/types': 7.2.3_@types+react@18.0.28 - '@mui/utils': 5.11.12_react@18.2.0 + '@emotion/react': 11.10.6(@types/react@18.0.28)(react@18.2.0) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@18.0.28)(react@18.2.0) + '@mui/private-theming': 5.11.12(@types/react@18.0.28)(react@18.2.0) + '@mui/styled-engine': 5.11.11(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0) + '@mui/types': 7.2.3(@types/react@18.0.28) + '@mui/utils': 5.11.12(react@18.2.0) '@types/react': 18.0.28 clsx: 1.2.1 csstype: 3.1.1 @@ -1228,7 +1290,7 @@ packages: react: 18.2.0 dev: false - /@mui/types/7.2.3_@types+react@18.0.28: + /@mui/types@7.2.3(@types/react@18.0.28): resolution: {integrity: sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==} peerDependencies: '@types/react': '*' @@ -1239,7 +1301,7 @@ packages: '@types/react': 18.0.28 dev: false - /@mui/utils/5.11.12_react@18.2.0: + /@mui/utils@5.11.12(react@18.2.0): resolution: {integrity: sha512-5vH9B/v8pzkpEPO2HvGM54ToXV6cFdAn8UrvdN8TMEEwpn/ycW0jLiyBcgUlPsQ+xha7hqXCPQYHaYFDIcwaiw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1253,7 +1315,7 @@ packages: react-is: 18.2.0 dev: false - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -1261,12 +1323,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -1274,11 +1336,11 @@ packages: fastq: 1.15.0 dev: true - /@popperjs/core/2.11.6: + /@popperjs/core@2.11.6: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false - /@reduxjs/toolkit/1.9.3_k4ae6lp43ej6mezo3ztvx6pykq: + /@reduxjs/toolkit@1.9.3(react-redux@8.0.5)(react@18.2.0): resolution: {integrity: sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 @@ -1291,34 +1353,34 @@ packages: dependencies: immer: 9.0.19 react: 18.2.0 - react-redux: 8.0.5_ctrls2ti7t7iutxbwkm5ipogyy + react-redux: 8.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1) redux: 4.2.1 - redux-thunk: 2.4.2_redux@4.2.1 + redux-thunk: 2.4.2(redux@4.2.1) reselect: 4.1.7 dev: false - /@remix-run/router/1.3.3: + /@remix-run/router@1.3.3: resolution: {integrity: sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==} engines: {node: '>=14'} dev: false - /@sinclair/typebox/0.25.24: + /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: false - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: false - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 dev: false - /@slate-yjs/core/0.3.1_slate@0.91.4+yjs@13.5.51: + /@slate-yjs/core@0.3.1(slate@0.91.4)(yjs@13.5.51): resolution: {integrity: sha512-8nvS9m5FhMNONgydAfzwDCUhuoWbgzx5Bvw1/foSe+JO331UOT1xAKbUX5FzGCOunUcbRjMPXSdNyiPc0dodJg==} peerDependencies: slate: '>=0.70.0' @@ -1329,7 +1391,7 @@ packages: yjs: 13.5.51 dev: false - /@tanstack/react-virtual/3.0.0-beta.54_react@18.2.0: + /@tanstack/react-virtual@3.0.0-beta.54(react@18.2.0): resolution: {integrity: sha512-D1mDMf4UPbrtHRZZriCly5bXTBMhylslm4dhcHqTtDJ6brQcgGmk8YD9JdWBGWfGSWPKoh2x1H3e7eh+hgPXtQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -1338,16 +1400,16 @@ packages: react: 18.2.0 dev: false - /@tanstack/virtual-core/3.0.0-beta.54: + /@tanstack/virtual-core@3.0.0-beta.54: resolution: {integrity: sha512-jtkwqdP2rY2iCCDVAFuaNBH3fiEi29aTn2RhtIoky8DTTiCdc48plpHHreLwmv1PICJ4AJUUESaq3xa8fZH8+g==} dev: false - /@tauri-apps/api/1.2.0: + /@tauri-apps/api@1.2.0: resolution: {integrity: sha512-lsI54KI6HGf7VImuf/T9pnoejfgkNoXveP14pVV7XarrQ46rOejIVJLFqHI9sRReJMGdh2YuCoI3cc/yCWCsrw==} engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} dev: false - /@tauri-apps/cli-darwin-arm64/1.2.3: + /@tauri-apps/cli-darwin-arm64@1.2.3: resolution: {integrity: sha512-phJN3fN8FtZZwqXg08bcxfq1+X1JSDglLvRxOxB7VWPq+O5SuB8uLyssjJsu+PIhyZZnIhTGdjhzLSFhSXfLsw==} engines: {node: '>= 10'} cpu: [arm64] @@ -1356,7 +1418,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-darwin-x64/1.2.3: + /@tauri-apps/cli-darwin-x64@1.2.3: resolution: {integrity: sha512-jFZ/y6z8z6v4yliIbXKBXA7BJgtZVMsITmEXSuD6s5+eCOpDhQxbRkr6CA+FFfr+/r96rWSDSgDenDQuSvPAKw==} engines: {node: '>= 10'} cpu: [x64] @@ -1365,7 +1427,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm-gnueabihf/1.2.3: + /@tauri-apps/cli-linux-arm-gnueabihf@1.2.3: resolution: {integrity: sha512-C7h5vqAwXzY0kRGSU00Fj8PudiDWFCiQqqUNI1N+fhCILrzWZB9TPBwdx33ZfXKt/U4+emdIoo/N34v3TiAOmQ==} engines: {node: '>= 10'} cpu: [arm] @@ -1374,7 +1436,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-gnu/1.2.3: + /@tauri-apps/cli-linux-arm64-gnu@1.2.3: resolution: {integrity: sha512-buf1c8sdkuUzVDkGPQpyUdAIIdn5r0UgXU6+H5fGPq/Xzt5K69JzXaeo6fHsZEZghbV0hOK+taKV4J0m30UUMQ==} engines: {node: '>= 10'} cpu: [arm64] @@ -1383,7 +1445,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-musl/1.2.3: + /@tauri-apps/cli-linux-arm64-musl@1.2.3: resolution: {integrity: sha512-x88wPS9W5xAyk392vc4uNHcKBBvCp0wf4H9JFMF9OBwB7vfd59LbQCFcPSu8f0BI7bPrOsyHqspWHuFL8ojQEA==} engines: {node: '>= 10'} cpu: [arm64] @@ -1392,7 +1454,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-gnu/1.2.3: + /@tauri-apps/cli-linux-x64-gnu@1.2.3: resolution: {integrity: sha512-ZMz1jxEVe0B4/7NJnlPHmwmSIuwiD6ViXKs8F+OWWz2Y4jn5TGxWKFg7DLx5OwQTRvEIZxxT7lXHi5CuTNAxKg==} engines: {node: '>= 10'} cpu: [x64] @@ -1401,7 +1463,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-musl/1.2.3: + /@tauri-apps/cli-linux-x64-musl@1.2.3: resolution: {integrity: sha512-B/az59EjJhdbZDzawEVox0LQu2ZHCZlk8rJf85AMIktIUoAZPFbwyiUv7/zjzA/sY6Nb58OSJgaPL2/IBy7E0A==} engines: {node: '>= 10'} cpu: [x64] @@ -1410,7 +1472,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-ia32-msvc/1.2.3: + /@tauri-apps/cli-win32-ia32-msvc@1.2.3: resolution: {integrity: sha512-ypdO1OdC5ugNJAKO2m3sb1nsd+0TSvMS9Tr5qN/ZSMvtSduaNwrcZ3D7G/iOIanrqu/Nl8t3LYlgPZGBKlw7Ng==} engines: {node: '>= 10'} cpu: [ia32] @@ -1419,7 +1481,7 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-x64-msvc/1.2.3: + /@tauri-apps/cli-win32-x64-msvc@1.2.3: resolution: {integrity: sha512-CsbHQ+XhnV/2csOBBDVfH16cdK00gNyNYUW68isedmqcn8j+s0e9cQ1xXIqi+Hue3awp8g3ImYN5KPepf3UExw==} engines: {node: '>= 10'} cpu: [x64] @@ -1428,7 +1490,7 @@ packages: dev: true optional: true - /@tauri-apps/cli/1.2.3: + /@tauri-apps/cli@1.2.3: resolution: {integrity: sha512-erxtXuPhMEGJPBtnhPILD4AjuT81GZsraqpFvXAmEJZ2p8P6t7MVBifCL8LznRknznM3jn90D3M8RNBP3wcXTw==} engines: {node: '>= 10'} hasBin: true @@ -1444,7 +1506,7 @@ packages: '@tauri-apps/cli-win32-x64-msvc': 1.2.3 dev: true - /@types/babel__core/7.20.0: + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: '@babel/parser': 7.21.2 @@ -1454,141 +1516,162 @@ packages: '@types/babel__traverse': 7.18.3 dev: false - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.21.2 dev: false - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.21.2 '@babel/types': 7.21.2 dev: false - /@types/babel__traverse/7.18.3: + /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: '@babel/types': 7.21.2 dev: false - /@types/google-protobuf/3.15.6: + /@types/google-protobuf@3.15.6: resolution: {integrity: sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==} dev: true - /@types/graceful-fs/4.1.6: + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: '@types/node': 18.14.6 dev: false - /@types/hoist-non-react-statics/3.3.1: + /@types/hoist-non-react-statics@3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: '@types/react': 18.0.28 hoist-non-react-statics: 3.3.2 dev: false - /@types/is-hotkey/0.1.7: + /@types/is-hotkey@0.1.7: resolution: {integrity: sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==} - /@types/istanbul-lib-coverage/2.0.4: + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} dev: false - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: false - /@types/istanbul-reports/3.0.1: + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: false - /@types/json-schema/7.0.11: + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/lodash/4.14.191: + /@types/lodash.memoize@4.1.7: + resolution: {integrity: sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==} + dependencies: + '@types/lodash': 4.14.191 + dev: false + + /@types/lodash@4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} dev: false - /@types/node/18.14.6: + /@types/node@18.14.6: resolution: {integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==} - /@types/parse-json/4.0.0: + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: false - /@types/prettier/2.7.2: + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: false - /@types/prop-types/15.7.5: + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - /@types/react-dom/18.0.11: + /@types/react-beautiful-dnd@13.1.4: + resolution: {integrity: sha512-4bIBdzOr0aavN+88q3C7Pgz+xkb7tz3whORYrmSj77wfVEMfiWiooIwVWFR7KM2e+uGTe5BVrXqSfb0aHeflJA==} + dependencies: + '@types/react': 18.0.28 + dev: true + + /@types/react-dom@18.0.11: resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} dependencies: '@types/react': 18.0.28 - /@types/react-is/17.0.3: + /@types/react-is@17.0.3: resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==} dependencies: '@types/react': 18.0.28 dev: false - /@types/react-transition-group/4.4.5: + /@types/react-redux@7.1.25: + resolution: {integrity: sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==} + dependencies: + '@types/hoist-non-react-statics': 3.3.1 + '@types/react': 18.0.28 + hoist-non-react-statics: 3.3.2 + redux: 4.2.1 + dev: false + + /@types/react-transition-group@4.4.5: resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} dependencies: '@types/react': 18.0.28 dev: false - /@types/react/18.0.28: + /@types/react@18.0.28: resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 csstype: 3.1.1 - /@types/scheduler/0.16.2: + /@types/scheduler@0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} - /@types/semver/7.3.13: + /@types/semver@7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} dev: true - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: false - /@types/use-sync-external-store/0.0.3: + /@types/use-sync-external-store@0.0.3: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: false - /@types/utf8/3.0.1: + /@types/utf8@3.0.1: resolution: {integrity: sha512-1EkWuw7rT3BMz2HpmcEOr/HL61mWNA6Ulr/KdbXR9AI0A55wD4Qfv8hizd8Q1DnknSIzzDvQmvvY/guvX7jjZA==} dev: true - /@types/uuid/9.0.1: + /@types/uuid@9.0.1: resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==} dev: true - /@types/yargs-parser/21.0.0: + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: false - /@types/yargs/17.0.22: + /@types/yargs@17.0.22: resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 dev: false - /@typescript-eslint/eslint-plugin/5.54.0_6mj2wypvdnknez7kws2nfdgupi: + /@typescript-eslint/eslint-plugin@5.54.0(@typescript-eslint/parser@5.54.0)(eslint@8.35.0)(typescript@4.9.5): resolution: {integrity: sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1599,10 +1682,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu + '@typescript-eslint/parser': 5.54.0(eslint@8.35.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.54.0 - '@typescript-eslint/type-utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu - '@typescript-eslint/utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu + '@typescript-eslint/type-utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.35.0 grapheme-splitter: 1.0.4 @@ -1610,13 +1693,13 @@ packages: natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 + tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: + /@typescript-eslint/parser@5.54.0(eslint@8.35.0)(typescript@4.9.5): resolution: {integrity: sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1628,7 +1711,7 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/types': 5.54.0 - '@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 + '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5) debug: 4.3.4 eslint: 8.35.0 typescript: 4.9.5 @@ -1636,7 +1719,7 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.54.0: + /@typescript-eslint/scope-manager@5.54.0: resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -1644,7 +1727,7 @@ packages: '@typescript-eslint/visitor-keys': 5.54.0 dev: true - /@typescript-eslint/type-utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: + /@typescript-eslint/type-utils@5.54.0(eslint@8.35.0)(typescript@4.9.5): resolution: {integrity: sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1654,22 +1737,22 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 - '@typescript-eslint/utils': 5.54.0_ycpbpc6yetojsgtrx3mwntkhsu + '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.54.0(eslint@8.35.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.35.0 - tsutils: 3.21.0_typescript@4.9.5 + tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.54.0: + /@typescript-eslint/types@5.54.0: resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5: + /@typescript-eslint/typescript-estree@5.54.0(typescript@4.9.5): resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1684,13 +1767,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 + tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.54.0_ycpbpc6yetojsgtrx3mwntkhsu: + /@typescript-eslint/utils@5.54.0(eslint@8.35.0)(typescript@4.9.5): resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1700,17 +1783,17 @@ packages: '@types/semver': 7.3.13 '@typescript-eslint/scope-manager': 5.54.0 '@typescript-eslint/types': 5.54.0 - '@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 + '@typescript-eslint/typescript-estree': 5.54.0(typescript@4.9.5) eslint: 8.35.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.35.0 + eslint-utils: 3.0.0(eslint@8.35.0) semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.54.0: + /@typescript-eslint/visitor-keys@5.54.0: resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -1718,23 +1801,27 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@vitejs/plugin-react/3.1.0_vite@4.1.4: + /@vitejs/plugin-react@3.1.0(vite@4.1.4): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.1.0-beta.0 dependencies: '@babel/core': 7.21.0 - '@babel/plugin-transform-react-jsx-self': 7.21.0_@babel+core@7.21.0 - '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.21.0 + '@babel/plugin-transform-react-jsx-self': 7.21.0(@babel/core@7.21.0) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.21.0) magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.1.4_@types+node@18.14.6 + vite: 4.1.4(@types/node@18.14.6) transitivePeerDependencies: - supports-color dev: true - /acorn-jsx/5.3.2_acorn@8.8.2: + /@wojtekmaj/date-utils@1.1.3: + resolution: {integrity: sha512-rHrDuTl1cx5LYo8F4K4HVauVjwzx4LwrKfEk4br4fj4nK8JjJZ8IG6a6pBHkYmPLBQHCOEDwstb0WNXMGsmdOw==} + dev: false + + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1742,7 +1829,7 @@ packages: acorn: 8.8.2 dev: true - /acorn-node/1.8.2: + /acorn-node@1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} dependencies: acorn: 7.4.1 @@ -1750,24 +1837,24 @@ packages: xtend: 4.0.2 dev: true - /acorn-walk/7.2.0: + /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: + /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.8.2: + /acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -1776,56 +1863,56 @@ packages: uri-js: 4.4.1 dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: false - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: false - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arg/5.0.2: + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: false - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-includes/3.1.6: + /array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} dependencies: @@ -1836,12 +1923,12 @@ packages: is-string: 1.0.7 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array.prototype.flatmap/1.3.1: + /array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} dependencies: @@ -1851,7 +1938,7 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /array.prototype.tosorted/1.1.1: + /array.prototype.tosorted@1.1.1: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 @@ -1861,7 +1948,7 @@ packages: get-intrinsic: 1.2.0 dev: true - /autoprefixer/10.4.13_postcss@8.4.21: + /autoprefixer@10.4.13(postcss@8.4.21): resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -1877,12 +1964,12 @@ packages: postcss-value-parser: 4.2.0 dev: true - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /babel-jest/29.5.0_@babel+core@7.21.0: + /babel-jest@29.5.0(@babel/core@7.21.0): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1892,7 +1979,7 @@ packages: '@jest/transform': 29.5.0 '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.21.0 + babel-preset-jest: 29.5.0(@babel/core@7.21.0) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -1900,7 +1987,7 @@ packages: - supports-color dev: false - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: @@ -1913,7 +2000,7 @@ packages: - supports-color dev: false - /babel-plugin-jest-hoist/29.5.0: + /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -1923,7 +2010,7 @@ packages: '@types/babel__traverse': 7.18.3 dev: false - /babel-plugin-macros/3.1.0: + /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: @@ -1932,27 +2019,27 @@ packages: resolve: 1.22.1 dev: false - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.0: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.21.0): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.21.0 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.0 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.0 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.0 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.0 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.0) dev: false - /babel-preset-jest/29.5.0_@babel+core@7.21.0: + /babel-preset-jest@29.5.0(@babel/core@7.21.0): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1960,30 +2047,30 @@ packages: dependencies: '@babel/core': 7.21.0 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.0) dev: false - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist/4.21.5: + /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1991,48 +2078,48 @@ packages: caniuse-lite: 1.0.30001460 electron-to-chromium: 1.4.320 node-releases: 2.0.10 - update-browserslist-db: 1.0.10_browserslist@4.21.5 + update-browserslist-db: 1.0.10(browserslist@4.21.5) - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 dev: false - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false - /call-bind/1.0.2: + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.0 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camelcase-css/2.0.1: + /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: false - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: false - /caniuse-lite/1.0.30001460: + /caniuse-lite@1.0.30001460: resolution: {integrity: sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ==} - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -2040,19 +2127,19 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: false - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -2067,16 +2154,16 @@ packages: fsevents: 2.3.2 dev: true - /ci-info/3.8.0: + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} dev: false - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: false - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -2085,52 +2172,52 @@ packages: wrap-ansi: 7.0.0 dev: false - /clsx/1.2.1: + /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} dev: false - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: false - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: false - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /compute-scroll-into-view/1.0.20: + /compute-scroll-into-view@1.0.20: resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} dev: false - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - /convert-source-map/2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: false - /cosmiconfig/7.1.0: + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -2141,7 +2228,7 @@ packages: yaml: 1.10.2 dev: false - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -2149,16 +2236,26 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /cssesc/3.0.0: + /css-box-model@1.2.1: + resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + dependencies: + tiny-invariant: 1.0.6 + dev: false + + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true dev: true - /csstype/3.1.1: + /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - /debug/4.3.4: + /dayjs@1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + dev: false + + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -2169,20 +2266,20 @@ packages: dependencies: ms: 2.1.2 - /dedent/0.7.0: + /dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: false - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.3.0: + /deepmerge@4.3.0: resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: false - /define-properties/1.2.0: + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: @@ -2190,16 +2287,16 @@ packages: object-keys: 1.1.1 dev: true - /defined/1.0.1: + /defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true - /detect-newline/3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: false - /detective/5.2.1: + /detective@5.2.1: resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} engines: {node: '>=0.8.0'} hasBin: true @@ -2209,71 +2306,71 @@ packages: minimist: 1.2.8 dev: true - /didyoumean/1.2.2: + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true - /diff-sequences/29.4.3: + /diff-sequences@29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: false - /dir-glob/3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /direction/1.0.4: + /direction@1.0.4: resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} hasBin: true dev: false - /dlv/1.1.3: + /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true - /doctrine/2.1.0: + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /dom-helpers/5.2.1: + /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: '@babel/runtime': 7.21.0 csstype: 3.1.1 dev: false - /electron-to-chromium/1.4.320: + /electron-to-chromium@1.4.320: resolution: {integrity: sha512-h70iRscrNluMZPVICXYl5SSB+rBKo22XfuIS1ER0OQxQZpKTnFpuS6coj7wY9M/3trv7OR88rRMOlKmRvDty7Q==} - /emittery/0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: false - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: false - /es-abstract/1.21.1: + /es-abstract@1.21.1: resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: @@ -2312,7 +2409,7 @@ packages: which-typed-array: 1.1.9 dev: true - /es-set-tostringtag/2.0.1: + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} dependencies: @@ -2321,13 +2418,13 @@ packages: has-tostringtag: 1.0.0 dev: true - /es-shim-unscopables/1.0.0: + /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -2336,7 +2433,7 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild/0.16.17: + /esbuild@0.16.17: resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true @@ -2366,24 +2463,24 @@ packages: '@esbuild/win32-x64': 0.16.17 dev: true - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} dev: false - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-plugin-react/7.32.2_eslint@8.35.0: + /eslint-plugin-react@7.32.2(eslint@8.35.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: @@ -2407,7 +2504,7 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -2415,7 +2512,7 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope/7.1.1: + /eslint-scope@7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -2423,7 +2520,7 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.35.0: + /eslint-utils@3.0.0(eslint@8.35.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: @@ -2433,17 +2530,17 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys/2.1.0: + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.3.0: + /eslint-visitor-keys@3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.35.0: + /eslint@8.35.0: resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -2460,7 +2557,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.35.0 + eslint-utils: 3.0.0(eslint@8.35.0) eslint-visitor-keys: 3.3.0 espree: 9.4.1 esquery: 1.5.0 @@ -2492,56 +2589,56 @@ packages: - supports-color dev: true - /espree/9.4.1: + /espree@9.4.1: resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.2 - acorn-jsx: 5.3.2_acorn@8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) eslint-visitor-keys: 3.3.0 dev: true - /esprima/4.0.1: + /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true dev: false - /esquery/1.5.0: + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} dev: false - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -2556,12 +2653,12 @@ packages: strip-final-newline: 2.0.0 dev: false - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} dev: false - /expect/29.5.0: + /expect@29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -2572,11 +2669,11 @@ packages: jest-util: 29.5.0 dev: false - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob/3.2.12: + /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: @@ -2587,43 +2684,43 @@ packages: micromatch: 4.0.5 dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.15.0: + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: false - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /find-root/1.1.0: + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -2631,7 +2728,7 @@ packages: path-exists: 4.0.0 dev: false - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -2639,7 +2736,7 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -2647,34 +2744,34 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.2.7: + /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /fraction.js/4.2.0: + /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents/2.3.2: + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /function.prototype.name/1.1.5: + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} dependencies: @@ -2684,20 +2781,20 @@ packages: functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: false - /get-intrinsic/1.2.0: + /get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 @@ -2705,17 +2802,17 @@ packages: has-symbols: 1.0.3 dev: true - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: false - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: false - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: @@ -2723,21 +2820,28 @@ packages: get-intrinsic: 1.2.0 dev: true - /glob-parent/5.1.2: + /get-user-locale@2.2.1: + resolution: {integrity: sha512-3814zipTZ2MvczOcppEXB3jXu+0HWwj5WmPI6//SeCnUIUaRXu7W4S54eQZTEPadlMZefE+jAlPOn+zY3tD4Qw==} + dependencies: + '@types/lodash.memoize': 4.1.7 + lodash.memoize: 4.1.2 + dev: false + + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob-parent/6.0.2: + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -2747,25 +2851,25 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals/13.20.0: + /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.0 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -2777,115 +2881,115 @@ packages: slash: 3.0.0 dev: true - /google-protobuf/3.21.2: + /google-protobuf@3.21.2: resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} dev: false - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.0 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: false - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: get-intrinsic: 1.2.0 dev: true - /has-proto/1.0.1: + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - /hoist-non-react-statics/3.3.2: + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: false - /html-parse-stringify/3.0.1: + /html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} dependencies: void-elements: 3.1.0 dev: false - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} dev: false - /i18next-browser-languagedetector/7.0.1: + /i18next-browser-languagedetector@7.0.1: resolution: {integrity: sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==} dependencies: '@babel/runtime': 7.21.0 dev: false - /i18next/22.4.10: + /i18next@22.4.10: resolution: {integrity: sha512-3EqgGK6fAJRjnGgfkNSStl4mYLCjUoJID338yVyLMj5APT67HUtWoqSayZewiiC5elzMUB1VEUwcmSCoeQcNEA==} dependencies: '@babel/runtime': 7.21.0 dev: false - /ignore/5.2.4: + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /immer/9.0.19: + /immer@9.0.19: resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} dev: false - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -2894,20 +2998,20 @@ packages: resolve-cwd: 3.0.0 dev: false - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot/1.0.5: + /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: @@ -2916,7 +3020,7 @@ packages: side-channel: 1.0.4 dev: true - /is-array-buffer/3.0.2: + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: call-bind: 1.0.2 @@ -2924,24 +3028,24 @@ packages: is-typed-array: 1.1.10 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -2949,80 +3053,80 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.11.0: + /is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: false - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: false - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-hotkey/0.1.8: + /is-hotkey@0.1.8: resolution: {integrity: sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==} dev: false - /is-hotkey/0.2.0: + /is-hotkey@0.2.0: resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} dev: false - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-path-inside/3.0.3: + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true - /is-plain-object/5.0.0: + /is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} dev: false - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -3030,32 +3134,32 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: false - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.10: + /is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} dependencies: @@ -3066,25 +3170,25 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /isomorphic.js/0.2.5: + /isomorphic.js@0.2.5: resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} dev: false - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: false - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: @@ -3097,7 +3201,7 @@ packages: - supports-color dev: false - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -3106,7 +3210,7 @@ packages: supports-color: 7.2.0 dev: false - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: @@ -3117,7 +3221,7 @@ packages: - supports-color dev: false - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: @@ -3125,7 +3229,7 @@ packages: istanbul-lib-report: 3.0.0 dev: false - /jest-changed-files/29.5.0: + /jest-changed-files@29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3133,7 +3237,7 @@ packages: p-limit: 3.1.0 dev: false - /jest-circus/29.5.0: + /jest-circus@29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3161,7 +3265,7 @@ packages: - supports-color dev: false - /jest-cli/29.5.0_@types+node@18.14.6: + /jest-cli@29.5.0(@types/node@18.14.6): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3178,7 +3282,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0_@types+node@18.14.6 + jest-config: 29.5.0(@types/node@18.14.6) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -3189,7 +3293,7 @@ packages: - ts-node dev: false - /jest-config/29.5.0_@types+node@18.14.6: + /jest-config@29.5.0(@types/node@18.14.6): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3205,7 +3309,7 @@ packages: '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 '@types/node': 18.14.6 - babel-jest: 29.5.0_@babel+core@7.21.0 + babel-jest: 29.5.0(@babel/core@7.21.0) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.0 @@ -3228,7 +3332,7 @@ packages: - supports-color dev: false - /jest-diff/29.5.0: + /jest-diff@29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3238,14 +3342,14 @@ packages: pretty-format: 29.5.0 dev: false - /jest-docblock/29.4.3: + /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: false - /jest-each/29.5.0: + /jest-each@29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3256,7 +3360,7 @@ packages: pretty-format: 29.5.0 dev: false - /jest-environment-node/29.5.0: + /jest-environment-node@29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3268,12 +3372,12 @@ packages: jest-util: 29.5.0 dev: false - /jest-get-type/29.4.3: + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: false - /jest-haste-map/29.5.0: + /jest-haste-map@29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3292,7 +3396,7 @@ packages: fsevents: 2.3.2 dev: false - /jest-leak-detector/29.5.0: + /jest-leak-detector@29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3300,7 +3404,7 @@ packages: pretty-format: 29.5.0 dev: false - /jest-matcher-utils/29.5.0: + /jest-matcher-utils@29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3310,7 +3414,7 @@ packages: pretty-format: 29.5.0 dev: false - /jest-message-util/29.5.0: + /jest-message-util@29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3325,7 +3429,7 @@ packages: stack-utils: 2.0.6 dev: false - /jest-mock/29.5.0: + /jest-mock@29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3334,7 +3438,7 @@ packages: jest-util: 29.5.0 dev: false - /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: + /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -3346,12 +3450,12 @@ packages: jest-resolve: 29.5.0 dev: false - /jest-regex-util/29.4.3: + /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: false - /jest-resolve-dependencies/29.5.0: + /jest-resolve-dependencies@29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3361,14 +3465,14 @@ packages: - supports-color dev: false - /jest-resolve/29.5.0: + /jest-resolve@29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 resolve: 1.22.1 @@ -3376,7 +3480,7 @@ packages: slash: 3.0.0 dev: false - /jest-runner/29.5.0: + /jest-runner@29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3405,7 +3509,7 @@ packages: - supports-color dev: false - /jest-runtime/29.5.0: + /jest-runtime@29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3435,14 +3539,14 @@ packages: - supports-color dev: false - /jest-snapshot/29.5.0: + /jest-snapshot@29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.21.0 '@babel/generator': 7.21.1 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.21.0 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.21.0 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.21.0) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.21.0) '@babel/traverse': 7.21.2 '@babel/types': 7.21.2 '@jest/expect-utils': 29.5.0 @@ -3450,7 +3554,7 @@ packages: '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.3 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.21.0) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.10 @@ -3466,7 +3570,7 @@ packages: - supports-color dev: false - /jest-util/29.5.0: + /jest-util@29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3478,7 +3582,7 @@ packages: picomatch: 2.3.1 dev: false - /jest-validate/29.5.0: + /jest-validate@29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3490,7 +3594,7 @@ packages: pretty-format: 29.5.0 dev: false - /jest-watcher/29.5.0: + /jest-watcher@29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3504,7 +3608,7 @@ packages: string-length: 4.0.2 dev: false - /jest-worker/29.5.0: + /jest-worker@29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -3514,7 +3618,7 @@ packages: supports-color: 8.1.1 dev: false - /jest/29.5.0_@types+node@18.14.6: + /jest@29.5.0(@types/node@18.14.6): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3527,21 +3631,21 @@ packages: '@jest/core': 29.5.0 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_@types+node@18.14.6 + jest-cli: 29.5.0(@types/node@18.14.6) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: false - /js-sdsl/4.3.0: + /js-sdsl@4.3.0: resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: @@ -3549,36 +3653,36 @@ packages: esprima: 4.0.1 dev: false - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true - /jsesc/2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: false - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5/2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - /jsx-ast-utils/3.3.3: + /jsx-ast-utils@3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} dependencies: @@ -3586,17 +3690,17 @@ packages: object.assign: 4.1.4 dev: true - /kleur/3.0.3: + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: false - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: false - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -3604,7 +3708,7 @@ packages: type-check: 0.4.0 dev: true - /lib0/0.2.73: + /lib0@0.2.73: resolution: {integrity: sha512-aJJIElCLWnHMcYZPtsM07QoSfHwpxCy4VUzBYGXFYEmh/h2QS5uZNbCCfL0CqnkOE30b7Tp9DVfjXag+3qzZjQ==} engines: {node: '>=14'} hasBin: true @@ -3612,168 +3716,176 @@ packages: isomorphic.js: 0.2.5 dev: false - /lilconfig/2.1.0: + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: false - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: false - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash.merge/4.6.2: + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false + + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false - /loose-envify/1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 - /lru-cache/5.1.1: + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - /magic-string/0.27.0: + /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /make-dir/3.1.0: + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: semver: 6.3.0 dev: false - /makeerror/1.0.12: + /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 dev: false - /merge-stream/2.0.0: + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: false + + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: false - /merge2/1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: false - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /nanoid/3.3.4: + /nanoid@3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /nanoid/4.0.1: + /nanoid@4.0.1: resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} engines: {node: ^14 || ^16 || >=18} hasBin: true dev: false - /natural-compare-lite/1.4.0: + /natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false - /node-releases/2.0.10: + /node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /normalize-range/0.1.2: + /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 dev: false - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-hash/3.0.0: + /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} dev: true - /object-inspect/1.12.3: + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: @@ -3783,7 +3895,7 @@ packages: object-keys: 1.1.1 dev: true - /object.entries/1.1.6: + /object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} engines: {node: '>= 0.4'} dependencies: @@ -3792,7 +3904,7 @@ packages: es-abstract: 1.21.1 dev: true - /object.fromentries/2.0.6: + /object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} dependencies: @@ -3801,14 +3913,14 @@ packages: es-abstract: 1.21.1 dev: true - /object.hasown/1.1.2: + /object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.2.0 es-abstract: 1.21.1 dev: true - /object.values/1.1.6: + /object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: @@ -3817,19 +3929,19 @@ packages: es-abstract: 1.21.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: false - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -3841,45 +3953,45 @@ packages: word-wrap: 1.2.3 dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: false - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: false - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: false - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -3889,50 +4001,50 @@ packages: lines-and-columns: 1.2.4 dev: false - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pirates/4.0.5: + /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} dev: false - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 dev: false - /postcss-import/14.1.0_postcss@8.4.21: + /postcss-import@14.1.0(postcss@8.4.21): resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -3944,7 +4056,7 @@ packages: resolve: 1.22.1 dev: true - /postcss-js/4.0.1_postcss@8.4.21: + /postcss-js@4.0.1(postcss@8.4.21): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: @@ -3954,7 +4066,7 @@ packages: postcss: 8.4.21 dev: true - /postcss-load-config/3.1.4_postcss@8.4.21: + /postcss-load-config@3.1.4(postcss@8.4.21): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -3971,7 +4083,7 @@ packages: yaml: 1.10.2 dev: true - /postcss-nested/6.0.0_postcss@8.4.21: + /postcss-nested@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} peerDependencies: @@ -3981,7 +4093,7 @@ packages: postcss-selector-parser: 6.0.11 dev: true - /postcss-selector-parser/6.0.11: + /postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} dependencies: @@ -3989,11 +4101,11 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss-value-parser/4.2.0: + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss/8.4.21: + /postcss@8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: @@ -4002,12 +4114,12 @@ packages: source-map-js: 1.0.2 dev: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-tailwindcss/0.2.4_prettier@2.8.4: + /prettier-plugin-tailwindcss@0.2.4(prettier@2.8.4): resolution: {integrity: sha512-wMyugRI2yD8gqmMpZSS8kTA0gGeKozX/R+w8iWE+yiCZL09zY0SvfiHfHabNhjGhzxlQ2S2VuTxPE3T72vppCQ==} engines: {node: '>=12.17.0'} peerDependencies: @@ -4062,13 +4174,13 @@ packages: prettier: 2.8.4 dev: true - /prettier/2.8.4: + /prettier@2.8.4: resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.5.0: + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4077,7 +4189,7 @@ packages: react-is: 18.2.0 dev: false - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: @@ -4085,14 +4197,14 @@ packages: sisteransi: 1.0.5 dev: false - /prop-types/15.8.1: + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - /protoc-gen-ts/0.8.6_ss7alqtodw6rv4lluxhr36xjoa: + /protoc-gen-ts@0.8.6(google-protobuf@3.21.2)(typescript@4.9.5): resolution: {integrity: sha512-66oeorGy4QBvYjQGd/gaeOYyFqKyRmRgTpofmnw8buMG0P7A0jQjoKSvKJz5h5tNUaVkIzvGBUTRVGakrhhwpA==} hasBin: true peerDependencies: @@ -4103,25 +4215,63 @@ packages: typescript: 4.9.5 dev: false - /punycode/2.3.0: + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pure-rand/6.0.1: + /pure-rand@6.0.1: resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: false - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-lru/5.1.1: + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} dev: true - /react-dom/18.2.0_react@18.2.0: + /raf-schd@4.0.3: + resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} + dev: false + + /react-beautiful-dnd@13.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==} + peerDependencies: + react: ^16.8.5 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.21.0 + css-box-model: 1.2.1 + memoize-one: 5.2.1 + raf-schd: 4.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-redux: 7.2.9(react-dom@18.2.0)(react@18.2.0) + redux: 4.2.1 + use-memo-one: 1.1.3(react@18.2.0) + transitivePeerDependencies: + - react-native + dev: false + + /react-calendar@4.2.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-T5oKXD+KLy/g6bmJJkZ7E9wj0iRMesWMZcrC7q2kI6ybOsu9NlPQx8uXJzG4A4C3Sh5Xi0deznyzWIVsUpF8tA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@types/react': 18.0.28 + '@wojtekmaj/date-utils': 1.1.3 + clsx: 1.2.1 + get-user-locale: 2.2.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 @@ -4131,7 +4281,7 @@ packages: scheduler: 0.23.0 dev: false - /react-error-boundary/3.1.4_react@18.2.0: + /react-error-boundary@3.1.4(react@18.2.0): resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} engines: {node: '>=10', npm: '>=6'} peerDependencies: @@ -4141,7 +4291,7 @@ packages: react: 18.2.0 dev: false - /react-i18next/12.2.0_3yopsigl4h4eb2nqrqfsy65uwi: + /react-i18next@12.2.0(i18next@22.4.10)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} peerDependencies: i18next: '>= 19.0.0' @@ -4158,17 +4308,43 @@ packages: html-parse-stringify: 3.0.1 i18next: 22.4.10 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react-is/16.13.1: + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-is/18.2.0: + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false - /react-redux/8.0.5_ctrls2ti7t7iutxbwkm5ipogyy: + /react-redux@7.2.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==} + peerDependencies: + react: ^16.8.3 || ^17 || ^18 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.21.0 + '@types/react-redux': 7.1.25 + hoist-non-react-statics: 3.3.2 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 17.0.2 + dev: false + + /react-redux@8.0.5(@types/react-dom@18.0.11)(@types/react@18.0.28)(react-dom@18.2.0)(react@18.2.0)(redux@4.2.1): resolution: {integrity: sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==} peerDependencies: '@types/react': ^16.8 || ^17.0 || ^18.0 @@ -4196,18 +4372,18 @@ packages: '@types/use-sync-external-store': 0.0.3 hoist-non-react-statics: 3.3.2 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 redux: 4.2.1 - use-sync-external-store: 1.2.0_react@18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /react-refresh/0.14.0: + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} dev: true - /react-router-dom/6.8.2_biqbaboplfbrettd7655fr4n2y: + /react-router-dom@6.8.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==} engines: {node: '>=14'} peerDependencies: @@ -4216,11 +4392,11 @@ packages: dependencies: '@remix-run/router': 1.3.3 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-router: 6.8.2_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-router: 6.8.2(react@18.2.0) dev: false - /react-router/6.8.2_react@18.2.0: + /react-router@6.8.2(react@18.2.0): resolution: {integrity: sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==} engines: {node: '>=14'} peerDependencies: @@ -4230,7 +4406,7 @@ packages: react: 18.2.0 dev: false - /react-transition-group/4.4.5_biqbaboplfbrettd7655fr4n2y: + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' @@ -4241,40 +4417,40 @@ packages: loose-envify: 1.4.0 prop-types: 15.8.1 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /react/18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /react18-input-otp/1.1.2_biqbaboplfbrettd7655fr4n2y: + /react18-input-otp@1.1.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-E21NiPh/KH67Bq/uEAm78E8H+croiGAyX5WcXfX49qh0im1iKrk/3RCKCTESG6WUoJYyh/fj5JY0UrHm+Mm0eQ==} peerDependencies: react: 16.2.0 - 18 react-dom: 16.2.0 - 18 dependencies: react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /read-cache/1.0.0: + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /redux-thunk/2.4.2_redux@4.2.1: + /redux-thunk@2.4.2(redux@4.2.1): resolution: {integrity: sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==} peerDependencies: redux: ^4 @@ -4282,17 +4458,17 @@ packages: redux: 4.2.1 dev: false - /redux/4.2.1: + /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: '@babel/runtime': 7.21.0 dev: false - /regenerator-runtime/0.13.11: + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: false - /regexp.prototype.flags/1.4.3: + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: @@ -4301,42 +4477,42 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: false - /reselect/4.1.7: + /reselect@4.1.7: resolution: {integrity: sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==} dev: false - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 dev: false - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} dev: false - /resolve.exports/2.0.0: + /resolve.exports@2.0.0: resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} dev: false - /resolve/1.22.1: + /resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: @@ -4344,7 +4520,7 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve/2.0.0-next.4: + /resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true dependencies: @@ -4353,19 +4529,19 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /rollup/3.18.0: + /rollup@3.18.0: resolution: {integrity: sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -4373,19 +4549,19 @@ packages: fsevents: 2.3.2 dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 dev: false - /safe-regex-test/1.0.0: + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 @@ -4393,40 +4569,40 @@ packages: is-regex: 1.1.4 dev: true - /scheduler/0.23.0: + /scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 dev: false - /scroll-into-view-if-needed/2.2.31: + /scroll-into-view-if-needed@2.2.31: resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} dependencies: compute-scroll-into-view: 1.0.20 dev: false - /semver/6.3.0: + /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true - /semver/7.3.8: + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 @@ -4434,19 +4610,19 @@ packages: object-inspect: 1.12.3 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: false - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: false - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /slate-react/0.91.9_6tgy34rvmll7duwkm4ydcekf3u: + /slate-react@0.91.9(react-dom@18.2.0)(react@18.2.0)(slate@0.91.4): resolution: {integrity: sha512-e3DvmZuUEKKrIB8Kb4RmJ+qzIL2IVJjN2NM/IHRi8W5MmjAtd8yhv46Ewz1sCf0F7uRODS5xvrQsJJAftQhH4Q==} peerDependencies: react: '>=16.8.0' @@ -4461,13 +4637,13 @@ packages: is-plain-object: 5.0.0 lodash: 4.17.21 react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 2.2.31 slate: 0.91.4 tiny-invariant: 1.0.6 dev: false - /slate/0.91.4: + /slate@0.91.4: resolution: {integrity: sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw==} dependencies: immer: 9.0.19 @@ -4475,40 +4651,40 @@ packages: tiny-warning: 1.0.3 dev: false - /source-map-js/1.0.2: + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} dev: true - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: false - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: false - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: false - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false - /stack-utils/2.0.6: + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 dev: false - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: @@ -4516,7 +4692,7 @@ packages: strip-ansi: 6.0.1 dev: false - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -4525,7 +4701,7 @@ packages: strip-ansi: 6.0.1 dev: false - /string.prototype.matchall/4.0.8: + /string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 @@ -4538,7 +4714,7 @@ packages: side-channel: 1.0.4 dev: true - /string.prototype.trimend/1.0.6: + /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 @@ -4546,7 +4722,7 @@ packages: es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.6: + /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 @@ -4554,54 +4730,54 @@ packages: es-abstract: 1.21.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} dev: false - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} dev: false - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stylis/4.1.3: + /stylis@4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} dev: false - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: false - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /tailwindcss/3.2.7_postcss@8.4.21: + /tailwindcss@3.2.7(postcss@8.4.21): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} hasBin: true @@ -4623,10 +4799,10 @@ packages: object-hash: 3.0.0 picocolors: 1.0.0 postcss: 8.4.21 - postcss-import: 14.1.0_postcss@8.4.21 - postcss-js: 4.0.1_postcss@8.4.21 - postcss-load-config: 3.1.4_postcss@8.4.21 - postcss-nested: 6.0.0_postcss@8.4.21 + postcss-import: 14.1.0(postcss@8.4.21) + postcss-js: 4.0.1(postcss@8.4.21) + postcss-load-config: 3.1.4(postcss@8.4.21) + postcss-nested: 6.0.0(postcss@8.4.21) postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 @@ -4635,7 +4811,7 @@ packages: - ts-node dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -4644,45 +4820,45 @@ packages: minimatch: 3.1.2 dev: false - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /tiny-invariant/1.0.6: + /tiny-invariant@1.0.6: resolution: {integrity: sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==} dev: false - /tiny-warning/1.0.3: + /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: false - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: false - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /ts-results/3.3.0: + /ts-results@3.3.0: resolution: {integrity: sha512-FWqxGX2NHp5oCyaMd96o2y2uMQmSu8Dey6kvyuFdRJ2AzfmWo3kWa4UsPlCGlfQ/qu03m09ZZtppMoY8EMHuiA==} dev: false - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: false - /tsutils/3.21.0_typescript@4.9.5: + /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: @@ -4692,29 +4868,29 @@ packages: typescript: 4.9.5 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: false - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: false - /typed-array-length/1.0.4: + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 @@ -4722,12 +4898,12 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript/4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.2 @@ -4736,7 +4912,7 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: + /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: @@ -4746,13 +4922,21 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true - /use-sync-external-store/1.2.0_react@18.2.0: + /use-memo-one@1.1.3(react@18.2.0): + resolution: {integrity: sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + + /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4760,20 +4944,20 @@ packages: react: 18.2.0 dev: false - /utf8/3.0.0: + /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: false - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /uuid/9.0.0: + /uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} hasBin: true dev: true - /v8-to-istanbul/9.1.0: + /v8-to-istanbul@9.1.0: resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: @@ -4782,7 +4966,7 @@ packages: convert-source-map: 1.9.0 dev: false - /vite/4.1.4_@types+node@18.14.6: + /vite@4.1.4(@types/node@18.14.6): resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -4816,18 +5000,18 @@ packages: fsevents: 2.3.2 dev: true - /void-elements/3.1.0: + /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} dev: false - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: false - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -4837,7 +5021,7 @@ packages: is-symbol: 1.0.4 dev: true - /which-typed-array/1.1.9: + /which-typed-array@1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} dependencies: @@ -4849,19 +5033,19 @@ packages: is-typed-array: 1.1.10 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -4870,10 +5054,10 @@ packages: strip-ansi: 6.0.1 dev: false - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: @@ -4881,12 +5065,12 @@ packages: signal-exit: 3.0.7 dev: false - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y-indexeddb/9.0.9_yjs@13.5.51: + /y-indexeddb@9.0.9(yjs@13.5.51): resolution: {integrity: sha512-GcJbiJa2eD5hankj46Hea9z4hbDnDjvh1fT62E5SpZRsv8GcEemw34l1hwI2eknGcv5Ih9JfusT37JLx9q3LFg==} peerDependencies: yjs: ^13.0.0 @@ -4895,33 +5079,33 @@ packages: yjs: 13.5.51 dev: false - /y-protocols/1.0.5: + /y-protocols@1.0.5: resolution: {integrity: sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==} dependencies: lib0: 0.2.73 dev: false - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: false - /yallist/3.1.1: + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml/1.10.2: + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: false - /yargs/17.7.1: + /yargs@17.7.1: resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: @@ -4934,13 +5118,13 @@ packages: yargs-parser: 21.1.1 dev: false - /yjs/13.5.51: + /yjs@13.5.51: resolution: {integrity: sha512-F1Nb3z3TdandD80IAeQqgqy/2n9AhDLcXoBhZvCUX1dNVe0ef7fIwi6MjSYaGAYF2Ev8VcLcsGnmuGGOl7AWbw==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} dependencies: lib0: 0.2.73 dev: false - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/frontend/appflowy_tauri/src/appflowy_app/App.tsx b/frontend/appflowy_tauri/src/appflowy_app/App.tsx index ffdc433918..9589cfa2d6 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/App.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/App.tsx @@ -1,6 +1,6 @@ import { Routes, Route, BrowserRouter } from 'react-router-dom'; -import { TestColors } from './components/TestColors/TestColors'; +import { ColorPalette } from './components/tests/ColorPalette'; import { Provider } from 'react-redux'; import { store } from './stores/store'; import { DocumentPage } from './views/DocumentPage'; @@ -14,6 +14,8 @@ import { ErrorHandlerPage } from './components/error/ErrorHandlerPage'; import initializeI18n from './stores/i18n/initializeI18n'; import { TestAPI } from './components/tests/TestAPI'; import { GetStarted } from './components/auth/GetStarted/GetStarted'; +import { ErrorBoundary } from 'react-error-boundary'; +import { AllIcons } from '$app/components/tests/AllIcons'; initializeI18n(); @@ -21,20 +23,22 @@ const App = () => { return ( - - }> - } /> - } /> - } /> - } /> - } /> - - }> - }> - }> - }> - - + + + }> + } /> + } /> + } /> + } /> + } /> + } /> + + }> + }> + }> + }> + + ); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/TestColors/TestColors.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/TestColors/TestColors.tsx deleted file mode 100644 index a09962216f..0000000000 --- a/frontend/appflowy_tauri/src/appflowy_app/components/TestColors/TestColors.tsx +++ /dev/null @@ -1,44 +0,0 @@ -export const TestColors = () => { - return ( -
-

Main

-
-
-
-
-
-
-
-
-
-

Tint

-
-
-
-
-
-
-
-
-
-
-
-

Shades

-
-
-
-
-
-
-
-
-

Surface

-
-
-
-
-
-
-
- ); -}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptions.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptions.tsx index 63aeeab62a..9308141527 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptions.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptions.tsx @@ -21,7 +21,7 @@ export const CellOptions = ({
onClick()} - className={'flex flex-wrap items-center gap-2 px-4 py-2 text-xs text-black'} + className={'flex w-full flex-wrap items-center gap-2 px-4 py-2 text-xs text-black'} > {data?.select_options?.map((option, index) => (
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptionsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptionsPopup.tsx index 0a2b1cf09b..48ff2de44f 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptionsPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/CellOptionsPopup.tsx @@ -9,10 +9,10 @@ import { useTranslation } from 'react-i18next'; import { Details2Svg } from '$app/components/_shared/svg/Details2Svg'; import { CheckmarkSvg } from '$app/components/_shared/svg/CheckmarkSvg'; import { CloseSvg } from '$app/components/_shared/svg/CloseSvg'; -import useOutsideClick from '$app/components/_shared/useOutsideClick'; import { SelectOptionCellBackendService } from '$app/stores/effects/database/cell/select_option_bd_svc'; import { useAppSelector } from '$app/stores/store'; -import { ISelectOptionType } from '$app/stores/reducers/database/slice'; +import { ISelectOption, ISelectOptionType } from '$app/stores/reducers/database/slice'; +import { PopupWindow } from '$app/components/_shared/PopupWindow'; export const CellOptionsPopup = ({ top, @@ -21,6 +21,7 @@ export const CellOptionsPopup = ({ cellCache, fieldController, onOutsideClick, + openOptionDetail, }: { top: number; left: number; @@ -28,27 +29,19 @@ export const CellOptionsPopup = ({ cellCache: CellCache; fieldController: FieldController; onOutsideClick: () => void; + openOptionDetail: (_left: number, _top: number, _select_option: SelectOptionPB) => void; }) => { - const ref = useRef(null); + const inputRef = useRef(null); const { t } = useTranslation(''); - const [adjustedTop, setAdjustedTop] = useState(-100); const [value, setValue] = useState(''); - const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + const { data } = useCell(cellIdentifier, cellCache, fieldController); const databaseStore = useAppSelector((state) => state.database); useEffect(() => { - if (!ref.current) return; - const { height } = ref.current.getBoundingClientRect(); - if (top + height + 40 > window.innerHeight) { - setAdjustedTop(window.innerHeight - height - 40); - } else { - setAdjustedTop(top); + if (inputRef?.current) { + inputRef.current.focus(); } - }, [ref, window, top, left]); - - useOutsideClick(ref, async () => { - onOutsideClick(); - }); + }, [inputRef]); const onKeyDown: KeyboardEventHandler = async (e) => { if (e.key === 'Enter' && value.length > 0) { @@ -63,11 +56,7 @@ export const CellOptionsPopup = ({ }; const onToggleOptionClick = async (option: SelectOptionPB) => { - if ( - (data as SelectOptionCellDataPB | undefined)?.select_options?.find( - (selectedOption) => selectedOption.id === option.id - ) - ) { + if ((data as SelectOptionCellDataPB)?.select_options?.find((selectedOption) => selectedOption.id === option.id)) { await new SelectOptionCellBackendService(cellIdentifier).unselectOption([option.id]); } else { await new SelectOptionCellBackendService(cellIdentifier).selectOption([option.id]); @@ -75,23 +64,37 @@ export const CellOptionsPopup = ({ setValue(''); }; - useEffect(() => { - console.log('loaded data: ', data); - console.log('have stored ', databaseStore.fields[cellIdentifier.fieldId]); - }, [data]); + const onKeyDownWrapper: KeyboardEventHandler = (e) => { + if (e.key === 'Escape') { + onOutsideClick(); + } + }; + + const onOptionDetailClick = (e: any, option: ISelectOption) => { + e.stopPropagation(); + let target = e.target as HTMLElement; + + while (!(target instanceof HTMLButtonElement)) { + if (target.parentElement === null) return; + target = target.parentElement; + } + + const selectOption = new SelectOptionPB({ + id: option.selectOptionId, + name: option.title, + color: option.color || SelectOptionColorPB.Purple, + }); + + const { right: _left, top: _top } = target.getBoundingClientRect(); + openOptionDetail(_left, _top, selectOption); + }; return ( -
-
+ +
- {(data as SelectOptionCellDataPB | undefined)?.select_options?.map((option, index) => ( + {(data as SelectOptionCellDataPB)?.select_options?.map((option, index) => (
{option?.name || ''}
setValue(e.target.value)} @@ -110,7 +114,7 @@ export const CellOptionsPopup = ({
{value.length}/30
-
{t('grid.selectOption.panelTitle') || ''}
+
{t('grid.selectOption.panelTitle') || ''}
{(databaseStore.fields[cellIdentifier.fieldId]?.fieldOptions as ISelectOptionType).selectOptions.map( (option, index) => ( @@ -131,14 +135,14 @@ export const CellOptionsPopup = ({ >
{option.title}
- {(data as SelectOptionCellDataPB | undefined)?.select_options?.find( + {(data as SelectOptionCellDataPB)?.select_options?.find( (selectedOption) => selectedOption.id === option.selectOptionId ) && ( )} -
@@ -147,6 +151,6 @@ export const CellOptionsPopup = ({ )}
-
+
); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/ChangeFieldTypePopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/ChangeFieldTypePopup.tsx index da7e8b0375..e55b6bf70d 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/ChangeFieldTypePopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/ChangeFieldTypePopup.tsx @@ -1,8 +1,7 @@ import { FieldType } from '@/services/backend'; import { FieldTypeIcon } from '$app/components/_shared/EditRow/FieldTypeIcon'; import { FieldTypeName } from '$app/components/_shared/EditRow/FieldTypeName'; -import { useEffect, useMemo, useRef, useState } from 'react'; -import useOutsideClick from '$app/components/_shared/useOutsideClick'; +import { PopupWindow } from '$app/components/_shared/PopupWindow'; const typesOrder: FieldType[] = [ FieldType.RichText, @@ -17,39 +16,17 @@ const typesOrder: FieldType[] = [ export const ChangeFieldTypePopup = ({ top, - right, + left, onClick, onOutsideClick, }: { top: number; - right: number; + left: number; onClick: (newType: FieldType) => void; onOutsideClick: () => void; }) => { - const ref = useRef(null); - const [adjustedTop, setAdjustedTop] = useState(-100); - useOutsideClick(ref, async () => { - onOutsideClick(); - }); - - useEffect(() => { - if (!ref.current) return; - const { height } = ref.current.getBoundingClientRect(); - if (top + height > window.innerHeight) { - setAdjustedTop(window.innerHeight - height); - } else { - setAdjustedTop(top); - } - }, [ref, window, top, right]); - return ( -
+
{typesOrder.map((t, i) => (
-
+ ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/DatePickerPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/DatePickerPopup.tsx index d7af34ec23..867af9e06f 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/DatePickerPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/DatePickerPopup.tsx @@ -1,15 +1,17 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; import { CellCache } from '$app/stores/effects/database/cell/cell_cache'; import { FieldController } from '$app/stores/effects/database/field/field_controller'; -import useOutsideClick from '$app/components/_shared/useOutsideClick'; import Calendar from 'react-calendar'; import dayjs from 'dayjs'; import { ClockSvg } from '$app/components/_shared/svg/ClockSvg'; import { MoreSvg } from '$app/components/_shared/svg/MoreSvg'; import { EditorUncheckSvg } from '$app/components/_shared/svg/EditorUncheckSvg'; import { useCell } from '$app/components/_shared/database-hooks/useCell'; +import { CalendarData } from '$app/stores/effects/database/cell/controller_builder'; +import { DateCellDataPB } from '@/services/backend'; +import { PopupWindow } from '$app/components/_shared/PopupWindow'; export const DatePickerPopup = ({ left, @@ -27,47 +29,27 @@ export const DatePickerPopup = ({ onOutsideClick: () => void; }) => { const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); - const ref = useRef(null); - const [adjustedTop, setAdjustedTop] = useState(-100); - // const [value, setValue] = useState(); const { t } = useTranslation(''); const [selectedDate, setSelectedDate] = useState(new Date()); useEffect(() => { - if (!ref.current) return; - const { height } = ref.current.getBoundingClientRect(); - if (top + height + 40 > window.innerHeight) { - setAdjustedTop(top - height - 40); - } else { - setAdjustedTop(top); - } - }, [ref, window, top, left]); + const date_pb = data as DateCellDataPB | undefined; + if (!date_pb || !date_pb?.date.length) return; - useOutsideClick(ref, async () => { - onOutsideClick(); - }); - - useEffect(() => { - // console.log((data as DateCellDataPB).date); - // setSelectedDate(new Date((data as DateCellDataPB).date)); + // should be changed after we can modify date format + setSelectedDate(dayjs(date_pb.date, 'MMM DD, YYYY').toDate()); }, [data]); - const onChange = (v: Date | null | (Date | null)[]) => { + const onChange = async (v: Date | null | (Date | null)[]) => { if (v instanceof Date) { - console.log(dayjs(v).format('YYYY-MM-DD')); setSelectedDate(v); - // void cellController?.saveCellData(new DateCellDataPB({ date: dayjs(v).format('YYYY-MM-DD') })); + const date = new CalendarData(dayjs(v).add(dayjs().utcOffset(), 'minutes').toDate(), false); + await cellController?.saveCellData(date); } }; return ( -
+
onChange(d)} value={selectedDate} />
@@ -92,6 +74,6 @@ export const DatePickerPopup = ({
-
+ ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellDate.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellDate.tsx index faf24eaf3a..e4661ceeaf 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellDate.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellDate.tsx @@ -17,7 +17,7 @@ export const EditCellDate = ({ }; return ( -
onClick()} className={'px-4 py-2'}> +
onClick()} className={'w-full px-4 py-2'}> {data?.date || <> }
); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellOptionPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellOptionPopup.tsx new file mode 100644 index 0000000000..62f809cf80 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellOptionPopup.tsx @@ -0,0 +1,195 @@ +import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; +import { KeyboardEventHandler, useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { SelectOptionColorPB, SelectOptionPB } from '@/services/backend'; +import { getBgColor } from '$app/components/_shared/getColor'; +import { SelectOptionCellBackendService } from '$app/stores/effects/database/cell/select_option_bd_svc'; +import { TrashSvg } from '$app/components/_shared/svg/TrashSvg'; +import { CheckmarkSvg } from '$app/components/_shared/svg/CheckmarkSvg'; +import { PopupWindow } from '$app/components/_shared/PopupWindow'; + +export const EditCellOptionPopup = ({ + left, + top, + cellIdentifier, + editingSelectOption, + onOutsideClick, +}: { + left: number; + top: number; + cellIdentifier: CellIdentifier; + editingSelectOption: SelectOptionPB; + onOutsideClick: () => void; +}) => { + const inputRef = useRef(null); + const { t } = useTranslation(''); + const [value, setValue] = useState(''); + + useEffect(() => { + setValue(editingSelectOption.name); + }, [editingSelectOption]); + + const onKeyDown: KeyboardEventHandler = async (e) => { + if (e.key === 'Enter' && value.length > 0) { + await new SelectOptionCellBackendService(cellIdentifier).createOption({ name: value }); + setValue(''); + } + }; + + const onKeyDownWrapper: KeyboardEventHandler = (e) => { + if (e.key === 'Escape') { + onOutsideClick(); + } + }; + + const onBlur = async () => { + const svc = new SelectOptionCellBackendService(cellIdentifier); + await svc.updateOption( + new SelectOptionPB({ + id: editingSelectOption.id, + color: editingSelectOption.color, + name: value, + }) + ); + }; + + const onColorClick = async (color: SelectOptionColorPB) => { + const svc = new SelectOptionCellBackendService(cellIdentifier); + await svc.updateOption( + new SelectOptionPB({ + id: editingSelectOption.id, + color, + name: editingSelectOption.name, + }) + ); + }; + + const onDeleteOptionClick = async () => { + const svc = new SelectOptionCellBackendService(cellIdentifier); + await svc.deleteOption([editingSelectOption]); + }; + + return ( + { + await onBlur(); + onOutsideClick(); + }} + left={left} + top={top} + > +
+
+ setValue(e.target.value)} + onKeyDown={onKeyDown} + onBlur={() => onBlur()} + /> +
{value.length}/30
+
+ +
+
{t('grid.selectOption.colorPanelTitle')}
+
+ onColorClick(SelectOptionColorPB.Purple)} + bgColor={getBgColor(SelectOptionColorPB.Purple)} + checked={editingSelectOption.color === SelectOptionColorPB.Purple} + > + onColorClick(SelectOptionColorPB.Pink)} + bgColor={getBgColor(SelectOptionColorPB.Pink)} + checked={editingSelectOption.color === SelectOptionColorPB.Pink} + > + onColorClick(SelectOptionColorPB.LightPink)} + bgColor={getBgColor(SelectOptionColorPB.LightPink)} + checked={editingSelectOption.color === SelectOptionColorPB.LightPink} + > + onColorClick(SelectOptionColorPB.Orange)} + bgColor={getBgColor(SelectOptionColorPB.Orange)} + checked={editingSelectOption.color === SelectOptionColorPB.Orange} + > + onColorClick(SelectOptionColorPB.Yellow)} + bgColor={getBgColor(SelectOptionColorPB.Yellow)} + checked={editingSelectOption.color === SelectOptionColorPB.Yellow} + > + onColorClick(SelectOptionColorPB.Lime)} + bgColor={getBgColor(SelectOptionColorPB.Lime)} + checked={editingSelectOption.color === SelectOptionColorPB.Lime} + > + onColorClick(SelectOptionColorPB.Green)} + bgColor={getBgColor(SelectOptionColorPB.Green)} + checked={editingSelectOption.color === SelectOptionColorPB.Green} + > + onColorClick(SelectOptionColorPB.Aqua)} + bgColor={getBgColor(SelectOptionColorPB.Aqua)} + checked={editingSelectOption.color === SelectOptionColorPB.Aqua} + > + onColorClick(SelectOptionColorPB.Blue)} + bgColor={getBgColor(SelectOptionColorPB.Blue)} + checked={editingSelectOption.color === SelectOptionColorPB.Blue} + > +
+
+
+ ); +}; + +const ColorItem = ({ + title, + bgColor, + onClick, + checked, +}: { + title: string; + bgColor: string; + onClick: () => void; + checked: boolean; +}) => { + return ( +
onClick()} + > +
+
+ {title} +
+ {checked && ( + + + + )} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellWrapper.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellWrapper.tsx index 64dcebf98a..7b23bc3819 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellWrapper.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCellWrapper.tsx @@ -27,9 +27,9 @@ export const EditCellWrapper = ({ cellIdentifier: CellIdentifier; cellCache: CellCache; fieldController: FieldController; - onEditFieldClick: (top: number, right: number) => void; - onEditOptionsClick: (left: number, top: number) => void; - onEditDateClick: (left: number, top: number) => void; + onEditFieldClick: (cell: CellIdentifier, left: number, top: number) => void; + onEditOptionsClick: (cell: CellIdentifier, left: number, top: number) => void; + onEditDateClick: (cell: CellIdentifier, left: number, top: number) => void; }) => { const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); const databaseStore = useAppSelector((state) => state.database); @@ -38,7 +38,7 @@ export const EditCellWrapper = ({ const onClick = () => { if (!el.current) return; const { top, right } = el.current.getBoundingClientRect(); - onEditFieldClick(top, right); + onEditFieldClick(cellIdentifier, right, top); }; return ( @@ -70,17 +70,23 @@ export const EditCellWrapper = ({ cellIdentifier.fieldType === FieldType.Checklist) && cellController && ( onEditOptionsClick(cellIdentifier, left, top)} > )} {cellIdentifier.fieldType === FieldType.Checkbox && cellController && ( - + )} {cellIdentifier.fieldType === FieldType.DateTime && ( - + onEditDateClick(cellIdentifier, left, top)} + > )} {cellIdentifier.fieldType === FieldType.Number && cellController && ( @@ -88,7 +94,7 @@ export const EditCellWrapper = ({ )} {cellIdentifier.fieldType === FieldType.URL && cellController && ( - + )} {cellIdentifier.fieldType === FieldType.RichText && cellController && ( diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCheckboxCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCheckboxCell.tsx index 25b3a50ff5..6ea688af54 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCheckboxCell.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditCheckboxCell.tsx @@ -1,22 +1,26 @@ import { EditorCheckSvg } from '$app/components/_shared/svg/EditorCheckSvg'; import { EditorUncheckSvg } from '$app/components/_shared/svg/EditorUncheckSvg'; -import { CellController } from '$app/stores/effects/database/cell/cell_controller'; +import { CheckboxCellController } from '$app/stores/effects/database/cell/controller_builder'; export const EditCheckboxCell = ({ data, cellController, }: { - data: boolean | undefined; - cellController: CellController; + data: 'Yes' | 'No' | undefined; + cellController: CheckboxCellController; }) => { const toggleValue = async () => { - await cellController?.saveCellData(!data); + if (data === 'Yes') { + await cellController?.saveCellData('No'); + } else { + await cellController?.saveCellData('Yes'); + } }; return (
toggleValue()} className={'block px-4 py-2'}>
); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditFieldPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditFieldPopup.tsx index 4231aac264..3b1f171cc5 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditFieldPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditFieldPopup.tsx @@ -1,5 +1,4 @@ import { useEffect, useRef, useState } from 'react'; -import useOutsideClick from '$app/components/_shared/useOutsideClick'; import { TrashSvg } from '$app/components/_shared/svg/TrashSvg'; import { FieldTypeIcon } from '$app/components/_shared/EditRow/FieldTypeIcon'; import { FieldTypeName } from '$app/components/_shared/EditRow/FieldTypeName'; @@ -10,10 +9,11 @@ import { FieldInfo } from '$app/stores/effects/database/field/field_controller'; import { MoreSvg } from '$app/components/_shared/svg/MoreSvg'; import { useAppSelector } from '$app/stores/store'; import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; +import { PopupWindow } from '$app/components/_shared/PopupWindow'; export const EditFieldPopup = ({ top, - right, + left, cellIdentifier, viewId, onOutsideClick, @@ -21,7 +21,7 @@ export const EditFieldPopup = ({ changeFieldTypeClick, }: { top: number; - right: number; + left: number; cellIdentifier: CellIdentifier; viewId: string; onOutsideClick: () => void; @@ -30,31 +30,13 @@ export const EditFieldPopup = ({ }) => { const databaseStore = useAppSelector((state) => state.database); const { t } = useTranslation(''); - const ref = useRef(null); const changeTypeButtonRef = useRef(null); const [name, setName] = useState(''); - const [adjustedTop, setAdjustedTop] = useState(-100); - - useOutsideClick(ref, async () => { - await save(); - onOutsideClick(); - }); - useEffect(() => { setName(databaseStore.fields[cellIdentifier.fieldId].title); }, [databaseStore, cellIdentifier]); - useEffect(() => { - if (!ref.current) return; - const { height } = ref.current.getBoundingClientRect(); - if (top + height > window.innerHeight) { - setAdjustedTop(window.innerHeight - height); - } else { - setAdjustedTop(top); - } - }, [ref, window, top, right]); - const save = async () => { if (!fieldInfo) return; const controller = new TypeOptionController(viewId, Some(fieldInfo)); @@ -78,12 +60,14 @@ export const EditFieldPopup = ({ }; return ( -
{ + await save(); + onOutsideClick(); + }} + left={left} + top={top} >
-
+ ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditRow.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditRow.tsx index 780120164e..1a6f7a8a2b 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditRow.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/EditRow/EditRow.tsx @@ -11,10 +11,11 @@ import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; import { ChangeFieldTypePopup } from '$app/components/_shared/EditRow/ChangeFieldTypePopup'; import { TypeOptionController } from '$app/stores/effects/database/field/type_option/type_option_controller'; import { Some } from 'ts-results'; -import { FieldType } from '@/services/backend'; +import { FieldType, SelectOptionPB } from '@/services/backend'; import { CellOptionsPopup } from '$app/components/_shared/EditRow/CellOptionsPopup'; import { DatePickerPopup } from '$app/components/_shared/EditRow/DatePickerPopup'; import { DragDropContext, Droppable, OnDragEndResponder } from 'react-beautiful-dnd'; +import { EditCellOptionPopup } from '$app/components/_shared/EditRow/EditCellOptionPopup'; export const EditRow = ({ onClose, @@ -34,11 +35,11 @@ export const EditRow = ({ const [editingCell, setEditingCell] = useState(null); const [showFieldEditor, setShowFieldEditor] = useState(false); const [editFieldTop, setEditFieldTop] = useState(0); - const [editFieldRight, setEditFieldRight] = useState(0); + const [editFieldLeft, setEditFieldLeft] = useState(0); const [showChangeFieldTypePopup, setShowChangeFieldTypePopup] = useState(false); const [changeFieldTypeTop, setChangeFieldTypeTop] = useState(0); - const [changeFieldTypeRight, setChangeFieldTypeRight] = useState(0); + const [changeFieldTypeLeft, setChangeFieldTypeLeft] = useState(0); const [showChangeOptionsPopup, setShowChangeOptionsPopup] = useState(false); const [changeOptionsTop, setChangeOptionsTop] = useState(0); @@ -48,6 +49,12 @@ export const EditRow = ({ const [datePickerTop, setDatePickerTop] = useState(0); const [datePickerLeft, setDatePickerLeft] = useState(0); + const [showEditCellOption, setShowEditCellOption] = useState(false); + const [editCellOptionTop, setEditCellOptionTop] = useState(0); + const [editCellOptionLeft, setEditCellOptionLeft] = useState(0); + + const [editingSelectOption, setEditingSelectOption] = useState(); + useEffect(() => { setUnveil(true); }, []); @@ -59,10 +66,10 @@ export const EditRow = ({ }, 300); }; - const onEditFieldClick = (cellIdentifier: CellIdentifier, top: number, right: number) => { + const onEditFieldClick = (cellIdentifier: CellIdentifier, left: number, top: number) => { setEditingCell(cellIdentifier); setEditFieldTop(top); - setEditFieldRight(right); + setEditFieldLeft(left + 10); setShowFieldEditor(true); }; @@ -74,7 +81,7 @@ export const EditRow = ({ const onChangeFieldTypeClick = (buttonTop: number, buttonRight: number) => { setChangeFieldTypeTop(buttonTop); - setChangeFieldTypeRight(buttonRight); + setChangeFieldTypeLeft(buttonRight + 30); setShowChangeFieldTypePopup(true); }; @@ -95,17 +102,24 @@ export const EditRow = ({ const onEditOptionsClick = async (cellIdentifier: CellIdentifier, left: number, top: number) => { setEditingCell(cellIdentifier); setChangeOptionsLeft(left); - setChangeOptionsTop(top); + setChangeOptionsTop(top + 40); setShowChangeOptionsPopup(true); }; const onEditDateClick = async (cellIdentifier: CellIdentifier, left: number, top: number) => { setEditingCell(cellIdentifier); setDatePickerLeft(left); - setDatePickerTop(top); + setDatePickerTop(top + 40); setShowDatePicker(true); }; + const onOpenOptionDetailClick = (_left: number, _top: number, _select_option: SelectOptionPB) => { + setEditingSelectOption(_select_option); + setShowEditCellOption(true); + setEditCellOptionLeft(_left); + setEditCellOptionTop(_top); + }; + const onDragEnd: OnDragEndResponder = (result) => { if (!result.destination?.index) return; void controller.moveField({ @@ -120,8 +134,14 @@ export const EditRow = ({ className={`fixed inset-0 z-10 flex items-center justify-center bg-black/30 backdrop-blur-sm transition-opacity duration-300 ${ unveil ? 'opacity-100' : 'opacity-0' }`} + onClick={() => onCloseClick()} > -
+
{ + e.stopPropagation(); + }} + className={`relative flex h-[90%] w-[70%] flex-col gap-8 rounded-xl bg-white px-8 pb-4 pt-12`} + >
onCloseClick()} className={'absolute top-4 right-4'}>
@@ -172,7 +190,7 @@ export const EditRow = ({ {showFieldEditor && editingCell && ( changeFieldType(newType)} onOutsideClick={() => setShowChangeFieldTypePopup(false)} > @@ -196,6 +214,7 @@ export const EditRow = ({ cellCache={controller.databaseViewCache.getRowCache().getCellCache()} fieldController={controller.fieldController} onOutsideClick={() => setShowChangeOptionsPopup(false)} + openOptionDetail={onOpenOptionDetailClick} > )} {showDatePicker && editingCell && ( @@ -208,6 +227,17 @@ export const EditRow = ({ onOutsideClick={() => setShowDatePicker(false)} > )} + {showEditCellOption && editingCell && editingSelectOption && ( + { + setShowEditCellOption(false); + }} + > + )}
); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/LanguageSelectPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/LanguageSelectPopup.tsx index f73ddb2bca..04b31036a9 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/LanguageSelectPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/LanguageSelectPopup.tsx @@ -1,4 +1,4 @@ -import { IPopupItem, Popup } from './Popup'; +import { IPopupItem, PopupSelect } from './PopupSelect'; import i18n from 'i18next'; const supportedLanguages: { key: string; title: string }[] = [ @@ -37,11 +37,11 @@ export const LanguageSelectPopup = ({ onClose }: { onClose: () => void }) => { icon: <>, })); return ( - + > ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/Popup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupSelect.tsx similarity index 64% rename from frontend/appflowy_tauri/src/appflowy_app/components/_shared/Popup.tsx rename to frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupSelect.tsx index d317322e17..02d0e783c5 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/Popup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupSelect.tsx @@ -2,12 +2,12 @@ import { MouseEvent, ReactNode, useRef } from 'react'; import useOutsideClick from './useOutsideClick'; export interface IPopupItem { - icon: ReactNode; + icon: ReactNode | (() => JSX.Element); title: string; onClick: () => void; } -export const Popup = ({ +export const PopupSelect = ({ items, className = '', onOutsideClick, @@ -31,18 +31,20 @@ export const Popup = ({ return (
{items.map((item, index) => ( ))}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupWindow.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupWindow.tsx new file mode 100644 index 0000000000..bcc36db61c --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/PopupWindow.tsx @@ -0,0 +1,51 @@ +import { ReactNode, useEffect, useRef, useState } from 'react'; +import useOutsideClick from '$app/components/_shared/useOutsideClick'; + +export const PopupWindow = ({ + children, + className, + onOutsideClick, + left, + top, +}: { + children: ReactNode; + className: string; + onOutsideClick: () => void; + left: number; + top: number; +}) => { + const ref = useRef(null); + useOutsideClick(ref, onOutsideClick); + + const [adjustedTop, setAdjustedTop] = useState(-100); + const [adjustedLeft, setAdjustedLeft] = useState(-100); + + useEffect(() => { + if (!ref.current) return; + const { height, width } = ref.current.getBoundingClientRect(); + if (top + height > window.innerHeight) { + setAdjustedTop(window.innerHeight - height); + } else { + setAdjustedTop(top); + } + if (left + width > window.innerWidth) { + setAdjustedLeft(window.innerWidth - width); + } else { + setAdjustedLeft(left); + } + }, [ref, left, top, window]); + + return ( +
+ {children} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts index e39dc29ec0..c065386533 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/database-hooks/useDatabase.ts @@ -56,7 +56,15 @@ export const useDatabase = (viewId: string, type?: ViewLayoutPB) => { void loadFields(fieldInfos); }, }); - await controller.open(); + + const openResult = await controller.open(); + if (openResult.ok) { + setRows( + openResult.val.map((pb) => { + return new RowInfo(viewId, controller.fieldController.fieldInfos, pb); + }) + ); + } if (type === ViewLayoutPB.Board) { const fieldId = await controller.getGroupByFieldId(); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/EyeClosedSvg.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/EyeClosedSvg.tsx index baa5684f42..d4d50668d3 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/EyeClosedSvg.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/EyeClosedSvg.tsx @@ -1,4 +1,4 @@ -export const EyeClosed = () => { +export const EyeClosedSvg = () => { return ( { +export const EyeOpenSvg = () => { return ( { + return ( + + + + + + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupByFieldSvg.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupByFieldSvg.tsx new file mode 100644 index 0000000000..960e1bad2a --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupByFieldSvg.tsx @@ -0,0 +1,26 @@ +export const GroupByFieldSvg = () => { + return ( + + + + + + + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupBySvg.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupBySvg.tsx new file mode 100644 index 0000000000..32b21884b5 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/_shared/svg/GroupBySvg.tsx @@ -0,0 +1,11 @@ +export const GroupBySvg = () => { + return ( + + + + + + + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/auth/Login/Login.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/auth/Login/Login.tsx index baca0a5711..4e76839e97 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/auth/Login/Login.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/auth/Login/Login.tsx @@ -1,6 +1,6 @@ import { AppflowyLogo } from '../../_shared/svg/AppflowyLogo'; -import { EyeClosed } from '../../_shared/svg/EyeClosedSvg'; -import { EyeOpened } from '../../_shared/svg/EyeOpenSvg'; +import { EyeClosedSvg } from '../../_shared/svg/EyeClosedSvg'; +import { EyeOpenSvg } from '../../_shared/svg/EyeOpenSvg'; import { useLogin } from './Login.hooks'; import { Link } from 'react-router-dom'; import { Button } from '../../_shared/Button'; @@ -55,7 +55,7 @@ export const Login = () => { className='absolute right-0 top-0 flex h-full w-12 items-center justify-center ' onClick={onTogglePassword} > - {showPassword ? : } + {showPassword ? : }
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/auth/SignUp/SignUp.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/auth/SignUp/SignUp.tsx index 6b6a24ae9f..5ba6e768f3 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/auth/SignUp/SignUp.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/auth/SignUp/SignUp.tsx @@ -1,6 +1,6 @@ import { AppflowyLogo } from '../../_shared/svg/AppflowyLogo'; -import { EyeClosed } from '../../_shared/svg/EyeClosedSvg'; -import { EyeOpened } from '../../_shared/svg/EyeOpenSvg'; +import { EyeClosedSvg } from '../../_shared/svg/EyeClosedSvg'; +import { EyeOpenSvg } from '../../_shared/svg/EyeOpenSvg'; import { useSignUp } from './SignUp.hooks'; import { Link } from 'react-router-dom'; @@ -71,7 +71,7 @@ export const SignUp = () => { onClick={onTogglePassword} type='button' > - {showPassword ? : } + {showPassword ? : }
@@ -89,7 +89,7 @@ export const SignUp = () => { onClick={onToggleConfirmPassword} type='button' > - {showConfirmPassword ? : } + {showConfirmPassword ? : }
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx index b4b00d1796..2e73a0170c 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/Board.tsx @@ -1,6 +1,5 @@ -import { SettingsSvg } from '../_shared/svg/SettingsSvg'; import { SearchInput } from '../_shared/SearchInput'; -import { BoardBlock } from './BoardBlock'; +import { BoardGroup } from './BoardGroup'; import { NewBoardBlock } from './NewBoardBlock'; import { useDatabase } from '../_shared/database-hooks/useDatabase'; import { ViewLayoutPB } from '@/services/backend'; @@ -8,8 +7,9 @@ import { DragDropContext } from 'react-beautiful-dnd'; import { useState } from 'react'; import { RowInfo } from '$app/stores/effects/database/row/row_cache'; import { EditRow } from '$app/components/_shared/EditRow/EditRow'; +import { BoardToolbar } from '$app/components/board/BoardToolbar'; -export const Board = ({ viewId }: { viewId: string }) => { +export const Board = ({ viewId, title }: { viewId: string; title: string }) => { const { controller, rows, groups, groupByFieldId, onNewRowClick, onDragEnd } = useDatabase(viewId, ViewLayoutPB.Board); const [showBoardRow, setShowBoardRow] = useState(false); const [boardRowInfo, setBoardRowInfo] = useState(); @@ -22,12 +22,7 @@ export const Board = ({ viewId }: { viewId: string }) => { return ( <>
-
-
{'Kanban'}
- -
+
@@ -39,7 +34,7 @@ export const Board = ({ viewId }: { viewId: string }) => { {controller && groups && groups.map((group, index) => ( - { const { cells } = useRow(viewId, controller, rowInfo); + const onDetailClick: MouseEventHandler = (e) => { + e.stopPropagation(); + // onOpenRow(rowInfo); + }; + return ( {(provided) => ( @@ -32,7 +38,7 @@ export const BoardCard = ({ onClick={() => onOpenRow(rowInfo)} className={`relative cursor-pointer select-none rounded-lg border border-shade-6 bg-white px-3 py-2 transition-transform duration-100 hover:bg-main-selector `} > -
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardCell.tsx index e478e27955..0e4531f225 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardCell.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardCell.tsx @@ -1,11 +1,12 @@ -import { CellIdentifier } from '../../stores/effects/database/cell/cell_bd_svc'; -import { CellCache } from '../../stores/effects/database/cell/cell_cache'; -import { FieldController } from '../../stores/effects/database/field/field_controller'; -import { FieldType } from '../../../services/backend'; +import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '$app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '$app/stores/effects/database/field/field_controller'; +import { FieldType } from '@/services/backend'; import { BoardOptionsCell } from './BoardOptionsCell'; import { BoardDateCell } from './BoardDateCell'; import { BoardTextCell } from './BoardTextCell'; import { BoardUrlCell } from '$app/components/board/BoardUrlCell'; +import { BoardCheckboxCell } from '$app/components/board/BoardCheckboxCell'; export const BoardCell = ({ cellIdentifier, @@ -38,6 +39,12 @@ export const BoardCell = ({ cellCache={cellCache} fieldController={fieldController} > + ) : cellIdentifier.fieldType === FieldType.Checkbox ? ( + ) : ( { + const { data } = useCell(cellIdentifier, cellCache, fieldController); + return ( + + {data === 'Yes' ? : } + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardDateCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardDateCell.tsx index 5047a8470a..fb15ff02e9 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardDateCell.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardDateCell.tsx @@ -1,8 +1,8 @@ -import { DateCellDataPB } from '../../../services/backend'; +import { DateCellDataPB } from '@/services/backend'; import { useCell } from '../_shared/database-hooks/useCell'; -import { CellIdentifier } from '../../stores/effects/database/cell/cell_bd_svc'; -import { CellCache } from '../../stores/effects/database/cell/cell_cache'; -import { FieldController } from '../../stores/effects/database/field/field_controller'; +import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '$app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '$app/stores/effects/database/field/field_controller'; export const BoardDateCell = ({ cellIdentifier, diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardFieldsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardFieldsPopup.tsx new file mode 100644 index 0000000000..3f894c03aa --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardFieldsPopup.tsx @@ -0,0 +1,35 @@ +import { useAppSelector } from '$app/stores/store'; +import { FieldTypeIcon } from '$app/components/_shared/EditRow/FieldTypeIcon'; +import { useRef } from 'react'; +import useOutsideClick from '$app/components/_shared/useOutsideClick'; +import { EyeOpenSvg } from '$app/components/_shared/svg/EyeOpenSvg'; + +export const BoardFieldsPopup = ({ hidePopup }: { hidePopup: () => void }) => { + const columns = useAppSelector((state) => state.database.columns); + const fields = useAppSelector((state) => state.database.fields); + const ref = useRef(null); + useOutsideClick(ref, () => hidePopup()); + + return ( +
+ {columns.map((column, index) => ( +
+
+ + + + {fields[column.fieldId].title} +
+
+ + + +
+
+ ))} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardBlock.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroup.tsx similarity index 92% rename from frontend/appflowy_tauri/src/appflowy_app/components/board/BoardBlock.tsx rename to frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroup.tsx index 1c94ed454a..2a1c80fb2a 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardBlock.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroup.tsx @@ -1,12 +1,12 @@ import { Details2Svg } from '../_shared/svg/Details2Svg'; import AddSvg from '../_shared/svg/AddSvg'; import { BoardCard } from './BoardCard'; -import { RowInfo } from '../../stores/effects/database/row/row_cache'; -import { DatabaseController } from '../../stores/effects/database/database_controller'; +import { RowInfo } from '$app/stores/effects/database/row/row_cache'; +import { DatabaseController } from '$app/stores/effects/database/database_controller'; import { Droppable } from 'react-beautiful-dnd'; import { DatabaseGroupController } from '$app/stores/effects/database/group/group_controller'; -export const BoardBlock = ({ +export const BoardGroup = ({ viewId, controller, allRows, diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroupFieldsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroupFieldsPopup.tsx new file mode 100644 index 0000000000..502e92a0e1 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardGroupFieldsPopup.tsx @@ -0,0 +1,35 @@ +import { useAppSelector } from '$app/stores/store'; +import { FieldTypeIcon } from '$app/components/_shared/EditRow/FieldTypeIcon'; +import { useRef } from 'react'; +import useOutsideClick from '$app/components/_shared/useOutsideClick'; +import { CheckmarkSvg } from '$app/components/_shared/svg/CheckmarkSvg'; + +export const BoardGroupFieldsPopup = ({ hidePopup }: { hidePopup: () => void }) => { + const columns = useAppSelector((state) => state.database.columns); + const fields = useAppSelector((state) => state.database.fields); + const ref = useRef(null); + useOutsideClick(ref, () => hidePopup()); + + return ( +
+ {columns.map((column, index) => ( +
+
+ + + + {fields[column.fieldId].title} +
+
+ + + +
+
+ ))} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardOptionsCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardOptionsCell.tsx index adaa3a1c6e..c35e1a83f4 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardOptionsCell.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardOptionsCell.tsx @@ -1,8 +1,8 @@ -import { SelectOptionCellDataPB } from '../../../services/backend'; +import { SelectOptionCellDataPB } from '@/services/backend'; import { useCell } from '../_shared/database-hooks/useCell'; -import { CellIdentifier } from '../../stores/effects/database/cell/cell_bd_svc'; -import { CellCache } from '../../stores/effects/database/cell/cell_cache'; -import { FieldController } from '../../stores/effects/database/field/field_controller'; +import { CellIdentifier } from '$app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '$app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '$app/stores/effects/database/field/field_controller'; import { getBgColor } from '$app/components/_shared/getColor'; export const BoardOptionsCell = ({ @@ -18,7 +18,7 @@ export const BoardOptionsCell = ({ return (
- {(data as SelectOptionCellDataPB | undefined)?.select_options?.map((option, index) => ( + {(data as SelectOptionCellDataPB)?.select_options?.map((option, index) => (
{option?.name || ''}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardSettingsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardSettingsPopup.tsx new file mode 100644 index 0000000000..6f2d25717d --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardSettingsPopup.tsx @@ -0,0 +1,48 @@ +import { useEffect, useState } from 'react'; +import { PropertiesSvg } from '$app/components/_shared/svg/PropertiesSvg'; +import { IPopupItem, PopupSelect } from '$app/components/_shared/PopupSelect'; +import { useTranslation } from 'react-i18next'; +import { GroupByFieldSvg } from '$app/components/_shared/svg/GroupByFieldSvg'; + +export const BoardSettingsPopup = ({ + hidePopup, + onFieldsClick, + onGroupClick, +}: { + hidePopup: () => void; + onFieldsClick: () => void; + onGroupClick: () => void; +}) => { + const [settingsItems, setSettingsItems] = useState([]); + const { t } = useTranslation(''); + useEffect(() => { + setSettingsItems([ + { + icon: ( + + + + ), + title: t('grid.settings.Properties'), + onClick: onFieldsClick, + }, + { + icon: ( + + + + ), + title: t('grid.settings.group'), + onClick: onGroupClick, + }, + ]); + }, [t]); + + return ( + hidePopup()} + items={settingsItems} + className={'absolute top-full left-full z-10 text-xs'} + > + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.hooks.ts new file mode 100644 index 0000000000..b9fd587734 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.hooks.ts @@ -0,0 +1,37 @@ +import { useState } from 'react'; + +export const useBoardToolbar = () => { + const [showSettings, setShowSettings] = useState(false); + const [showAllFields, setShowAllFields] = useState(false); + const [showGroupFields, setShowGroupFields] = useState(false); + + const onSettingsClick = () => { + setShowSettings(!showSettings); + }; + + const onFieldsClick = () => { + setShowSettings(false); + setShowAllFields(true); + }; + + const onGroupClick = () => { + setShowSettings(false); + setShowGroupFields(true); + }; + + const hidePopup = () => { + setShowSettings(false); + setShowAllFields(false); + setShowGroupFields(false); + }; + + return { + showSettings, + onSettingsClick, + onFieldsClick, + onGroupClick, + hidePopup, + showAllFields, + showGroupFields, + }; +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.tsx new file mode 100644 index 0000000000..7459f39857 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardToolbar.tsx @@ -0,0 +1,28 @@ +import { SettingsSvg } from '$app/components/_shared/svg/SettingsSvg'; +import { useBoardToolbar } from '$app/components/board/BoardToolbar.hooks'; +import { BoardSettingsPopup } from '$app/components/board/BoardSettingsPopup'; +import { BoardFieldsPopup } from '$app/components/board/BoardFieldsPopup'; +import { BoardGroupFieldsPopup } from '$app/components/board/BoardGroupFieldsPopup'; + +export const BoardToolbar = ({ title }: { title: string }) => { + const { showSettings, showAllFields, showGroupFields, onSettingsClick, onFieldsClick, onGroupClick, hidePopup } = + useBoardToolbar(); + + return ( +
+
{title}
+ + {showSettings && ( + + )} + {showAllFields && } + {showGroupFields && } +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardUrlCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardUrlCell.tsx index 301a475b3d..8f3bc82637 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardUrlCell.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/board/BoardUrlCell.tsx @@ -17,12 +17,8 @@ export const BoardUrlCell = ({ return ( <> - - {(data as URLCellDataPB | undefined)?.content || ''} + + {(data as URLCellDataPB)?.content || ''} ); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/error/Error.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/error/Error.hooks.ts index e2cad72c5f..2da03c5f5c 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/error/Error.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/error/Error.hooks.ts @@ -2,7 +2,7 @@ import { useAppDispatch, useAppSelector } from '../../stores/store'; import { errorActions } from '../../stores/reducers/error/slice'; import { useEffect, useState } from 'react'; -export const useError = () => { +export const useError = (e: Error) => { const dispatch = useAppDispatch(); const error = useAppSelector((state) => state.error); const [errorMessage, setErrorMessage] = useState(''); @@ -13,6 +13,12 @@ export const useError = () => { setErrorMessage(error.message); }, [error]); + useEffect(() => { + if (e) { + showError(e.message); + } + }, [e]); + const showError = (msg: string) => { dispatch(errorActions.showError(msg)); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/error/ErrorHandlerPage.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/error/ErrorHandlerPage.tsx index e4cc72679e..1bb15f2ca3 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/error/ErrorHandlerPage.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/error/ErrorHandlerPage.tsx @@ -1,8 +1,8 @@ import { useError } from './Error.hooks'; import { ErrorModal } from './ErrorModal'; -export const ErrorHandlerPage = () => { - const { hideError, errorMessage, displayError } = useError(); +export const ErrorHandlerPage = ({ error }: { error: Error }) => { + const { hideError, errorMessage, displayError } = useError(error); return displayError ? : <>; }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/Grid/Grid.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/Grid/Grid.tsx new file mode 100644 index 0000000000..69bd3e7a0e --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/Grid/Grid.tsx @@ -0,0 +1,57 @@ +import { useDatabase } from '$app/components/_shared/database-hooks/useDatabase'; +import { GridTableCount } from '../GridTableCount/GridTableCount'; +import { GridTableHeader } from '../GridTableHeader/GridTableHeader'; +import { GridAddRow } from '../GridTableRows/GridAddRow'; +import { GridTableRows } from '../GridTableRows/GridTableRows'; +import { GridTitle } from '../GridTitle/GridTitle'; +import { GridToolbar } from '../GridToolbar/GridToolbar'; +import { EditRow } from '$app/components/_shared/EditRow/EditRow'; +import { useState } from 'react'; +import { RowInfo } from '$app/stores/effects/database/row/row_cache'; +import { ViewLayoutPB } from '@/services/backend'; + +export const Grid = ({ viewId }: { viewId: string }) => { + const { controller, rows, groups } = useDatabase(viewId, ViewLayoutPB.Grid); + const [showGridRow, setShowGridRow] = useState(false); + const [boardRowInfo, setBoardRowInfo] = useState(); + + const onOpenRow = (rowInfo: RowInfo) => { + setBoardRowInfo(rowInfo); + setShowGridRow(true); + }; + + return ( + <> + {controller && groups && ( + <> +
+
+ + +
+ + {/* table component view with text area for td */} +
+ + + +
+ + +
+ + +
+ {showGridRow && boardRowInfo && ( + setShowGridRow(false)} + viewId={viewId} + controller={controller} + rowInfo={boardRowInfo} + > + )} + + )} + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridAddView/GridAddView.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridAddView/GridAddView.tsx index 12dacbb4ef..0b1f7d43b3 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridAddView/GridAddView.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridAddView/GridAddView.tsx @@ -1,4 +1,3 @@ -import { Link } from 'react-router-dom'; import AddSvg from '../../_shared/svg/AddSvg'; export const GridAddView = () => { diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCell.tsx new file mode 100644 index 0000000000..ff825aa44a --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCell.tsx @@ -0,0 +1,44 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { FieldType } from '@/services/backend'; +import GridSingleSelectOptions from './GridSingleSelectOptions'; +import GridTextCell from './GridTextCell'; +import { GridCheckBox } from './GridCheckBox'; +import { GridDate } from './GridDate'; +import { GridUrl } from './GridUrl'; +import { GridNumberCell } from './GridNumberCell'; + +export const GridCell = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + return ( + <> + {cellIdentifier.fieldType === FieldType.MultiSelect || + cellIdentifier.fieldType === FieldType.Checklist || + cellIdentifier.fieldType === FieldType.SingleSelect ? ( + + ) : cellIdentifier.fieldType === FieldType.Checkbox ? ( + + ) : cellIdentifier.fieldType === FieldType.DateTime ? ( + + ) : cellIdentifier.fieldType === FieldType.URL ? ( + + ) : cellIdentifier.fieldType === FieldType.Number ? ( + + ) : ( + + )} + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCheckBox.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCheckBox.tsx new file mode 100644 index 0000000000..1c3c3be40e --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridCheckBox.tsx @@ -0,0 +1,23 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { EditCheckboxCell } from '../../_shared/EditRow/EditCheckboxCell'; +import { useCell } from '../../_shared/database-hooks/useCell'; + +export const GridCheckBox = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + + return ( +
+ {cellController && } +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridDate.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridDate.tsx new file mode 100644 index 0000000000..ae64beaa7d --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridDate.tsx @@ -0,0 +1,47 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { useCell } from '../../_shared/database-hooks/useCell'; +import { DateCellDataPB } from '@/services/backend'; +import { EditCellDate } from '../../_shared/EditRow/EditCellDate'; +import { useState } from 'react'; +import { DatePickerPopup } from '../../_shared/EditRow/DatePickerPopup'; + +export const GridDate = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + + const [showDatePopup, setShowDatePopup] = useState(false); + const [datePickerTop, setdatePickerTop] = useState(0); + const [datePickerLeft, setdatePickerLeft] = useState(0); + + const onEditDateClick = async (left: number, top: number) => { + setdatePickerLeft(left); + setdatePickerTop(top); + setShowDatePopup(true); + }; + + return ( +
+ {cellController && } + + {showDatePopup && ( + setShowDatePopup(false)} + > + )} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridNumberCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridNumberCell.tsx new file mode 100644 index 0000000000..0cae27e7d8 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridNumberCell.tsx @@ -0,0 +1,25 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { useCell } from '../../_shared/database-hooks/useCell'; +import { EditCellNumber } from '../../_shared/EditRow/EditCellNumber'; + +export const GridNumberCell = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + + return ( +
+ {cellController && ( + + )} +
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridSingleSelectOptions.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridSingleSelectOptions.tsx new file mode 100644 index 0000000000..e846e8de85 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridSingleSelectOptions.tsx @@ -0,0 +1,75 @@ +import { useState } from 'react'; +import { CellOptions } from '$app/components/_shared/EditRow/CellOptions'; +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { useCell } from '$app/components/_shared/database-hooks/useCell'; +import { SelectOptionCellDataPB, SelectOptionPB } from '@/services/backend/models/flowy-database/select_type_option'; +import { CellOptionsPopup } from '$app/components/_shared/EditRow/CellOptionsPopup'; +import { EditCellOptionPopup } from '$app/components/_shared/EditRow/EditCellOptionPopup'; + +export default function GridSingleSelectOptions({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) { + const { data } = useCell(cellIdentifier, cellCache, fieldController); + + const [showOptionsPopup, setShowOptionsPopup] = useState(false); + const [changeOptionsTop, setChangeOptionsTop] = useState(0); + const [changeOptionsLeft, setChangeOptionsLeft] = useState(0); + + const [showEditCellOption, setShowEditCellOption] = useState(false); + const [editCellOptionTop, setEditCellOptionTop] = useState(0); + const [editCellOptionLeft, setEditCellOptionLeft] = useState(0); + + const [editingSelectOption, setEditingSelectOption] = useState(); + + const onEditOptionsClick = async (left: number, top: number) => { + setChangeOptionsLeft(left); + setChangeOptionsTop(top); + setShowOptionsPopup(true); + }; + + const onOpenOptionDetailClick = (_left: number, _top: number, _select_option: SelectOptionPB) => { + setEditingSelectOption(_select_option); + setShowEditCellOption(true); + setEditCellOptionLeft(_left); + setEditCellOptionTop(_top); + }; + + return ( + <> +
+ +
+ + {showOptionsPopup && ( + setShowOptionsPopup(false)} + openOptionDetail={onOpenOptionDetailClick} + /> + )} + {showEditCellOption && editingSelectOption && ( + { + setShowEditCellOption(false); + }} + > + )} + + ); +} diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridTextCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridTextCell.tsx new file mode 100644 index 0000000000..5baa354d40 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridTextCell.tsx @@ -0,0 +1,23 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { useCell } from '../../_shared/database-hooks/useCell'; +import { EditCellText } from '../../_shared/EditRow/EditCellText'; + +export default function GridTextCell({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) { + const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + + return ( +
+ {cellController && } +
+ ); +} diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridUrl.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridUrl.tsx new file mode 100644 index 0000000000..00bf66f11f --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridCell/GridUrl.tsx @@ -0,0 +1,22 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { useCell } from '../../_shared/database-hooks/useCell'; +import { EditCellUrl } from '../../_shared/EditRow/EditCellUrl'; +import { URLCellDataPB } from '@/services/backend/models/flowy-database/url_type_option_entities'; + +export const GridUrl = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + const { data, cellController } = useCell(cellIdentifier, cellCache, fieldController); + + return ( + <>{cellController && } + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableCount/GridTableCount.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableCount/GridTableCount.hooks.ts index 3e51c526ac..a2ef86a55f 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableCount/GridTableCount.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableCount/GridTableCount.hooks.ts @@ -1,4 +1,4 @@ -import { useAppSelector } from '../../../stores/store'; +import { useAppSelector } from '$app/stores/store'; export const useGridTableCount = () => { const { grid } = useAppSelector((state) => state); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.hooks.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.hooks.tsx index d05ddaf5f3..9d849412a4 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.hooks.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.hooks.tsx @@ -1,27 +1,25 @@ -import { nanoid } from 'nanoid'; -import { FieldType } from '@/services/backend/models/flowy-database/field_entities'; -import { gridActions } from '../../../stores/reducers/grid/slice'; -import { useAppDispatch, useAppSelector } from '../../../stores/store'; +import { useAppSelector } from '$app/stores/store'; +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; +import { TypeOptionController } from '@/appflowy_app/stores/effects/database/field/type_option/type_option_controller'; +import { None } from 'ts-results'; -export const useGridTableHeaderHooks = function () { - const dispatch = useAppDispatch(); - const grid = useAppSelector((state) => state.grid); +export const useGridTableHeaderHooks = function (controller: DatabaseController) { + const database = useAppSelector((state) => state.database); - const onAddField = () => { - dispatch( - gridActions.addField({ - field: { - fieldId: nanoid(8), - name: 'Name', - fieldOptions: {}, - fieldType: FieldType.RichText, - }, - }) - ); + const onAddField = async () => { + // TODO: move this to database controller hook + const fieldController = new TypeOptionController(controller.viewId, None); + await fieldController.initialize(); }; return { - fields: grid.fields, + fields: Object.values(database.fields).map((field) => { + return { + fieldId: field.fieldId, + name: field.title, + fieldType: field.fieldType, + }; + }), onAddField, }; }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.tsx index 27c0b72a96..259ad982d7 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeader.tsx @@ -1,49 +1,32 @@ +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; + import AddSvg from '../../_shared/svg/AddSvg'; import { useGridTableHeaderHooks } from './GridTableHeader.hooks'; -import { TextTypeSvg } from '../../_shared/svg/TextTypeSvg'; -import { NumberTypeSvg } from '../../_shared/svg/NumberTypeSvg'; -import { DateTypeSvg } from '../../_shared/svg/DateTypeSvg'; -import { SingleSelectTypeSvg } from '../../_shared/svg/SingleSelectTypeSvg'; -import { MultiSelectTypeSvg } from '../../_shared/svg/MultiSelectTypeSvg'; -import { ChecklistTypeSvg } from '../../_shared/svg/ChecklistTypeSvg'; -import { UrlTypeSvg } from '../../_shared/svg/UrlTypeSvg'; -import { FieldType } from '@/services/backend/models/flowy-database/field_entities'; -export const GridTableHeader = () => { - const { fields, onAddField } = useGridTableHeaderHooks(); +import { GridTableHeaderItem } from './GridTableHeaderItem'; +import { useTranslation } from 'react-i18next'; + +export const GridTableHeader = ({ controller }: { controller: DatabaseController }) => { + const { fields, onAddField } = useGridTableHeaderHooks(controller); + const { t } = useTranslation(''); return ( <> {fields.map((field, i) => { - return ( - -
- - {field.fieldType === FieldType.RichText && } - {field.fieldType === FieldType.Number && } - {field.fieldType === FieldType.DateTime && } - {field.fieldType === FieldType.SingleSelect && } - {field.fieldType === FieldType.MultiSelect && } - {field.fieldType === FieldType.Checklist && } - {field.fieldType === FieldType.URL && } - - {field.name} -
- - ); + return ; })}
- New column + {t('grid.field.newColumn')}
diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeaderItem.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeaderItem.tsx new file mode 100644 index 0000000000..56d4a618e5 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableHeader/GridTableHeaderItem.tsx @@ -0,0 +1,123 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; +import { TypeOptionController } from '@/appflowy_app/stores/effects/database/field/type_option/type_option_controller'; +import { FieldType } from '@/services/backend'; +import { useState, useRef } from 'react'; +import { Some } from 'ts-results'; +import { ChangeFieldTypePopup } from '../../_shared/EditRow/ChangeFieldTypePopup'; +import { EditFieldPopup } from '../../_shared/EditRow/EditFieldPopup'; +import { ChecklistTypeSvg } from '../../_shared/svg/ChecklistTypeSvg'; +import { DateTypeSvg } from '../../_shared/svg/DateTypeSvg'; +import { MultiSelectTypeSvg } from '../../_shared/svg/MultiSelectTypeSvg'; +import { NumberTypeSvg } from '../../_shared/svg/NumberTypeSvg'; +import { SingleSelectTypeSvg } from '../../_shared/svg/SingleSelectTypeSvg'; +import { TextTypeSvg } from '../../_shared/svg/TextTypeSvg'; +import { UrlTypeSvg } from '../../_shared/svg/UrlTypeSvg'; + +export const GridTableHeaderItem = ({ + controller, + field, +}: { + controller: DatabaseController; + field: { + fieldId: string; + name: string; + fieldType: FieldType; + }; +}) => { + const [showFieldEditor, setShowFieldEditor] = useState(false); + const [editFieldTop, setEditFieldTop] = useState(0); + const [editFieldRight, setEditFieldRight] = useState(0); + + const [showChangeFieldTypePopup, setShowChangeFieldTypePopup] = useState(false); + const [changeFieldTypeTop, setChangeFieldTypeTop] = useState(0); + const [changeFieldTypeRight, setChangeFieldTypeRight] = useState(0); + + const [editingField, setEditingField] = useState<{ + fieldId: string; + name: string; + fieldType: FieldType; + } | null>(null); + + const ref = useRef(null); + + const changeFieldType = async (newType: FieldType) => { + if (!editingField) return; + + const currentField = controller.fieldController.getField(editingField.fieldId); + if (!currentField) return; + + const typeOptionController = new TypeOptionController(controller.viewId, Some(currentField)); + await typeOptionController.switchToField(newType); + + setEditingField({ + ...editingField, + fieldType: newType, + }); + + setShowChangeFieldTypePopup(false); + }; + + return ( + +
{ + if (!ref.current) return; + const { top, left } = ref.current.getBoundingClientRect(); + + setEditFieldRight(left - 10); + setEditFieldTop(top + 35); + setEditingField(field); + setShowFieldEditor(true); + }} + > + + {field.fieldType === FieldType.RichText && } + {field.fieldType === FieldType.Number && } + {field.fieldType === FieldType.DateTime && } + {field.fieldType === FieldType.SingleSelect && } + {field.fieldType === FieldType.MultiSelect && } + {field.fieldType === FieldType.Checklist && } + {field.fieldType === FieldType.Checkbox && } + {field.fieldType === FieldType.URL && } + + {field.name} + + {showFieldEditor && editingField && ( + { + setShowFieldEditor(false); + }} + fieldInfo={controller.fieldController.getField(editingField.fieldId)} + changeFieldTypeClick={(buttonTop, buttonRight) => { + setChangeFieldTypeTop(buttonTop); + setChangeFieldTypeRight(buttonRight); + setShowChangeFieldTypePopup(true); + }} + > + )} + + {showChangeFieldTypePopup && ( + changeFieldType(newType)} + onOutsideClick={() => setShowChangeFieldTypePopup(false)} + > + )} +
+ + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.hooks.ts index 685e36bee9..4014e4d6b8 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.hooks.ts @@ -1,11 +1,8 @@ -import { gridActions } from '../../../stores/reducers/grid/slice'; -import { useAppDispatch } from '../../../stores/store'; +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; -export const useGridAddRow = () => { - const dispatch = useAppDispatch(); - - function addRow() { - dispatch(gridActions.addRow()); +export const useGridAddRow = (controller: DatabaseController) => { + async function addRow() { + await controller.createRow(); } return { diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.tsx index 846e9654c9..f50898c9e7 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridAddRow.tsx @@ -1,7 +1,10 @@ +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; import AddSvg from '../../_shared/svg/AddSvg'; import { useGridAddRow } from './GridAddRow.hooks'; -export const GridAddRow = () => { - const { addRow } = useGridAddRow(); +import { useTranslation } from 'react-i18next'; +export const GridAddRow = ({ controller }: { controller: DatabaseController }) => { + const { addRow } = useGridAddRow(controller); + const { t } = useTranslation(''); return (
@@ -9,7 +12,7 @@ export const GridAddRow = () => { - New row + {t('grid.row.newRow')}
); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableCell.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableCell.tsx new file mode 100644 index 0000000000..ae011b8d7f --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableCell.tsx @@ -0,0 +1,16 @@ +import { CellIdentifier } from '@/appflowy_app/stores/effects/database/cell/cell_bd_svc'; +import { CellCache } from '@/appflowy_app/stores/effects/database/cell/cell_cache'; +import { FieldController } from '@/appflowy_app/stores/effects/database/field/field_controller'; +import { GridCell } from '../GridCell/GridCell'; + +export const GridTableCell = ({ + cellIdentifier, + cellCache, + fieldController, +}: { + cellIdentifier: CellIdentifier; + cellCache: CellCache; + fieldController: FieldController; +}) => { + return ; +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.hooks.ts deleted file mode 100644 index e36cd3f952..0000000000 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.hooks.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useState } from 'react'; -import { gridActions } from '../../../stores/reducers/grid/slice'; -import { useAppDispatch, useAppSelector } from '../../../stores/store'; - -export const useGridTableItemHooks = ( - rowItem: { value: string | number; fieldId: string; cellId: string }, - rowId: string -) => { - const dispatch = useAppDispatch(); - const [value, setValue] = useState(rowItem.value); - - function onValueChange(event: React.ChangeEvent) { - setValue(event.target.value); - } - - function onValueBlur() { - dispatch(gridActions.updateRowValue({ rowId: rowId, cellId: rowItem.cellId, value })); - } - - const grid = useAppSelector((state) => state.grid); - - return { - rows: grid.rows, - onValueChange, - value, - onValueBlur, - }; -}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.tsx deleted file mode 100644 index 82f0f78e46..0000000000 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableItem.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { useGridTableItemHooks } from './GridTableItem.hooks'; - -export const GridTableItem = ({ - rowItem, - rowId, -}: { - rowItem: { - fieldId: string; - value: string | number; - cellId: string; - }; - rowId: string; -}) => { - const { value, onValueChange, onValueBlur } = useGridTableItemHooks(rowItem, rowId); - return ( -
- -
- ); -}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRow.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRow.tsx new file mode 100644 index 0000000000..36ae1e83eb --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRow.tsx @@ -0,0 +1,46 @@ +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; +import { RowInfo } from '@/appflowy_app/stores/effects/database/row/row_cache'; +import { useRow } from '../../_shared/database-hooks/useRow'; +import { FullView } from '../../_shared/svg/FullView'; +import { GridCell } from '../GridCell/GridCell'; + +export const GridTableRow = ({ + viewId, + controller, + row, + onOpenRow, +}: { + viewId: string; + controller: DatabaseController; + row: RowInfo; + onOpenRow: (rowId: RowInfo) => void; +}) => { + const { cells } = useRow(viewId, controller, row); + + return ( + + {cells.map((cell, cellIndex) => { + return ( + +
+ + + {cellIndex === 0 && ( +
onOpenRow(row)} + className='mr-1 hidden h-9 w-9 cursor-pointer rounded p-2 hover:bg-slate-200 group-hover:block ' + > + +
+ )} +
+ + ); + })} + + ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.hooks.ts deleted file mode 100644 index b534c5a4d3..0000000000 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.hooks.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useAppSelector } from '../../../stores/store'; - -export const useGridTableRowsHooks = () => { - const grid = useAppSelector((state) => state.grid); - - return { - rows: grid.rows, - }; -}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.tsx index 361a77063e..829698b6f1 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTableRows/GridTableRows.tsx @@ -1,24 +1,21 @@ -import { GridTableItem } from './GridTableItem'; -import { useGridTableRowsHooks } from './GridTableRows.hooks'; - -export const GridTableRows = () => { - const { rows } = useGridTableRowsHooks(); +import { DatabaseController } from '@/appflowy_app/stores/effects/database/database_controller'; +import { RowInfo } from '@/appflowy_app/stores/effects/database/row/row_cache'; +import { GridTableRow } from './GridTableRow'; +export const GridTableRows = ({ + viewId, + controller, + allRows, + onOpenRow, +}: { + viewId: string; + controller: DatabaseController; + allRows: readonly RowInfo[]; + onOpenRow: (rowId: RowInfo) => void; +}) => { return ( - {rows.map((row, i) => { - return ( - - {row.values.map((value) => { - return ( - - - - ); - })} - - - - ); + {allRows.map((row, i) => { + return ; })} ); diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.hooks.ts index 91483a821a..ba04669f12 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.hooks.ts @@ -1,7 +1,5 @@ +import { useAppDispatch, useAppSelector } from '@/appflowy_app/stores/store'; import { useState } from 'react'; -import { gridActions } from '../../../stores/reducers/grid/slice'; - -import { useAppDispatch, useAppSelector } from '../../../stores/store'; export const useGridTitleHooks = function () { const dispatch = useAppDispatch(); @@ -9,16 +7,12 @@ export const useGridTitleHooks = function () { const [title, setTitle] = useState(grid.title); const [changingTitle, setChangingTitle] = useState(false); + const [showOptions, setShowOptions] = useState(false); const onTitleChange = (event: React.ChangeEvent) => { setTitle(event.target.value); }; - const onTitleBlur = () => { - dispatch(gridActions.updateGridTitle({ title })); - setChangingTitle(false); - }; - const onTitleClick = () => { setChangingTitle(true); }; @@ -26,8 +20,9 @@ export const useGridTitleHooks = function () { return { title, onTitleChange, - onTitleBlur, onTitleClick, changingTitle, + showOptions, + setShowOptions, }; }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.tsx index 282af7be62..a50b08be87 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitle.tsx @@ -1,15 +1,21 @@ import { useGridTitleHooks } from './GridTitle.hooks'; import { SettingsSvg } from '../../_shared/svg/SettingsSvg'; +import { GridTitleOptionsPopup } from './GridTitleOptionsPopup'; export const GridTitle = () => { - const { title } = useGridTitleHooks(); + const { title, showOptions, setShowOptions } = useGridTitleHooks(); return ( -
+
{title}
- + +
+ + + {showOptions && setShowOptions(!showOptions)} />} +
); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitleOptionsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitleOptionsPopup.tsx new file mode 100644 index 0000000000..dcf22ce95f --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridTitle/GridTitleOptionsPopup.tsx @@ -0,0 +1,55 @@ +import { IPopupItem, PopupSelect } from '../../_shared/PopupSelect'; +import { FilterSvg } from '../../_shared/svg/FilterSvg'; +import { GroupBySvg } from '../../_shared/svg/GroupBySvg'; +import { PropertiesSvg } from '../../_shared/svg/PropertiesSvg'; +import { SortSvg } from '../../_shared/svg/SortSvg'; + +export const GridTitleOptionsPopup = ({ onClose }: { onClose?: () => void }) => { + const items: IPopupItem[] = [ + { + icon: ( + + + + ), + onClick: () => { + console.log('filter'); + }, + title: 'Filter', + }, + { + icon: ( + + + + ), + onClick: () => { + console.log('sort'); + }, + title: 'Sort', + }, + { + icon: ( + + + + ), + onClick: () => { + console.log('fields'); + }, + title: 'Fields', + }, + { + icon: ( + + + + ), + onClick: () => { + console.log('group by'); + }, + title: 'Group by', + }, + ]; + return ; +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridToolbar/GridToolbar.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridToolbar/GridToolbar.tsx index ea88a4cf7b..6039a6147a 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridToolbar/GridToolbar.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/grid/GridToolbar/GridToolbar.tsx @@ -1,17 +1,11 @@ import { GridAddView } from '../GridAddView/GridAddView'; import { SearchInput } from '../../_shared/SearchInput'; -import { GridSortButton } from './GridSortButton'; -import { GridFieldsButton } from './GridFieldsButton'; -import { GridFilterButton } from './GridFilterButton'; export const GridToolbar = () => { return (
- - -
); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/HeaderPanel/OptionsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/layout/HeaderPanel/OptionsPopup.tsx index fe0cf6de9b..15423484dd 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/HeaderPanel/OptionsPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/HeaderPanel/OptionsPopup.tsx @@ -1,4 +1,4 @@ -import { IPopupItem, Popup } from '../../_shared/Popup'; +import { IPopupItem, PopupSelect } from '../../_shared/PopupSelect'; import { LogoutSvg } from '../../_shared/svg/LogoutSvg'; export const OptionsPopup = ({ onSignOutClick, onClose }: { onSignOutClick: () => void; onClose: () => void }) => { @@ -14,10 +14,10 @@ export const OptionsPopup = ({ onSignOutClick, onClose }: { onSignOutClick: () = }, ]; return ( - + >
); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts index 34850a89c3..5e63373880 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/FolderItem.hooks.ts @@ -5,7 +5,7 @@ import { IPage, pagesActions } from '../../../stores/reducers/pages/slice'; import { ViewLayoutPB } from '@/services/backend'; import { AppBackendService } from '../../../stores/effects/folder/app/app_bd_svc'; import { WorkspaceBackendService } from '../../../stores/effects/folder/workspace/workspace_bd_svc'; -import { useError } from '../../error/Error.hooks'; + import { AppObserver } from '../../../stores/effects/folder/app/app_observer'; import { useNavigate } from 'react-router-dom'; import { INITIAL_FOLDER_HEIGHT, PAGE_ITEM_HEIGHT } from '../../_shared/constants'; @@ -32,9 +32,6 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => { const appBackendService = new AppBackendService(folder.id); const workspaceBackendService = new WorkspaceBackendService(workspace.id || ''); - // Error - const error = useError(); - useEffect(() => { void appObserver.subscribe({ onAppChanged: (change) => { @@ -85,12 +82,8 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => { }; const changeFolderTitle = async (newTitle: string) => { - try { - await appBackendService.update({ name: newTitle }); - appDispatch(foldersActions.renameFolder({ id: folder.id, newTitle })); - } catch (e: any) { - error.showError(e?.message); - } + await appBackendService.update({ name: newTitle }); + appDispatch(foldersActions.renameFolder({ id: folder.id, newTitle })); }; const closeRenamePopup = () => { @@ -99,24 +92,16 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => { const deleteFolder = async () => { closePopup(); - try { - await appBackendService.delete(); - appDispatch(foldersActions.deleteFolder({ id: folder.id })); - } catch (e: any) { - error.showError(e?.message); - } + await appBackendService.delete(); + appDispatch(foldersActions.deleteFolder({ id: folder.id })); }; const duplicateFolder = async () => { closePopup(); - try { - const newApp = await workspaceBackendService.createApp({ - name: folder.title, - }); - appDispatch(foldersActions.addFolder({ id: newApp.id, title: folder.title })); - } catch (e: any) { - error.showError(e?.message); - } + const newApp = await workspaceBackendService.createApp({ + name: folder.title, + }); + appDispatch(foldersActions.addFolder({ id: newApp.id, title: folder.title })); }; const closePopup = () => { @@ -126,77 +111,65 @@ export const useFolderEvents = (folder: IFolder, pages: IPage[]) => { const onAddNewDocumentPage = async () => { closePopup(); - try { - const newView = await appBackendService.createView({ - name: 'New Document 1', - layoutType: ViewLayoutPB.Document, - }); + const newView = await appBackendService.createView({ + name: 'New Document 1', + layoutType: ViewLayoutPB.Document, + }); - appDispatch( - pagesActions.addPage({ - folderId: folder.id, - pageType: ViewLayoutPB.Document, - title: newView.name, - id: newView.id, - }) - ); + appDispatch( + pagesActions.addPage({ + folderId: folder.id, + pageType: ViewLayoutPB.Document, + title: newView.name, + id: newView.id, + }) + ); - setShowPages(true); + setShowPages(true); - navigate(`/page/document/${newView.id}`); - } catch (e: any) { - error.showError(e?.message); - } + navigate(`/page/document/${newView.id}`); }; const onAddNewBoardPage = async () => { closePopup(); - try { - const newView = await appBackendService.createView({ - name: 'New Board 1', - layoutType: ViewLayoutPB.Board, - }); + const newView = await appBackendService.createView({ + name: 'New Board 1', + layoutType: ViewLayoutPB.Board, + }); - setShowPages(true); + setShowPages(true); - appDispatch( - pagesActions.addPage({ - folderId: folder.id, - pageType: ViewLayoutPB.Board, - title: newView.name, - id: newView.id, - }) - ); + appDispatch( + pagesActions.addPage({ + folderId: folder.id, + pageType: ViewLayoutPB.Board, + title: newView.name, + id: newView.id, + }) + ); - navigate(`/page/board/${newView.id}`); - } catch (e: any) { - error.showError(e?.message); - } + navigate(`/page/board/${newView.id}`); }; const onAddNewGridPage = async () => { closePopup(); - try { - const newView = await appBackendService.createView({ - name: 'New Grid 1', - layoutType: ViewLayoutPB.Grid, - }); + const newView = await appBackendService.createView({ + name: 'New Grid 1', + layoutType: ViewLayoutPB.Grid, + }); - setShowPages(true); + setShowPages(true); - appDispatch( - pagesActions.addPage({ - folderId: folder.id, - pageType: ViewLayoutPB.Grid, - title: newView.name, - id: newView.id, - }) - ); + appDispatch( + pagesActions.addPage({ + folderId: folder.id, + pageType: ViewLayoutPB.Grid, + title: newView.name, + id: newView.id, + }) + ); - navigate(`/page/grid/${newView.id}`); - } catch (e: any) { - error.showError(e?.message); - } + navigate(`/page/grid/${newView.id}`); }; useEffect(() => { diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavItemOptionsPopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavItemOptionsPopup.tsx index f167623399..283bdc62bd 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavItemOptionsPopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavItemOptionsPopup.tsx @@ -1,4 +1,4 @@ -import { IPopupItem, Popup } from '../../_shared/Popup'; +import { IPopupItem, PopupSelect } from '../../_shared/PopupSelect'; import { EditSvg } from '../../_shared/svg/EditSvg'; import { TrashSvg } from '../../_shared/svg/TrashSvg'; import { CopySvg } from '../../_shared/svg/CopySvg'; @@ -47,11 +47,11 @@ export const NavItemOptionsPopup = ({ ]; return ( - onClose && onClose()} items={items} className={`absolute right-0`} style={{ top: `${top}px` }} - > + > ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.tsx index e3528ca1f0..fc47388757 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NavigationPanel.tsx @@ -117,6 +117,7 @@ export const NavigationPanel = ({ {/**/} + {/*Trash Button*/} @@ -158,7 +159,7 @@ export const TestBackendButton = () => { onClick={() => navigate('/page/api-test')} className={'flex w-full items-center rounded-lg px-4 py-2 hover:bg-surface-2'} > - APITest + API Test ); }; @@ -171,7 +172,19 @@ export const DesignSpec = () => { onClick={() => navigate('page/colors')} className={'flex w-full items-center rounded-lg px-4 py-2 hover:bg-surface-2'} > - Design Specs + Color Palette + + ); +}; + +export const AllIcons = () => { + const navigate = useNavigate(); + return ( + ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewFolderButton.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewFolderButton.hooks.ts index ffef7e5073..b2e4c3ba67 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewFolderButton.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewFolderButton.hooks.ts @@ -1,23 +1,17 @@ import { useAppDispatch, useAppSelector } from '../../../stores/store'; import { foldersActions } from '../../../stores/reducers/folders/slice'; import { WorkspaceBackendService } from '../../../stores/effects/folder/workspace/workspace_bd_svc'; -import { useError } from '../../error/Error.hooks'; export const useNewFolder = () => { const appDispatch = useAppDispatch(); const workspace = useAppSelector((state) => state.workspace); const workspaceBackendService = new WorkspaceBackendService(workspace.id || ''); - const error = useError(); const onNewFolder = async () => { - try { - const newApp = await workspaceBackendService.createApp({ - name: 'New Folder 1', - }); - appDispatch(foldersActions.addFolder({ id: newApp.id, title: newApp.name })); - } catch (e: any) { - error.showError(e?.message); - } + const newApp = await workspaceBackendService.createApp({ + name: 'New Folder 1', + }); + appDispatch(foldersActions.addFolder({ id: newApp.id, title: newApp.name })); }; return { diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewPagePopup.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewPagePopup.tsx index 5b74082907..47ad2f8e9b 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewPagePopup.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/NewPagePopup.tsx @@ -1,4 +1,4 @@ -import { IPopupItem, Popup } from '../../_shared/Popup'; +import { IPopupItem, PopupSelect } from '../../_shared/PopupSelect'; import { DocumentSvg } from '../../_shared/svg/DocumentSvg'; import { BoardSvg } from '../../_shared/svg/BoardSvg'; import { GridSvg } from '../../_shared/svg/GridSvg'; @@ -47,11 +47,11 @@ export const NewPagePopup = ({ ]; return ( - onClose && onClose()} items={items} className={'absolute right-0'} style={{ top: `${top}px` }} - > + > ); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.hooks.ts index 937825bbeb..917d96144d 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/NavigationPanel/PageItem.hooks.ts @@ -13,7 +13,6 @@ export const usePageEvents = (page: IPage) => { const [activePageId, setActivePageId] = useState(''); const currentLocation = useLocation(); const viewBackendService: ViewBackendService = new ViewBackendService(page.id); - const error = useError(); useEffect(() => { const { pathname } = currentLocation; @@ -32,33 +31,21 @@ export const usePageEvents = (page: IPage) => { }; const changePageTitle = async (newTitle: string) => { - try { - await viewBackendService.update({ name: newTitle }); - appDispatch(pagesActions.renamePage({ id: page.id, newTitle })); - } catch (e: any) { - error.showError(e?.message); - } + await viewBackendService.update({ name: newTitle }); + appDispatch(pagesActions.renamePage({ id: page.id, newTitle })); }; const deletePage = async () => { closePopup(); - try { - await viewBackendService.delete(); - appDispatch(pagesActions.deletePage({ id: page.id })); - } catch (e: any) { - error.showError(e?.message); - } + await viewBackendService.delete(); + appDispatch(pagesActions.deletePage({ id: page.id })); }; const duplicatePage = () => { closePopup(); - try { - appDispatch( - pagesActions.addPage({ id: nanoid(8), pageType: page.pageType, title: page.title, folderId: page.folderId }) - ); - } catch (e: any) { - error.showError(e?.message); - } + appDispatch( + pagesActions.addPage({ id: nanoid(8), pageType: page.pageType, title: page.title, folderId: page.folderId }) + ); }; const closePopup = () => { diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts index 59d1231a7e..39f98a5fd0 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/components/layout/Workspace.hooks.ts @@ -3,13 +3,12 @@ import { useAppDispatch, useAppSelector } from '../../stores/store'; import { pagesActions } from '../../stores/reducers/pages/slice'; import { workspaceActions } from '../../stores/reducers/workspace/slice'; import { UserBackendService } from '../../stores/effects/user/user_bd_svc'; -import { useError } from '../error/Error.hooks'; export const useWorkspace = () => { const currentUser = useAppSelector((state) => state.currentUser); const appDispatch = useAppDispatch(); - const error = useError(); + const userBackendService: UserBackendService = new UserBackendService(currentUser.id || 0); const loadWorkspaceItems = async () => { @@ -31,15 +30,11 @@ export const useWorkspace = () => { } } catch (e1) { // create workspace for first start - try { - const workspace = await userBackendService.createWorkspace({ name: 'New Workspace', desc: '' }); - appDispatch(workspaceActions.updateWorkspace({ id: workspace.id, name: workspace.name })); + const workspace = await userBackendService.createWorkspace({ name: 'New Workspace', desc: '' }); + appDispatch(workspaceActions.updateWorkspace({ id: workspace.id, name: workspace.name })); - appDispatch(foldersActions.clearFolders()); - appDispatch(pagesActions.clearPages()); - } catch (e2: any) { - error.showError(e2?.message); - } + appDispatch(foldersActions.clearFolders()); + appDispatch(pagesActions.clearPages()); } }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/AllIcons.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/AllIcons.tsx new file mode 100644 index 0000000000..7cea4374ca --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/AllIcons.tsx @@ -0,0 +1,168 @@ +import AddSvg from '$app/components/_shared/svg/AddSvg'; +import { ArrowLeftSvg } from '$app/components/_shared/svg/ArrowLeftSvg'; +import { ArrowRightSvg } from '$app/components/_shared/svg/ArrowRightSvg'; +import { BoardSvg } from '$app/components/_shared/svg/BoardSvg'; +import { CheckboxSvg } from '$app/components/_shared/svg/CheckboxSvg'; +import { ChecklistTypeSvg } from '$app/components/_shared/svg/ChecklistTypeSvg'; +import { CheckmarkSvg } from '$app/components/_shared/svg/CheckmarkSvg'; +import { ClockSvg } from '$app/components/_shared/svg/ClockSvg'; +import { CloseSvg } from '$app/components/_shared/svg/CloseSvg'; +import { CopySvg } from '$app/components/_shared/svg/CopySvg'; +import { DateTypeSvg } from '$app/components/_shared/svg/DateTypeSvg'; +import { Details2Svg } from '$app/components/_shared/svg/Details2Svg'; +import { DocumentSvg } from '$app/components/_shared/svg/DocumentSvg'; +import { DropDownShowSvg } from '$app/components/_shared/svg/DropDownShowSvg'; +import { EarthSvg } from '$app/components/_shared/svg/EarthSvg'; +import { EditorCheckSvg } from '$app/components/_shared/svg/EditorCheckSvg'; +import { EditorUncheckSvg } from '$app/components/_shared/svg/EditorUncheckSvg'; +import { EditSvg } from '$app/components/_shared/svg/EditSvg'; +import { EyeClosedSvg } from '$app/components/_shared/svg/EyeClosedSvg'; +import { EyeOpenSvg } from '$app/components/_shared/svg/EyeOpenSvg'; +import { FilterSvg } from '$app/components/_shared/svg/FilterSvg'; +import { GridSvg } from '$app/components/_shared/svg/GridSvg'; +import { GroupByFieldSvg } from '$app/components/_shared/svg/GroupByFieldSvg'; +import { HideMenuSvg } from '$app/components/_shared/svg/HideMenuSvg'; +import { InformationSvg } from '$app/components/_shared/svg/InformationSvg'; +import { LogoutSvg } from '$app/components/_shared/svg/LogoutSvg'; +import { MoreSvg } from '$app/components/_shared/svg/MoreSvg'; +import { MultiSelectTypeSvg } from '$app/components/_shared/svg/MultiSelectTypeSvg'; +import { NumberTypeSvg } from '$app/components/_shared/svg/NumberTypeSvg'; +import { PropertiesSvg } from '$app/components/_shared/svg/PropertiesSvg'; +import { SearchSvg } from '$app/components/_shared/svg/SearchSvg'; +import { ShowMenuSvg } from '$app/components/_shared/svg/ShowMenuSvg'; +import { SingleSelectTypeSvg } from '$app/components/_shared/svg/SingleSelectTypeSvg'; +import { SkipLeftSvg } from '$app/components/_shared/svg/SkipLeftSvg'; +import { SkipRightSvg } from '$app/components/_shared/svg/SkipRightSvg'; +import { SortSvg } from '$app/components/_shared/svg/SortSvg'; +import { TextTypeSvg } from '$app/components/_shared/svg/TextTypeSvg'; +import { TrashSvg } from '$app/components/_shared/svg/TrashSvg'; +import { UrlTypeSvg } from '$app/components/_shared/svg/UrlTypeSvg'; + +export const AllIcons = () => { + return ( +
+

Icons

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/tests/ColorPalette.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/ColorPalette.tsx new file mode 100644 index 0000000000..c683898029 --- /dev/null +++ b/frontend/appflowy_tauri/src/appflowy_app/components/tests/ColorPalette.tsx @@ -0,0 +1,45 @@ +export const ColorPalette = () => { + return ( +
+

Colors

+

Main

+
+
+
+
+
+
+
+
+
+

Tint

+
+
+
+
+
+
+
+
+
+
+
+

Shades

+
+
+
+
+
+
+
+
+

Surface

+
+
+
+
+
+
+
+ ); +}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/components/TestFonts/TestFonts.tsx b/frontend/appflowy_tauri/src/appflowy_app/components/tests/TestFonts.tsx similarity index 100% rename from frontend/appflowy_tauri/src/appflowy_app/components/TestFonts/TestFonts.tsx rename to frontend/appflowy_tauri/src/appflowy_app/components/tests/TestFonts.tsx diff --git a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_controller.ts b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_controller.ts index 918be53b65..9c09eecacd 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_controller.ts +++ b/frontend/appflowy_tauri/src/appflowy_app/stores/effects/database/database_controller.ts @@ -65,7 +65,7 @@ export class DatabaseController { this.databaseViewCache.initializeWithRows(database.rows); this._callback?.onViewChanged?.(database); - return loadGroupResult; + return Ok(database.rows); } else { return Err(openDatabaseResult.val); } diff --git a/frontend/appflowy_tauri/src/appflowy_app/views/BoardPage.tsx b/frontend/appflowy_tauri/src/appflowy_app/views/BoardPage.tsx index d533850710..02c0e7c110 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/views/BoardPage.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/views/BoardPage.tsx @@ -1,22 +1,24 @@ import { useParams } from 'react-router-dom'; import { useEffect, useState } from 'react'; import { Board } from '../components/board/Board'; +import { useAppSelector } from '$app/stores/store'; export const BoardPage = () => { const params = useParams(); const [viewId, setViewId] = useState(''); + const pagesStore = useAppSelector((state) => state.pages); + const [title, setTitle] = useState(''); useEffect(() => { if (params?.id?.length) { setViewId(params.id); - // setDatabaseId('testDb'); + setTitle(pagesStore.find((page) => page.id === params.id)?.title || ''); } - }, [params]); + }, [params, pagesStore]); return (
-

Board: {viewId}

- {viewId?.length && } + {viewId?.length && }
); }; diff --git a/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.hooks.ts b/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.hooks.ts deleted file mode 100644 index 68c0f81ebd..0000000000 --- a/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.hooks.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const useGrid = () => { - const loadGrid = async (id: string) => { - console.log('loading grid'); - }; - - return { - loadGrid, - }; -}; diff --git a/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.tsx b/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.tsx index ce8e474e05..b4a0f4157a 100644 --- a/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.tsx +++ b/frontend/appflowy_tauri/src/appflowy_app/views/GridPage.tsx @@ -1,45 +1,22 @@ -import { GridAddView } from '../components/grid/GridAddView/GridAddView'; -import { GridTableCount } from '../components/grid/GridTableCount/GridTableCount'; -import { GridTableHeader } from '../components/grid/GridTableHeader/GridTableHeader'; -import { GridAddRow } from '../components/grid/GridTableRows/GridAddRow'; -import { GridTableRows } from '../components/grid/GridTableRows/GridTableRows'; -import { GridTitle } from '../components/grid/GridTitle/GridTitle'; -import { SearchInput } from '../components/_shared/SearchInput'; -import { GridToolbar } from '../components/grid/GridToolbar/GridToolbar'; import { useParams } from 'react-router-dom'; -import { useGrid } from './GridPage.hooks'; -import { useEffect } from 'react'; + +import { useEffect, useState } from 'react'; +import { Grid } from '../components/grid/Grid/Grid'; export const GridPage = () => { const params = useParams(); - const { loadGrid } = useGrid(); + const [viewId, setViewId] = useState(''); useEffect(() => { - void (async () => { - if (!params?.id) return; - await loadGrid(params.id); - })(); + if (params?.id?.length) { + setViewId(params.id); + // setDatabaseId('testDb'); + } }, [params]); return ( -
-

Grid

- -
- - -
- - {/* table component view with text area for td */} -
- - - -
- - -
- - +
+

Grid: {viewId}

+ {viewId?.length && }
); };