commit 4942dbe1989e2aaa6c19d6b06c95704c39342fe9 Author: Ivan Zinchenko Date: Wed Apr 15 18:57:24 2026 +0300 wip diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6f3092c --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ + +# Profile +.rspack-profile-*/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ac66857 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Lock files +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..544138b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..1ade9d7 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,20 @@ +# AGENTS.md + +You are an expert in JavaScript, Rsbuild, and web application development. You write maintainable, performant, and accessible code. + +## Commands + +- `pnpm run dev` - Start the dev server +- `pnpm run build` - Build the app for production +- `pnpm run preview` - Preview the production build locally + +## Docs + +- Rsbuild: https://rsbuild.rs/llms.txt +- Rspack: https://rspack.rs/llms.txt + +## Tools + +### Prettier + +- Run `pnpm run format` to format your code diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..6615f41 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,10 @@ +:80 { + root * /srv + encode zstd gzip + try_files {path} /index.html + + @html path /index.html + header @html Cache-Control "no-store, no-cache, must-revalidate, max-age=0" + + file_server +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0934aa5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM node:20-alpine AS build + +WORKDIR /app + +RUN corepack enable + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + +FROM caddy:2.8-alpine AS runtime + +COPY Caddyfile /etc/caddy/Caddyfile +COPY --from=build /app/dist /srv + +EXPOSE 80 diff --git a/README.md b/README.md new file mode 100644 index 0000000..84d8510 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# Rsbuild project + +## Setup + +Install the dependencies: + +```bash +pnpm install +``` + +## Get started + +Start the dev server, and the app will be available at [http://localhost:3000](http://localhost:3000). + +```bash +pnpm run dev +``` + +Build the app for production: + +```bash +pnpm run build +``` + +Preview the production build locally: + +```bash +pnpm run preview +``` + +## Learn more + +To learn more about Rsbuild, check out the following resources: + +- [Rsbuild documentation](https://rsbuild.rs) - explore Rsbuild features and APIs. +- [Rsbuild GitHub repository](https://github.com/web-infra-dev/rsbuild) - your feedback and contributions are welcome! diff --git a/package.json b/package.json new file mode 100644 index 0000000..c42291e --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "mts-public", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "build": "rsbuild build", + "dev": "rsbuild dev --open", + "format": "prettier --write .", + "preview": "rsbuild preview" + }, + "dependencies": { + "@chakra-ui/react": "^3.34.0", + "@emotion/react": "^11.14.0", + "mobx": "^6.15.0", + "mobx-react-lite": "^4.1.1", + "next-themes": "^0.4.6", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-hook-form": "^7.72.1", + "react-icons": "^5.6.0", + "react-router": "^7.14.1", + "use-mask-input": "^3.9.0" + }, + "devDependencies": { + "@rsbuild/core": "^1.7.1", + "@rsbuild/plugin-react": "^1.4.2", + "@rsbuild/plugin-type-check": "^1.3.4", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "prettier": "^3.7.3", + "typescript": "^5.9.3" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a6283ce --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2434 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@chakra-ui/react': + specifier: ^3.34.0 + version: 3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.2.14)(react@19.2.5) + mobx: + specifier: ^6.15.0 + version: 6.15.0 + mobx-react-lite: + specifier: ^4.1.1 + version: 4.1.1(mobx@6.15.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: + specifier: ^19.2.3 + version: 19.2.5 + react-dom: + specifier: ^19.2.3 + version: 19.2.5(react@19.2.5) + react-hook-form: + specifier: ^7.72.1 + version: 7.72.1(react@19.2.5) + react-icons: + specifier: ^5.6.0 + version: 5.6.0(react@19.2.5) + react-router: + specifier: ^7.14.1 + version: 7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + use-mask-input: + specifier: ^3.9.0 + version: 3.9.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + devDependencies: + '@rsbuild/core': + specifier: ^1.7.1 + version: 1.7.5 + '@rsbuild/plugin-react': + specifier: ^1.4.2 + version: 1.4.6(@rsbuild/core@1.7.5) + '@rsbuild/plugin-type-check': + specifier: ^1.3.4 + version: 1.3.4(@rsbuild/core@1.7.5)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(tslib@2.8.1)(typescript@5.9.3) + '@types/react': + specifier: ^19.2.7 + version: 19.2.14 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.14) + prettier: + specifier: ^3.7.3 + version: 3.8.3 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + +packages: + + '@ark-ui/react@5.36.0': + resolution: {integrity: sha512-LjxQb1XyF3CqRnCoaRwm/eImOjIjAjRmrL3ZMzA1J41Is4KnDpc4Zvh1268LQIaRiX/3voUM0uLsjFxVx8MNQA==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + + '@chakra-ui/react@3.34.0': + resolution: {integrity: sha512-VLhpVwv5IVxhwajO10KnS1VQT4hDqQMQP/A796Ya+uVu8AdoSX+5HHyTLTkYIeXIDMe0xLqJfov04OBKbBchJA==} + peerDependencies: + '@emotion/react': '>=11' + react: '>=18' + react-dom: '>=18' + + '@emnapi/core@1.9.2': + resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + + '@emnapi/runtime@1.9.2': + resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.4.0': + resolution: {integrity: sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + + '@internationalized/date@3.12.0': + resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==} + + '@internationalized/number@3.6.5': + resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/base64@17.67.0': + resolution: {integrity: sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/buffers@1.2.1': + resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/buffers@17.67.0': + resolution: {integrity: sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/codegen@1.0.0': + resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/codegen@17.67.0': + resolution: {integrity: sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-core@4.57.1': + resolution: {integrity: sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-fsa@4.57.1': + resolution: {integrity: sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-builtins@4.57.1': + resolution: {integrity: sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-to-fsa@4.57.1': + resolution: {integrity: sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node-utils@4.57.1': + resolution: {integrity: sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-node@4.57.1': + resolution: {integrity: sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-print@4.57.1': + resolution: {integrity: sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/fs-snapshot@4.57.1': + resolution: {integrity: sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.21.0': + resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@17.67.0': + resolution: {integrity: sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pointer@1.0.2': + resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pointer@17.67.0': + resolution: {integrity: sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.9.0': + resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@17.67.0': + resolution: {integrity: sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@module-federation/error-codes@0.22.0': + resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==} + + '@module-federation/runtime-core@0.22.0': + resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==} + + '@module-federation/runtime-tools@0.22.0': + resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==} + + '@module-federation/runtime@0.22.0': + resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==} + + '@module-federation/sdk@0.22.0': + resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==} + + '@module-federation/webpack-bundler-runtime@0.22.0': + resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==} + + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + + '@pandacss/is-valid-prop@1.9.1': + resolution: {integrity: sha512-G4UHGPbyDR8UnxITHLiv8h88KWEAAs8NBX8yXLeb98ny2GEEhS3RBMK1Lq/tpNwwWimgLXxHfATyUkzqfgLjtg==} + + '@rsbuild/core@1.7.5': + resolution: {integrity: sha512-i37urpoV4y9NSsGiUOuLdoI42KJ5h4gAZ8EG8Ilmsond3bxoAoOCu7YvC+1pJ7p+r16suVPW8cki891ZKHOoXQ==} + engines: {node: '>=18.12.0'} + hasBin: true + + '@rsbuild/plugin-react@1.4.6': + resolution: {integrity: sha512-LAT6xHlEyZKA0VjF/ph5d50iyG+WSmBx+7g98HNZUwb94VeeTMZFB8qVptTkbIRMss3BNKOXmHOu71Lhsh9oEw==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-type-check@1.3.4': + resolution: {integrity: sha512-ibOlMRVKeDfBBSd09YVzJjAUhX1KnTVbK0NK/rPBai3/DAovhUsmkxKDIsE+3HN93iGBSBiqOCIOrYFO2Z21Fw==} + peerDependencies: + '@rsbuild/core': ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rspack/binding-darwin-arm64@1.7.11': + resolution: {integrity: sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.7.11': + resolution: {integrity: sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.7.11': + resolution: {integrity: sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rspack/binding-linux-arm64-musl@1.7.11': + resolution: {integrity: sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rspack/binding-linux-x64-gnu@1.7.11': + resolution: {integrity: sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rspack/binding-linux-x64-musl@1.7.11': + resolution: {integrity: sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rspack/binding-wasm32-wasi@1.7.11': + resolution: {integrity: sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==} + cpu: [wasm32] + + '@rspack/binding-win32-arm64-msvc@1.7.11': + resolution: {integrity: sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.7.11': + resolution: {integrity: sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.7.11': + resolution: {integrity: sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.7.11': + resolution: {integrity: sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==} + + '@rspack/core@1.7.11': + resolution: {integrity: sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/lite-tapable@1.1.0': + resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} + + '@rspack/plugin-react-refresh@1.6.2': + resolution: {integrity: sha512-k+/VrfTNgo+KirjI6V+8CWRj6y+DH9jOUWv8JorYY4vKf/9xfnZ8xHzuB4iqCwTtoZl9YnxOaOuoyjJipc2tiQ==} + peerDependencies: + react-refresh: '>=0.10.0 <1.0.0' + webpack-hot-middleware: 2.x + peerDependenciesMeta: + webpack-hot-middleware: + optional: true + + '@swc/helpers@0.5.21': + resolution: {integrity: sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==} + + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.14': + resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + + '@zag-js/accordion@1.39.1': + resolution: {integrity: sha512-GA3m7gRTm3weSe1eMlHIsTNztcjZ6joIaRgxxKil7q/UX0xIVVGDy0aCr6oo7FAuoMiOOBVurYXILpFZ30nOXA==} + + '@zag-js/anatomy@1.39.1': + resolution: {integrity: sha512-p2iFAs2pVQgv5iCDAftA7g9Z/fUYXW94dRIGk415TSbkp/YDENydm/JtRoNctp302UIx4Eeuc5QBR+7h5kuISA==} + + '@zag-js/angle-slider@1.39.1': + resolution: {integrity: sha512-dG/eSRFQamluynSCi7S1Br3C+4jfE8Sin0cXLZ7VDgY9dKSLcd6o1G7odW52syllPXZKZvzO6AB/b9EqPLM6zQ==} + + '@zag-js/aria-hidden@1.39.1': + resolution: {integrity: sha512-wiwcz3N086qBMEU3VKfHhcvGm6Jm1PIcDXys/jEqiKPtHoYZhDip0n0cPOoasss/A1oS39QFVdk3WpLXGu3Izw==} + + '@zag-js/async-list@1.39.1': + resolution: {integrity: sha512-Kf0SrOKk6H2DUfkBUzv1Kj7HLpoRrhJ7b+/0rI0S5WJ2NyWulz7KVkxO6gG0YPjw4PvPqzqrjwxFdOcWkJvx1A==} + + '@zag-js/auto-resize@1.39.1': + resolution: {integrity: sha512-ditIo9mW7fapq+4yx3/8hMpMZlWaoOy66EOzUz8dSVqnxnTWAjnTICu/9zFh8pkWerlzGTtDOJPP1oZ8S/rgVg==} + + '@zag-js/avatar@1.39.1': + resolution: {integrity: sha512-LWrgJ0bebnXPSL+uehA9z6BlCD/MZEOQBJqH/F2QQFSAAZXUUDKtzVDmc+UtwjDsHXqqTghi+v2atQJHNMcJ2g==} + + '@zag-js/carousel@1.39.1': + resolution: {integrity: sha512-5z5z3IldUgZ/R+KZLNQDoJFNTXzYd28YOmgfWH61Vvyv+RarX8kwZW8ajW/fNiqcWXyhW3/VMU0lArrfjbQVtQ==} + + '@zag-js/cascade-select@1.39.1': + resolution: {integrity: sha512-nzhCTF1QCRx9GcYXiNrvOUORqtJO7SwRpdJHlkMYp0mkVzzsj2e710qFayJ6hwjR6RhcdI2NPyyQdFtRVVSzJg==} + + '@zag-js/checkbox@1.39.1': + resolution: {integrity: sha512-0PS/9hTsejAAarcw5hZXNTkO5T/AXIjDeUh7acX4DzNYSoQolDCH8ddb7c4emKrKAH+aY2KrVoN4kHOIbPRKyA==} + + '@zag-js/clipboard@1.39.1': + resolution: {integrity: sha512-byeyFd1bNLLPec8UQHBnOb73IAkg6V2zMTtM7fNOG/wW8QmL3jkv/g1KIOHK4gc2UeHC8I1EmDaiIU1PNTM/Rw==} + + '@zag-js/collapsible@1.39.1': + resolution: {integrity: sha512-Zgccg/t7M8i0JVwZPPgW7XB7kGhTO475hsmwkF/8CYLqBBckVDHUARp2we24hENCm/98eez6R0eDEmE+tldFWA==} + + '@zag-js/collection@1.39.1': + resolution: {integrity: sha512-fyOyKmP7MRo0/U8mBmB7KgHRXHhXP27LCcasy3x+qTAQtuEfYG1EPhKuj07oBWlX/2qfcKYn2R3YopHcqFcCiA==} + + '@zag-js/color-picker@1.39.1': + resolution: {integrity: sha512-LHJN1uQ1+vAkb4iXeKT2tf8QYbJMuXKx4lLa1IM2MtaM3PkFIvwZdtF4dnl6AW7TNAaT7UX2yWio6K4DF9/GbQ==} + + '@zag-js/color-utils@1.39.1': + resolution: {integrity: sha512-TUWPDosvyA+n5aDVv2jGosNT5SxoNG/DePkLSg9Ks8UO4wSFbFGRB2ZvMufHwwKNV2+xgQe4+LSJ3EQWeseLrQ==} + + '@zag-js/combobox@1.39.1': + resolution: {integrity: sha512-fmStpG+k4xrxCzqUX0ssnOMeoSietWm5ir3qmEZcagzNqNycAXMvOELAIeyXi87Kut6aDGhxLOV7o395HVXl/w==} + + '@zag-js/core@1.39.1': + resolution: {integrity: sha512-Yp0r49QLYXe2j7fgyAiilH4umXFydCnr5hcRDwJU+sxvUAlq00JQIJIEK2pT6k8cJiNNsFEV5WkOX7jsqpAX2A==} + + '@zag-js/date-input@1.39.1': + resolution: {integrity: sha512-XGln/TVeQLf4tiXCyvVeZd1P8WmZrbyKjb1D5p3sKi/p13QZQ4+47PeltCdJskhvwH7fD5r/6AYjrj+JwCluug==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/date-picker@1.39.1': + resolution: {integrity: sha512-t9q1H0aZQJkbzKTR2Bn5vMwaoFoirxekiSxw8ju0F0vr4Kg4BJ9yueOQm5I2wALKnJbZu4Ua5MgzlrDF3CQt3A==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/date-utils@1.39.1': + resolution: {integrity: sha512-i4SvBhru2Yz/zsHT0XvyFhf4a+pAKYkWXeVfU0RvF2S6mPTfgaMFF9ZNPq5Sy8K31EtAa6AVXcybYaYnibn1FA==} + peerDependencies: + '@internationalized/date': '>=3.0.0' + + '@zag-js/dialog@1.39.1': + resolution: {integrity: sha512-q+HTmfuRDRZthln9mb7i52wdltQOZlw3+nw3a2uygEe9xuEtHBwUz31XJzkn2UWQqhAt7cC39OwykhNLKrfkqA==} + + '@zag-js/dismissable@1.39.1': + resolution: {integrity: sha512-7/soy93Ersd5qedhSL/+CDcZ9gNTQV0ooDcqKtM8b4IxwD4rgWwGsewJY+tbKmOqaZobwa0YcWV2+YGgI23ESw==} + + '@zag-js/dom-query@1.39.1': + resolution: {integrity: sha512-k01aXeUWLyJfB61CODaXj4PLhYmVpnVMFrC+3nk/XCn1MW7my8L/8KVg0m4W8n+X9MhpaLWsZDmK/dwED/3qSw==} + + '@zag-js/drawer@1.39.1': + resolution: {integrity: sha512-1k+5AD3hVFcYt93jMVr4cTs9RGYyRjB7jBU8hFdlPsOhTUdlFDpZD50MnK/aB2PU3Q5AMvt78rqrc/xjcVYZJQ==} + + '@zag-js/editable@1.39.1': + resolution: {integrity: sha512-09Zj6967GPJLwfP3Zx19mybOAUdDfk9UtF+uLmcujhTYSikN8SAYtOmuLV9fpNsfDbnIrJ+1VnmvtOm8Wcl2kA==} + + '@zag-js/file-upload@1.39.1': + resolution: {integrity: sha512-cErPOnPwPyneUXpelsfm75DKn0/4SI8aqQnlbrqo522PEqAQyDfDdBsqebGgKWG3F0A++kKFp9LO9A5zCrw5gA==} + + '@zag-js/file-utils@1.39.1': + resolution: {integrity: sha512-ll/W5o74SMmoAS+l7PkmmGjPj4PLCSG/cwQh1Y/+LpaSev0YiR3Nk2OzRIIPtm3NivYVxKGawaCOf1RvT/82LQ==} + + '@zag-js/floating-panel@1.39.1': + resolution: {integrity: sha512-IfPbf3pwJGqBWHec/rPzpdPjfMCLed59LlEophvRy49FEdksv8eN6nr9DXl2wWZEoQhH99scXfLMbtEZsPsFWg==} + + '@zag-js/focus-trap@1.39.1': + resolution: {integrity: sha512-2ZzVefHMotvtxUo/gP4R45Szw/EPaPkTKEHaug6/il62SPDbkFODF+5r1zXyLbLuwCHq0apvQasg/ONLihwlXw==} + + '@zag-js/focus-visible@1.39.1': + resolution: {integrity: sha512-iEuTOYHE8HRn/7ULC9c9BTTWo0C0MJRCbYVxbh/d7v8qAuq4CS76pdfceNo3KeWbb968T+yiG6q0AjiHsr8IOw==} + + '@zag-js/highlight-word@1.39.1': + resolution: {integrity: sha512-QVZcsg7TqVT2gm3wGGH791F8RsBVwLnSF07OOeRCYSBVNZfPyKYkVr0QkKxPDa6eAmmu2Rz5fP6bjf2+f/nklw==} + + '@zag-js/hover-card@1.39.1': + resolution: {integrity: sha512-sc8zGHA+Wv7DLq3kKtKPOE0CvL+HUM7gO9dgVgdNltjwE1f4W+dv1IfGPkHHNEp777PRi4YYBtdUKBsoiOuzBQ==} + + '@zag-js/i18n-utils@1.39.1': + resolution: {integrity: sha512-TKRLQQlHgJ4cxsHo3tZPtbFjGu9m1UPtfezRGFKq7A8czhdqRhaCpaWF849cd6dI7x6rWvvTan858gOFpyANnQ==} + + '@zag-js/image-cropper@1.39.1': + resolution: {integrity: sha512-OIYjN1B+DUO4UwBtvLgn+sv8UHf4MCta7TEbdJmN9G53+Uk67BubzYqJ4AtU4b1vfupyoEMQT6XQmx9BE0t2DA==} + + '@zag-js/interact-outside@1.39.1': + resolution: {integrity: sha512-LnSbA+txMsFmzNPn84QKH01x2yJv4At/eKHn6rT2PyxXkJQIh8PvCTS3zVz4Syw11cmhcXt2eRwhzx8yImV92w==} + + '@zag-js/json-tree-utils@1.39.1': + resolution: {integrity: sha512-Y8ymevEG0VGXrWRLvyJqxihTtZH8RCrR+zbXGFOUqxdQY4UG6+TctBlNBMD1tSl/7b9WvZk45gn9KaYF9dTIPg==} + + '@zag-js/listbox@1.39.1': + resolution: {integrity: sha512-Mz0UpdXobdTQTyjM+Avgi7pDVB2dKyaUHqw3TloeleQL3VwTqClclkwHXtLYYE+oXa0zOet37wI9mzfaYx9iZQ==} + + '@zag-js/live-region@1.39.1': + resolution: {integrity: sha512-E7YNd0QGzJ2n1ZhnI2smv+klwifsNRf9QaDCx7quVJCVYywpupsBK4R25KN75S1z8XaK+jAy6HYKj8DIhYjYeg==} + + '@zag-js/marquee@1.39.1': + resolution: {integrity: sha512-rSLuPzfXyzVbX810Kn+hUu9fFaczucEpHmYPkuKs/4JRwenrDEy0v3zzU5kbMbuk/8f2b8RSHDcGJ0GYrRlDLA==} + + '@zag-js/menu@1.39.1': + resolution: {integrity: sha512-bRDGLGkiGhzNtORBXkbBQV/xp2zEkwpYIepfWCaUoFwKUmx7GGnShTBFxJyq0u2D4IkS9GOwcqm20EhMv6V+TA==} + + '@zag-js/navigation-menu@1.39.1': + resolution: {integrity: sha512-3R0xkceHvcvmg2obDH3jrbiq+fRAzZ1vfpCeeImTQUMRqHHal5/1C271W47x1vZ9WJHMAdqkkhJZRNHwVvf6kw==} + + '@zag-js/number-input@1.39.1': + resolution: {integrity: sha512-VWgsQJB2q//aVDv5NUK//BTK+TsxI3goHQN4hc5YAGQ7MZgon/TEMhkPQMjUJ9+w+imut60EW8mpDEY2CNqtVw==} + + '@zag-js/pagination@1.39.1': + resolution: {integrity: sha512-3Q1B9/g3ajhvXjuGffJ7otyXcXK5+uhdbE5A9CZa4bsW3pf25L9Cp+ZAjdXQMDc8T4jhZJAKFmDJfQgtr1oEIw==} + + '@zag-js/password-input@1.39.1': + resolution: {integrity: sha512-dAg1xg6vOj0e3wwtWkRCvqooU2KpB4qJ7AS4soyUGS34lOrC2dMoBRaTVhJdGqW+ZENKBBNvjtiSW1qzriOmmw==} + + '@zag-js/pin-input@1.39.1': + resolution: {integrity: sha512-XUGawjNud0iVzBydRXTMLlPKKBJboMuLwgSYsImM5KswlF0sVhG0hARZKV1OtbP49AH0GJcLBaU7eumvFuAQvg==} + + '@zag-js/popover@1.39.1': + resolution: {integrity: sha512-aO3ExO/O7Sa3ovdozFI6SujhNOpYdCca4bImnAiovDL8DY8zN3UNQebu35IQvw9/aRsx9VKSJL1AqzJJUImFRw==} + + '@zag-js/popper@1.39.1': + resolution: {integrity: sha512-h0UMY2dXJNfM3OvMQ9t9LzlmwvpCgjloz2IvU1txY3r32UIy7ve1H70zkKagLtLRxFTuWmhumYUPULPo/6a1DA==} + + '@zag-js/presence@1.39.1': + resolution: {integrity: sha512-iqSZ29ocl7YxyQhVnWrSVeaHdTqzlz6kIdwC4go4zxB7WUa5Ga7Y5enb0u3v5cnSeaqIPzmq2T7gDPGDpe4Jow==} + + '@zag-js/progress@1.39.1': + resolution: {integrity: sha512-1IHyOw8DqPs3YH149Oj7W9a5oEfY5pc9GAVOPGbzYxVK/W8d/NIjVxa565I3J5cDJ0s6z3FrMSXMWUwr1ML4tw==} + + '@zag-js/qr-code@1.39.1': + resolution: {integrity: sha512-tFz8uxAzTOv0uZk6bVGNXJaN3oe9l5GoWQDF4dFA6n4xEbo0EhhBFCD/DtnulbpGsNkyJ44dVu5stfN4/xNqTA==} + + '@zag-js/radio-group@1.39.1': + resolution: {integrity: sha512-+sC9xcAyY/GbY+8HpKlbPgSyOxBLUSB18s6fe6K1wdmyom4PM0nmhLouuxisbFZYHOyfQwAOMo+ainRENB2hzQ==} + + '@zag-js/rating-group@1.39.1': + resolution: {integrity: sha512-IfdxWmM+3zpztx/HcE3bWob72sZNb1+BzK4tSySLVyjeqs8OzLDzrCbKqt10DmibnNOvpbjbq4eX4P5hV9YN7Q==} + + '@zag-js/react@1.39.1': + resolution: {integrity: sha512-mRBw0zikDH6aiLzzmwfVfXmjtWQJK3xGwB7BPedU5bI2JQzrhFDr8rAQFwFOu8ax1bv1HBY8sQoBFR3LVtRbzw==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + + '@zag-js/rect-utils@1.39.1': + resolution: {integrity: sha512-5gJ0PzeUme76xTWG+4XythWgmGgDKV4XAxEUaB3KKDtXgjDHwtu7PwKLIzFtlaaSf/U23PY+RNVBVCYg1GmZog==} + + '@zag-js/remove-scroll@1.39.1': + resolution: {integrity: sha512-uZfPR3Gl9sQFo+tJ7kbuwsBhw+RIZwWFnMDgrz5LIwSNGN6hsyC4HGOxe29clkWQ2X2AjqqmEMETwgX7Jg+wxA==} + + '@zag-js/scroll-area@1.39.1': + resolution: {integrity: sha512-Ycg/hu8dwfMflREhOWSEDK5hh6YB/AV0Lwi1E2FRKSKyCuxt5/8/CBunIUQ6vEDO6ElmKZpafEtZTpt8F7a/qQ==} + + '@zag-js/scroll-snap@1.39.1': + resolution: {integrity: sha512-AzCc8MAAVqkiK5Y0cJZ24OIBZDQrUmEexACMuR6M5yZmlcEbS0EA/d6Wq+LSR1JMVTD4B+UwcMj1D3vJQ90ZTw==} + + '@zag-js/select@1.39.1': + resolution: {integrity: sha512-Q0qIYJ+UaMe1zIRjBYJYtqg0Ig3CAA2LS2bMD12RokKhrdq2HY+XE+pONoox5/9hb0cgtCLfUxcxSLFwS2D9iQ==} + + '@zag-js/signature-pad@1.39.1': + resolution: {integrity: sha512-rRfvxmJ82Yd93SHe7T24AFPrzD3QGAhU5NfGKbvY0esD2g3foZz5YGKcPBegI5M6sLlkDRx03f27p4MZtCyd6w==} + + '@zag-js/slider@1.39.1': + resolution: {integrity: sha512-OEA9R7Ly5cw+6ANofnMpuHH3rAo8gZEnxy7iEwePu11pq2RCnt8DSj2V+uqU+dTq15Uup1LSzRgJfTnAC4Z85A==} + + '@zag-js/splitter@1.39.1': + resolution: {integrity: sha512-UygbdYaNZR+OwliXbiYf+QWce4bg8dmlnFj2QulSqDhhKuuxiC1iJV+jSGIvUryx6foAh6zg9NMFyeNdK2CTvQ==} + + '@zag-js/steps@1.39.1': + resolution: {integrity: sha512-DC6swMpwITTB0DyCSxlpWyPNSUN9ul9jz4N6aAyQ0L1IK/noF/YYTZRAcXNSRzN4iutO/2mFGGbwGq/oVf+gPA==} + + '@zag-js/store@1.39.1': + resolution: {integrity: sha512-zFpwP4lhiBVD9987rwAfZNVa2/f/xx4mhbCE1EEw31zxLAozY2jONeJ3UzPP05VbzKlRHBcvkaXAJQQGegTwFA==} + + '@zag-js/switch@1.39.1': + resolution: {integrity: sha512-ikeQ42c0vyyPLeyW9U0dvcqTV1Ekpx5jZ050R905HGJ2GeWE0uBGuHbMpTG5U6Pwb0a+TMzqAr+jMsquVTCwzg==} + + '@zag-js/tabs@1.39.1': + resolution: {integrity: sha512-P2RThO1gX9SFsNqrAGPsXJxrjn5YqP6MFs9mdExU+tzzZyVjJQADkAmh98C0eEaCb6HKLpJZ/17hrnLDhm1Tig==} + + '@zag-js/tags-input@1.39.1': + resolution: {integrity: sha512-tc0+bd9FiUJwa+wY2hSVVGHLIBC3C3rOZX/4zjchRMs1xgl92c1/tYbytXny7ABB8ZMHveG7MtgDppVF4VkwBg==} + + '@zag-js/timer@1.39.1': + resolution: {integrity: sha512-ytvtNXDt80UIS1HLdU8eETJ1xUGNjON2PTbm+q/2DsQjGqA73g155W1JBMjX4yAj4mIaqNAjimmYWe1sqqsyAQ==} + + '@zag-js/toast@1.39.1': + resolution: {integrity: sha512-K7ndEfBTKDds10iQKCQUmin74s6V4BEIypAIyQxs18gQB9TCn5+wff886JAzecIKPY97PDQHDKjYR71yzRC7/g==} + + '@zag-js/toggle-group@1.39.1': + resolution: {integrity: sha512-KS4Bo17foMKXVBhQjocRf4GQxMV4pMXclTo14IWjldaHs2HIrNJ0Ar0Ri+vo47BBKBNsXs4HuNvfbMdQj94wEA==} + + '@zag-js/toggle@1.39.1': + resolution: {integrity: sha512-0MD11S+y3GLhLAo7d+hudUcLm4LBhCa4zt693Z6fJECnGu9Jxh5ZXqcSLIj2ffeJs1zeGF9lYFEYTNMsQEYCLQ==} + + '@zag-js/tooltip@1.39.1': + resolution: {integrity: sha512-IsxFj7l8kPciwIyYJWlmQ7mhXocbjXxLj3m9z099slYOF7lApA33/ndY32w9ptrI4/nUh2nldzw6eRfSpVnuOA==} + + '@zag-js/tour@1.39.1': + resolution: {integrity: sha512-05IYCqHQUhfkwlpo9xx4zMIcjacqznvXNlm7qkp4emvxxco+CZsANTMt1mG3Zpr9Amdd32puu99E1kDUxw9Qcw==} + + '@zag-js/tree-view@1.39.1': + resolution: {integrity: sha512-sm6qUZjO0OaqBqO5s55KU+l5p1wXfUVScoen7BYVoFBuROH7qAZJi8YMclGvnnlyV506i8Hk0qqWnLg0F38jCA==} + + '@zag-js/types@1.39.1': + resolution: {integrity: sha512-w3vVpgxmdJvMDvv19DXTtFI6kJL6TXw//U0Z1BAc3rnDA9orcB9Ryw4uMNvIzFA607CgssyJcWDaQ/M3yAcbJw==} + + '@zag-js/utils@1.39.1': + resolution: {integrity: sha512-9k741cH7L655Ua3tedTkuMblcXVXVgCLTB9svp9oTjA7oatpOpYF4z43kgAQVjyThNXMJ7AvtO4C80ajQLTScg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + core-js@3.47.0: + resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-to-regex.js@1.2.0: + resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + memfs@4.57.1: + resolution: {integrity: sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==} + peerDependencies: + tslib: '2' + + mobx-react-lite@4.1.1: + resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==} + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx@6.15.0: + resolution: {integrity: sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + perfect-freehand@1.2.3: + resolution: {integrity: sha512-bHZSfqDHGNlPpgH2yxXgPHlQSPpEbo+qg7li0M78J9vNAi2yjwLeA4x79BEQhX44lEWpCLSFCeRZwpw0niiXPA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} + engines: {node: '>=14'} + hasBin: true + + proxy-compare@3.0.1: + resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + + proxy-memoize@3.0.1: + resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==} + + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + peerDependencies: + react: ^19.2.5 + + react-hook-form@7.72.1: + resolution: {integrity: sha512-RhwBoy2ygeVZje+C+bwJ8g0NjTdBmDlJvAUHTxRjTmSUKPYsKfMphkS2sgEMotsY03bP358yEYlnUeZy//D9Ig==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-icons@5.6.0: + resolution: {integrity: sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==} + peerDependencies: + react: '*' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + + react-router@7.14.1: + resolution: {integrity: sha512-5BCvFskyAAVumqhEKh/iPhLOIkfxcEUz8WqFIARCkMg8hZZzDYX9CtwxXA0e+qT8zAxmMC0x3Ckb9iMONwc5jg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + reduce-configs@1.1.2: + resolution: {integrity: sha512-AgBP55V8FC7NaqoOP2RCbTpu6LE+YuX3LUZkNAoitcfyS3/PIC8Obg/TJrBzTkJ+lDvZv0TTAeDpLkzjTtYlbw==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.12: + resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} + engines: {node: '>= 0.4'} + hasBin: true + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + thingies@2.6.0: + resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tree-dump@1.1.0: + resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + ts-checker-rspack-plugin@1.3.0: + resolution: {integrity: sha512-89oK/BtApjdid1j9CGjPGiYry+EZBhsnTAM481/8ipgr/y2IOgCbW1HPnan+fs5FnzlpUgf9dWGNZ4Ayw3Bd8A==} + peerDependencies: + '@rspack/core': ^1.0.0 || ^2.0.0-0 + typescript: '>=3.8.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + + use-mask-input@3.9.0: + resolution: {integrity: sha512-jZM/9bscwqTD6yc1NjSq9/iUMX74gA+NnCh8++YW+UYW84U10anetnSUSxNaMgQEK71MQcx04CzOZJm6Tis0dw==} + engines: {node: '>=16', npm: '>=7'} + peerDependencies: + react: '>=17' + react-dom: '>=17' + + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} + engines: {node: '>= 6'} + +snapshots: + + '@ark-ui/react@5.36.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@internationalized/date': 3.12.0 + '@zag-js/accordion': 1.39.1 + '@zag-js/anatomy': 1.39.1 + '@zag-js/angle-slider': 1.39.1 + '@zag-js/async-list': 1.39.1 + '@zag-js/auto-resize': 1.39.1 + '@zag-js/avatar': 1.39.1 + '@zag-js/carousel': 1.39.1 + '@zag-js/cascade-select': 1.39.1 + '@zag-js/checkbox': 1.39.1 + '@zag-js/clipboard': 1.39.1 + '@zag-js/collapsible': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/color-picker': 1.39.1 + '@zag-js/color-utils': 1.39.1 + '@zag-js/combobox': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/date-input': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/date-picker': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/date-utils': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/dialog': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/drawer': 1.39.1 + '@zag-js/editable': 1.39.1 + '@zag-js/file-upload': 1.39.1 + '@zag-js/file-utils': 1.39.1 + '@zag-js/floating-panel': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/highlight-word': 1.39.1 + '@zag-js/hover-card': 1.39.1 + '@zag-js/i18n-utils': 1.39.1 + '@zag-js/image-cropper': 1.39.1 + '@zag-js/json-tree-utils': 1.39.1 + '@zag-js/listbox': 1.39.1 + '@zag-js/marquee': 1.39.1 + '@zag-js/menu': 1.39.1 + '@zag-js/navigation-menu': 1.39.1 + '@zag-js/number-input': 1.39.1 + '@zag-js/pagination': 1.39.1 + '@zag-js/password-input': 1.39.1 + '@zag-js/pin-input': 1.39.1 + '@zag-js/popover': 1.39.1 + '@zag-js/presence': 1.39.1 + '@zag-js/progress': 1.39.1 + '@zag-js/qr-code': 1.39.1 + '@zag-js/radio-group': 1.39.1 + '@zag-js/rating-group': 1.39.1 + '@zag-js/react': 1.39.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@zag-js/scroll-area': 1.39.1 + '@zag-js/select': 1.39.1 + '@zag-js/signature-pad': 1.39.1 + '@zag-js/slider': 1.39.1 + '@zag-js/splitter': 1.39.1 + '@zag-js/steps': 1.39.1 + '@zag-js/switch': 1.39.1 + '@zag-js/tabs': 1.39.1 + '@zag-js/tags-input': 1.39.1 + '@zag-js/timer': 1.39.1 + '@zag-js/toast': 1.39.1 + '@zag-js/toggle': 1.39.1 + '@zag-js/toggle-group': 1.39.1 + '@zag-js/tooltip': 1.39.1 + '@zag-js/tour': 1.39.1 + '@zag-js/tree-view': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + + '@babel/runtime@7.29.2': {} + + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + + '@chakra-ui/react@3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@ark-ui/react': 5.36.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@emotion/is-prop-valid': 1.4.0 + '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.2.5) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.5) + '@emotion/utils': 1.4.2 + '@pandacss/is-valid-prop': 1.9.1 + csstype: 3.2.3 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@emnapi/core@1.9.2': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.9.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/babel-plugin@11.13.5': + dependencies: + '@babel/helper-module-imports': 7.28.6 + '@babel/runtime': 7.29.2 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.4.0': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.2.14)(react@19.2.5)': + dependencies: + '@babel/runtime': 7.29.2 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.2.5) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.2.5 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.2.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.5)': + dependencies: + react: 19.2.5 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + + '@floating-ui/utils@0.2.11': {} + + '@internationalized/date@3.12.0': + dependencies: + '@swc/helpers': 0.5.21 + + '@internationalized/number@3.6.5': + dependencies: + '@swc/helpers': 0.5.21 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/base64@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/buffers@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/codegen@17.67.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-core@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-fsa@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-builtins@4.57.1(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-to-fsa@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node-utils@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-node@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-print@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/fs-snapshot@4.57.1(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/json-pointer@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.9.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1) + '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@17.67.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) + '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) + tslib: 2.8.1 + + '@module-federation/error-codes@0.22.0': {} + + '@module-federation/runtime-core@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@module-federation/runtime-tools@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/webpack-bundler-runtime': 0.22.0 + + '@module-federation/runtime@0.22.0': + dependencies: + '@module-federation/error-codes': 0.22.0 + '@module-federation/runtime-core': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@module-federation/sdk@0.22.0': {} + + '@module-federation/webpack-bundler-runtime@0.22.0': + dependencies: + '@module-federation/runtime': 0.22.0 + '@module-federation/sdk': 0.22.0 + + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.9.2 + '@emnapi/runtime': 1.9.2 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@pandacss/is-valid-prop@1.9.1': {} + + '@rsbuild/core@1.7.5': + dependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + '@rspack/lite-tapable': 1.1.0 + '@swc/helpers': 0.5.21 + core-js: 3.47.0 + jiti: 2.6.1 + + '@rsbuild/plugin-react@1.4.6(@rsbuild/core@1.7.5)': + dependencies: + '@rspack/plugin-react-refresh': 1.6.2(react-refresh@0.18.0) + react-refresh: 0.18.0 + optionalDependencies: + '@rsbuild/core': 1.7.5 + transitivePeerDependencies: + - webpack-hot-middleware + + '@rsbuild/plugin-type-check@1.3.4(@rsbuild/core@1.7.5)(@rspack/core@1.7.11(@swc/helpers@0.5.21))(tslib@2.8.1)(typescript@5.9.3)': + dependencies: + deepmerge: 4.3.1 + json5: 2.2.3 + reduce-configs: 1.1.2 + ts-checker-rspack-plugin: 1.3.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(tslib@2.8.1)(typescript@5.9.3) + optionalDependencies: + '@rsbuild/core': 1.7.5 + transitivePeerDependencies: + - '@rspack/core' + - tslib + - typescript + + '@rspack/binding-darwin-arm64@1.7.11': + optional: true + + '@rspack/binding-darwin-x64@1.7.11': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.7.11': + optional: true + + '@rspack/binding-linux-arm64-musl@1.7.11': + optional: true + + '@rspack/binding-linux-x64-gnu@1.7.11': + optional: true + + '@rspack/binding-linux-x64-musl@1.7.11': + optional: true + + '@rspack/binding-wasm32-wasi@1.7.11': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + '@rspack/binding-win32-arm64-msvc@1.7.11': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.7.11': + optional: true + + '@rspack/binding-win32-x64-msvc@1.7.11': + optional: true + + '@rspack/binding@1.7.11': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.7.11 + '@rspack/binding-darwin-x64': 1.7.11 + '@rspack/binding-linux-arm64-gnu': 1.7.11 + '@rspack/binding-linux-arm64-musl': 1.7.11 + '@rspack/binding-linux-x64-gnu': 1.7.11 + '@rspack/binding-linux-x64-musl': 1.7.11 + '@rspack/binding-wasm32-wasi': 1.7.11 + '@rspack/binding-win32-arm64-msvc': 1.7.11 + '@rspack/binding-win32-ia32-msvc': 1.7.11 + '@rspack/binding-win32-x64-msvc': 1.7.11 + + '@rspack/core@1.7.11(@swc/helpers@0.5.21)': + dependencies: + '@module-federation/runtime-tools': 0.22.0 + '@rspack/binding': 1.7.11 + '@rspack/lite-tapable': 1.1.0 + optionalDependencies: + '@swc/helpers': 0.5.21 + + '@rspack/lite-tapable@1.1.0': {} + + '@rspack/plugin-react-refresh@1.6.2(react-refresh@0.18.0)': + dependencies: + error-stack-parser: 2.1.4 + react-refresh: 0.18.0 + + '@swc/helpers@0.5.21': + dependencies: + tslib: 2.8.1 + + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/parse-json@4.0.2': {} + + '@types/react-dom@19.2.3(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + + '@types/react@19.2.14': + dependencies: + csstype: 3.2.3 + + '@zag-js/accordion@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/anatomy@1.39.1': {} + + '@zag-js/angle-slider@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/aria-hidden@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/async-list@1.39.1': + dependencies: + '@zag-js/core': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/auto-resize@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/avatar@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/carousel@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/scroll-snap': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/cascade-select@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/checkbox@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/clipboard@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/collapsible@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/collection@1.39.1': + dependencies: + '@zag-js/utils': 1.39.1 + + '@zag-js/color-picker@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/color-utils': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/color-utils@1.39.1': + dependencies: + '@zag-js/utils': 1.39.1 + + '@zag-js/combobox@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/core@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/date-input@1.39.1(@internationalized/date@3.12.0)': + dependencies: + '@internationalized/date': 3.12.0 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/date-utils': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/dom-query': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/date-picker@1.39.1(@internationalized/date@3.12.0)': + dependencies: + '@internationalized/date': 3.12.0 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/date-utils': 1.39.1(@internationalized/date@3.12.0) + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/date-utils@1.39.1(@internationalized/date@3.12.0)': + dependencies: + '@internationalized/date': 3.12.0 + + '@zag-js/dialog@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/aria-hidden': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/remove-scroll': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/dismissable@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/dom-query@1.39.1': + dependencies: + '@zag-js/types': 1.39.1 + + '@zag-js/drawer@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/aria-hidden': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/remove-scroll': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/editable@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/file-upload@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/file-utils': 1.39.1 + '@zag-js/i18n-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/file-utils@1.39.1': + dependencies: + '@zag-js/i18n-utils': 1.39.1 + + '@zag-js/floating-panel@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/store': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/focus-trap@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/focus-visible@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/highlight-word@1.39.1': {} + + '@zag-js/hover-card@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/i18n-utils@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/image-cropper@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/interact-outside@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/json-tree-utils@1.39.1': {} + + '@zag-js/listbox@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/live-region@1.39.1': {} + + '@zag-js/marquee@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/menu@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/rect-utils': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/navigation-menu@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/number-input@1.39.1': + dependencies: + '@internationalized/number': 3.6.5 + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/pagination@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/password-input@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/pin-input@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/popover@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/aria-hidden': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/remove-scroll': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/popper@1.39.1': + dependencies: + '@floating-ui/dom': 1.7.6 + '@zag-js/dom-query': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/presence@1.39.1': + dependencies: + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + + '@zag-js/progress@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/qr-code@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + proxy-memoize: 3.0.1 + uqr: 0.1.2 + + '@zag-js/radio-group@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/rating-group@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/react@1.39.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@zag-js/core': 1.39.1 + '@zag-js/store': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + '@zag-js/rect-utils@1.39.1': {} + + '@zag-js/remove-scroll@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/scroll-area@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/scroll-snap@1.39.1': + dependencies: + '@zag-js/dom-query': 1.39.1 + + '@zag-js/select@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/signature-pad@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + perfect-freehand: 1.2.3 + + '@zag-js/slider@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/splitter@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/steps@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/store@1.39.1': + dependencies: + proxy-compare: 3.0.1 + + '@zag-js/switch@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/tabs@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/tags-input@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/auto-resize': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/live-region': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/timer@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/toast@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/toggle-group@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/toggle@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/tooltip@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-visible': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/tour@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dismissable': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/focus-trap': 1.39.1 + '@zag-js/interact-outside': 1.39.1 + '@zag-js/popper': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/tree-view@1.39.1': + dependencies: + '@zag-js/anatomy': 1.39.1 + '@zag-js/collection': 1.39.1 + '@zag-js/core': 1.39.1 + '@zag-js/dom-query': 1.39.1 + '@zag-js/types': 1.39.1 + '@zag-js/utils': 1.39.1 + + '@zag-js/types@1.39.1': + dependencies: + csstype: 3.2.3 + + '@zag-js/utils@1.39.1': {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.29.2 + cosmiconfig: 7.1.0 + resolve: 1.22.12 + + binary-extensions@2.3.0: {} + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + callsites@3.1.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + convert-source-map@1.9.0: {} + + cookie@1.1.1: {} + + core-js@3.47.0: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.3 + + csstype@3.2.3: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deepmerge@4.3.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + es-errors@1.3.0: {} + + escape-string-regexp@4.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regex.js@1.2.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + hyperdyperid@1.2.0: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + jiti@2.6.1: {} + + js-tokens@4.0.0: {} + + jsesc@3.1.0: {} + + json-parse-even-better-errors@2.3.1: {} + + json5@2.2.3: {} + + lines-and-columns@1.2.4: {} + + memfs@4.57.1(tslib@2.8.1): + dependencies: + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) + glob-to-regex.js: 1.2.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) + tree-dump: 1.1.0(tslib@2.8.1) + tslib: 2.8.1 + + mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + mobx: 6.15.0 + react: 19.2.5 + use-sync-external-store: 1.6.0(react@19.2.5) + optionalDependencies: + react-dom: 19.2.5(react@19.2.5) + + mobx@6.15.0: {} + + ms@2.1.3: {} + + next-themes@0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + normalize-path@3.0.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + perfect-freehand@1.2.3: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + prettier@3.8.3: {} + + proxy-compare@3.0.1: {} + + proxy-memoize@3.0.1: + dependencies: + proxy-compare: 3.0.1 + + react-dom@19.2.5(react@19.2.5): + dependencies: + react: 19.2.5 + scheduler: 0.27.0 + + react-hook-form@7.72.1(react@19.2.5): + dependencies: + react: 19.2.5 + + react-icons@5.6.0(react@19.2.5): + dependencies: + react: 19.2.5 + + react-is@16.13.1: {} + + react-refresh@0.18.0: {} + + react-router@7.14.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + cookie: 1.1.1 + react: 19.2.5 + set-cookie-parser: 2.7.2 + optionalDependencies: + react-dom: 19.2.5(react@19.2.5) + + react@19.2.5: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + reduce-configs@1.1.2: {} + + resolve-from@4.0.0: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + scheduler@0.27.0: {} + + set-cookie-parser@2.7.2: {} + + source-map@0.5.7: {} + + stackframe@1.3.4: {} + + stylis@4.2.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + thingies@2.6.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tree-dump@1.1.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + ts-checker-rspack-plugin@1.3.0(@rspack/core@1.7.11(@swc/helpers@0.5.21))(tslib@2.8.1)(typescript@5.9.3): + dependencies: + '@rspack/lite-tapable': 1.1.0 + chokidar: 3.6.0 + memfs: 4.57.1(tslib@2.8.1) + picocolors: 1.1.1 + typescript: 5.9.3 + optionalDependencies: + '@rspack/core': 1.7.11(@swc/helpers@0.5.21) + transitivePeerDependencies: + - tslib + + tslib@2.8.1: {} + + typescript@5.9.3: {} + + uqr@0.1.2: {} + + use-mask-input@3.9.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): + dependencies: + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + + use-sync-external-store@1.6.0(react@19.2.5): + dependencies: + react: 19.2.5 + + yaml@1.10.3: {} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..a30d797 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rsbuild.config.ts b/rsbuild.config.ts new file mode 100644 index 0000000..7bb9abe --- /dev/null +++ b/rsbuild.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; +import { pluginTypeCheck } from '@rsbuild/plugin-type-check'; + +// Docs: https://rsbuild.rs/config/ +export default defineConfig({ + plugins: [ + pluginReact(), + // pluginTypeCheck() + ], + html: { + title: 'МТС Бизнес', + }, +}); diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..56dd0bd --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,25 @@ +import { BrowserRouter, Route, Routes } from 'react-router'; +import AppLayout from './components/layouts/AppLayout'; +import CartPage from './pages/CartPage'; +import IndexPage from './pages/IndexPage'; +import NotFoundPage from './pages/NotFoundPage'; +import OrderReturnPage from './pages/OrderReturnPage'; +import PrivacyPage from './pages/PrivacyPage'; + +const App = () => { + return ( + + + }> + } /> + } /> + } /> + } /> + } /> + + + + ); +}; + +export default App; diff --git a/src/assets/fonts/MTSCompact_Bold-s.p.f0b1dee4.woff2 b/src/assets/fonts/MTSCompact_Bold-s.p.f0b1dee4.woff2 new file mode 100644 index 0000000..71226f2 Binary files /dev/null and b/src/assets/fonts/MTSCompact_Bold-s.p.f0b1dee4.woff2 differ diff --git a/src/assets/fonts/MTSCompact_Medium-s.p.07bd8ac4.woff2 b/src/assets/fonts/MTSCompact_Medium-s.p.07bd8ac4.woff2 new file mode 100644 index 0000000..427fd67 Binary files /dev/null and b/src/assets/fonts/MTSCompact_Medium-s.p.07bd8ac4.woff2 differ diff --git a/src/assets/fonts/MTSCompact_Regular-s.p.dc07201f.woff2 b/src/assets/fonts/MTSCompact_Regular-s.p.dc07201f.woff2 new file mode 100644 index 0000000..b10dc54 Binary files /dev/null and b/src/assets/fonts/MTSCompact_Regular-s.p.dc07201f.woff2 differ diff --git a/src/assets/fonts/MTSWide_Bold-s.p.9358ad40.woff2 b/src/assets/fonts/MTSWide_Bold-s.p.9358ad40.woff2 new file mode 100644 index 0000000..91c902a Binary files /dev/null and b/src/assets/fonts/MTSWide_Bold-s.p.9358ad40.woff2 differ diff --git a/src/assets/fonts/MTSWide_Medium-s.p.5cfaeb8c.woff2 b/src/assets/fonts/MTSWide_Medium-s.p.5cfaeb8c.woff2 new file mode 100644 index 0000000..da5d779 Binary files /dev/null and b/src/assets/fonts/MTSWide_Medium-s.p.5cfaeb8c.woff2 differ diff --git a/src/assets/images/1.png b/src/assets/images/1.png new file mode 100644 index 0000000..a3be440 Binary files /dev/null and b/src/assets/images/1.png differ diff --git a/src/assets/images/10.png b/src/assets/images/10.png new file mode 100644 index 0000000..b9114f5 Binary files /dev/null and b/src/assets/images/10.png differ diff --git a/src/assets/images/11.png b/src/assets/images/11.png new file mode 100644 index 0000000..8c413a4 Binary files /dev/null and b/src/assets/images/11.png differ diff --git a/src/assets/images/12.png b/src/assets/images/12.png new file mode 100644 index 0000000..22395f5 Binary files /dev/null and b/src/assets/images/12.png differ diff --git a/src/assets/images/13.png b/src/assets/images/13.png new file mode 100644 index 0000000..dc8ca7c Binary files /dev/null and b/src/assets/images/13.png differ diff --git a/src/assets/images/14.png b/src/assets/images/14.png new file mode 100644 index 0000000..a82dd9d Binary files /dev/null and b/src/assets/images/14.png differ diff --git a/src/assets/images/15.svg b/src/assets/images/15.svg new file mode 100644 index 0000000..52e046d --- /dev/null +++ b/src/assets/images/15.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/2.png b/src/assets/images/2.png new file mode 100644 index 0000000..7e7858a Binary files /dev/null and b/src/assets/images/2.png differ diff --git a/src/assets/images/3.png b/src/assets/images/3.png new file mode 100644 index 0000000..3ff2ac3 Binary files /dev/null and b/src/assets/images/3.png differ diff --git a/src/assets/images/4.png b/src/assets/images/4.png new file mode 100644 index 0000000..e12b1f8 Binary files /dev/null and b/src/assets/images/4.png differ diff --git a/src/assets/images/5.png b/src/assets/images/5.png new file mode 100644 index 0000000..5bdbe0c Binary files /dev/null and b/src/assets/images/5.png differ diff --git a/src/assets/images/6.png b/src/assets/images/6.png new file mode 100644 index 0000000..9c29811 Binary files /dev/null and b/src/assets/images/6.png differ diff --git a/src/assets/images/7.svg b/src/assets/images/7.svg new file mode 100644 index 0000000..9d8a6bb --- /dev/null +++ b/src/assets/images/7.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/8.png b/src/assets/images/8.png new file mode 100644 index 0000000..fe72a94 Binary files /dev/null and b/src/assets/images/8.png differ diff --git a/src/assets/images/9.png b/src/assets/images/9.png new file mode 100644 index 0000000..b10d04e Binary files /dev/null and b/src/assets/images/9.png differ diff --git a/src/assets/images/Icons_01_d90ba6108c.svg b/src/assets/images/Icons_01_d90ba6108c.svg new file mode 100644 index 0000000..dd4ddab --- /dev/null +++ b/src/assets/images/Icons_01_d90ba6108c.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/Icons_05_1a81052152.svg b/src/assets/images/Icons_05_1a81052152.svg new file mode 100644 index 0000000..143f6d1 --- /dev/null +++ b/src/assets/images/Icons_05_1a81052152.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/Icons_10_cbe597e826.svg b/src/assets/images/Icons_10_cbe597e826.svg new file mode 100644 index 0000000..ab6d4ce --- /dev/null +++ b/src/assets/images/Icons_10_cbe597e826.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/Icons_11_4abb65616f.svg b/src/assets/images/Icons_11_4abb65616f.svg new file mode 100644 index 0000000..7700f85 --- /dev/null +++ b/src/assets/images/Icons_11_4abb65616f.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/Icons_13_1a835eb599.svg b/src/assets/images/Icons_13_1a835eb599.svg new file mode 100644 index 0000000..4a48887 --- /dev/null +++ b/src/assets/images/Icons_13_1a835eb599.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/Image_Nabor_servisov_dlya_optovoj_kompanii_Catalog_de32716b9c.webp b/src/assets/images/Image_Nabor_servisov_dlya_optovoj_kompanii_Catalog_de32716b9c.webp new file mode 100644 index 0000000..56182d8 Binary files /dev/null and b/src/assets/images/Image_Nabor_servisov_dlya_optovoj_kompanii_Catalog_de32716b9c.webp differ diff --git a/src/assets/images/Image_Online_Kassa_4edaa3279f.webp b/src/assets/images/Image_Online_Kassa_4edaa3279f.webp new file mode 100644 index 0000000..d447990 Binary files /dev/null and b/src/assets/images/Image_Online_Kassa_4edaa3279f.webp differ diff --git a/src/assets/images/Image_mini_mobile_employees_small_ace7893009.webp b/src/assets/images/Image_mini_mobile_employees_small_ace7893009.webp new file mode 100644 index 0000000..8fe6e49 Binary files /dev/null and b/src/assets/images/Image_mini_mobile_employees_small_ace7893009.webp differ diff --git a/src/assets/images/Infinity-mobile.svg b/src/assets/images/Infinity-mobile.svg new file mode 100644 index 0000000..0ac70b2 --- /dev/null +++ b/src/assets/images/Infinity-mobile.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/Infinity.svg b/src/assets/images/Infinity.svg new file mode 100644 index 0000000..131f961 --- /dev/null +++ b/src/assets/images/Infinity.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/MTS_Logo_134dd5da5d.svg b/src/assets/images/MTS_Logo_134dd5da5d.svg new file mode 100644 index 0000000..19ed607 --- /dev/null +++ b/src/assets/images/MTS_Logo_134dd5da5d.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/images/besopasnost.svg b/src/assets/images/besopasnost.svg new file mode 100644 index 0000000..6e19651 --- /dev/null +++ b/src/assets/images/besopasnost.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/categories-all-products@1x.png b/src/assets/images/categories-all-products@1x.png new file mode 100644 index 0000000..faf1737 Binary files /dev/null and b/src/assets/images/categories-all-products@1x.png differ diff --git a/src/assets/images/categories-all-products@2x.png b/src/assets/images/categories-all-products@2x.png new file mode 100644 index 0000000..a26c095 Binary files /dev/null and b/src/assets/images/categories-all-products@2x.png differ diff --git a/src/assets/images/dengi_i_raschety.svg b/src/assets/images/dengi_i_raschety.svg new file mode 100644 index 0000000..dc4449b --- /dev/null +++ b/src/assets/images/dengi_i_raschety.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/fdf.webp b/src/assets/images/fdf.webp new file mode 100644 index 0000000..d417a22 Binary files /dev/null and b/src/assets/images/fdf.webp differ diff --git a/src/assets/images/geoservisy.svg b/src/assets/images/geoservisy.svg new file mode 100644 index 0000000..8e87edd --- /dev/null +++ b/src/assets/images/geoservisy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/internet_veshey.svg b/src/assets/images/internet_veshey.svg new file mode 100644 index 0000000..8cc4150 --- /dev/null +++ b/src/assets/images/internet_veshey.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/laptop_2x_acaa8895f0948d8aaf74fb4e933f5107_2_2d3c34afcb.png b/src/assets/images/laptop_2x_acaa8895f0948d8aaf74fb4e933f5107_2_2d3c34afcb.png new file mode 100644 index 0000000..a4c2d73 Binary files /dev/null and b/src/assets/images/laptop_2x_acaa8895f0948d8aaf74fb4e933f5107_2_2d3c34afcb.png differ diff --git a/src/assets/images/mobile_2x_99580bdf85819f92f7e72590cd2bed71_1_228cc1c2ff.png b/src/assets/images/mobile_2x_99580bdf85819f92f7e72590cd2bed71_1_228cc1c2ff.png new file mode 100644 index 0000000..b145446 Binary files /dev/null and b/src/assets/images/mobile_2x_99580bdf85819f92f7e72590cd2bed71_1_228cc1c2ff.png differ diff --git a/src/assets/images/oblachnye_resheniya.svg b/src/assets/images/oblachnye_resheniya.svg new file mode 100644 index 0000000..46c8c27 --- /dev/null +++ b/src/assets/images/oblachnye_resheniya.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/otraslevye_resheniya.svg b/src/assets/images/otraslevye_resheniya.svg new file mode 100644 index 0000000..5109208 --- /dev/null +++ b/src/assets/images/otraslevye_resheniya.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/s_002.gif b/src/assets/images/s_002.gif new file mode 100644 index 0000000..efb6768 Binary files /dev/null and b/src/assets/images/s_002.gif differ diff --git a/src/assets/images/size-24-style-fill.svg b/src/assets/images/size-24-style-fill.svg new file mode 100644 index 0000000..78e8860 --- /dev/null +++ b/src/assets/images/size-24-style-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-fill_002.svg b/src/assets/images/size-24-style-fill_002.svg new file mode 100644 index 0000000..d91f142 --- /dev/null +++ b/src/assets/images/size-24-style-fill_002.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline.svg b/src/assets/images/size-24-style-outline.svg new file mode 100644 index 0000000..6875fad --- /dev/null +++ b/src/assets/images/size-24-style-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_002.svg b/src/assets/images/size-24-style-outline_002.svg new file mode 100644 index 0000000..56ea6f1 --- /dev/null +++ b/src/assets/images/size-24-style-outline_002.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_003.svg b/src/assets/images/size-24-style-outline_003.svg new file mode 100644 index 0000000..146fa48 --- /dev/null +++ b/src/assets/images/size-24-style-outline_003.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_004.svg b/src/assets/images/size-24-style-outline_004.svg new file mode 100644 index 0000000..e895f0f --- /dev/null +++ b/src/assets/images/size-24-style-outline_004.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_005.svg b/src/assets/images/size-24-style-outline_005.svg new file mode 100644 index 0000000..14dae4b --- /dev/null +++ b/src/assets/images/size-24-style-outline_005.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_006.svg b/src/assets/images/size-24-style-outline_006.svg new file mode 100644 index 0000000..1945205 --- /dev/null +++ b/src/assets/images/size-24-style-outline_006.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_007.svg b/src/assets/images/size-24-style-outline_007.svg new file mode 100644 index 0000000..b498652 --- /dev/null +++ b/src/assets/images/size-24-style-outline_007.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_008.svg b/src/assets/images/size-24-style-outline_008.svg new file mode 100644 index 0000000..3c9f382 --- /dev/null +++ b/src/assets/images/size-24-style-outline_008.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_009.svg b/src/assets/images/size-24-style-outline_009.svg new file mode 100644 index 0000000..bbc8212 --- /dev/null +++ b/src/assets/images/size-24-style-outline_009.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/size-24-style-outline_010.svg b/src/assets/images/size-24-style-outline_010.svg new file mode 100644 index 0000000..0aed3d8 --- /dev/null +++ b/src/assets/images/size-24-style-outline_010.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sovmestnaya_rabota.svg b/src/assets/images/sovmestnaya_rabota.svg new file mode 100644 index 0000000..40158f8 --- /dev/null +++ b/src/assets/images/sovmestnaya_rabota.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/svyaz_i_internet.svg b/src/assets/images/svyaz_i_internet.svg new file mode 100644 index 0000000..1b75375 --- /dev/null +++ b/src/assets/images/svyaz_i_internet.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/images/tablet_2x_c6c17676b33dc0f623c48f4b2d6726f4_89f38704cd.png b/src/assets/images/tablet_2x_c6c17676b33dc0f623c48f4b2d6726f4_89f38704cd.png new file mode 100644 index 0000000..d99b73a Binary files /dev/null and b/src/assets/images/tablet_2x_c6c17676b33dc0f623c48f4b2d6726f4_89f38704cd.png differ diff --git a/src/components/cart-page/CartContent.tsx b/src/components/cart-page/CartContent.tsx new file mode 100644 index 0000000..380b0f1 --- /dev/null +++ b/src/components/cart-page/CartContent.tsx @@ -0,0 +1,118 @@ +import { Box, Button, HStack, IconButton, Image, Text, VStack } from "@chakra-ui/react"; +import { observer } from "mobx-react-lite"; +import { LuMinus, LuPlus, LuTrash2 } from "react-icons/lu"; +import { cartStore } from "../../store/cartStore"; + +const formatPrice = (price: number) => + new Intl.NumberFormat("ru-RU", { + style: "currency", + currency: "RUB", + maximumFractionDigits: 0, + }).format(price); + +type CartContentProps = { + onCheckout: () => void; +}; + +const CartContent = observer(({ onCheckout }: CartContentProps) => { + if (cartStore.itemsList.length === 0) { + return ( + + + Корзина пуста + + + ); + } + + return ( + + {cartStore.itemsList.map((item) => ( + + + + + {`TODO: + + + + {item.product.name} + + {item.product.description} + + {formatPrice(item.product.price)}/мес + + + + + + + cartStore.decrease(item.product.id)} + > + + + + {item.quantity} + + cartStore.increase(item.product.id)} + > + + + + + {formatPrice(item.product.price * item.quantity)} + + cartStore.remove(item.product.id)} + > + + + + + + ))} + + + + + + Итого + + + {formatPrice(cartStore.totalPrice)} + + + + + + + ); +}); + +export default CartContent; diff --git a/src/components/cart-page/CartPageHeader.tsx b/src/components/cart-page/CartPageHeader.tsx new file mode 100644 index 0000000..ee1c89c --- /dev/null +++ b/src/components/cart-page/CartPageHeader.tsx @@ -0,0 +1,20 @@ +import { Button, HStack, Text } from "@chakra-ui/react"; + +type CartPageHeaderProps = { + onContinue: () => void; +}; + +const CartPageHeader = ({ onContinue }: CartPageHeaderProps) => { + return ( + + + Корзина + + + + ); +}; + +export default CartPageHeader; diff --git a/src/components/cart-page/CheckoutDialog.tsx b/src/components/cart-page/CheckoutDialog.tsx new file mode 100644 index 0000000..3691a59 --- /dev/null +++ b/src/components/cart-page/CheckoutDialog.tsx @@ -0,0 +1,128 @@ +import { Button, Dialog, Input, Text, VStack } from "@chakra-ui/react"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { Link } from "react-router"; +import { useHookFormMask } from "use-mask-input"; + +export type CheckoutFormValues = { + customerName: string; + email: string; + phoneNumber: string; +}; + +type CheckoutDialogProps = { + open: boolean; + onOpenChange: (open: boolean) => void; + onSubmit: (values: CheckoutFormValues) => Promise | void; +}; + +const CheckoutDialog = ({ open, onOpenChange, onSubmit }: CheckoutDialogProps) => { + const { + register, + handleSubmit, + reset, + formState: { errors, isSubmitting }, + } = useForm({ + defaultValues: { + customerName: "", + email: "", + phoneNumber: "", + }, + mode: "onBlur", + }); + const registerWithMask = useHookFormMask(register); + + useEffect(() => { + if (!open) { + reset(); + } + }, [open, reset]); + + return ( + onOpenChange(details.open)}> + + + + + Оформление заказа + + + + + Имя + + {errors.customerName ? ( + + {errors.customerName.message} + + ) : null} + + + Email + + {errors.email ? ( + + {errors.email.message} + + ) : null} + + + Номер телефона + + {errors.phoneNumber ? ( + + {errors.phoneNumber.message} + + ) : null} + + + Нажимая «Оформить», вы соглашаетесь с{" "} + + обработкой персональных данных + + . + + + + + + + + + + + + + ); +}; + +export default CheckoutDialog; diff --git a/src/components/index-page/IndexHeader.tsx b/src/components/index-page/IndexHeader.tsx new file mode 100644 index 0000000..0b603ae --- /dev/null +++ b/src/components/index-page/IndexHeader.tsx @@ -0,0 +1,99 @@ +import { + Badge, + Box, + Container, + Flex, + HStack, + Icon, + IconButton, + Image, + Text, +} from '@chakra-ui/react'; +import { observer } from 'mobx-react-lite'; +import { LuShoppingCart, LuMapPin, LuPhone } from 'react-icons/lu'; +import logo from '~/assets/images/MTS_Logo_134dd5da5d.svg'; +import { useNavigate } from 'react-router'; +import { cartStore } from '../../store/cartStore'; + +const IndexHeader = observer(() => { + const navigate = useNavigate(); + return ( + <> + + + + + Частным клиентам + Бизнесу + Ещё + + + + + Санкт-Петербург и Ленинградская область + + + + 8 800 234-00-10 + + + + + + + + + + МТС Бизнес navigate('/')} + /> + navigate('/')} + > + БИЗНЕС + + + + + navigate('/cart')} + > + + + {cartStore.totalCount > 0 ? ( + + {cartStore.totalCount} + + ) : null} + + + + + ); +}); + +export default IndexHeader; diff --git a/src/components/index-page/IndexHeroBanner.tsx b/src/components/index-page/IndexHeroBanner.tsx new file mode 100644 index 0000000..97ce5d7 --- /dev/null +++ b/src/components/index-page/IndexHeroBanner.tsx @@ -0,0 +1,62 @@ +import { Box, Image, Text, VStack } from '@chakra-ui/react'; +import heroImage from '~/assets/images/9.png'; + +const IndexHeroBanner = () => { + return ( + + + + + Тариф для M2M-устройств + + + от 420 ₽/год + + + Удобно планируйте расходы на трафик и обслуживание + + + + + + + + + ); +}; + +export default IndexHeroBanner; diff --git a/src/components/index-page/IndexProductsSection.tsx b/src/components/index-page/IndexProductsSection.tsx new file mode 100644 index 0000000..4b6dac9 --- /dev/null +++ b/src/components/index-page/IndexProductsSection.tsx @@ -0,0 +1,240 @@ +import { Box, HStack, Image, Separator, Text, VStack } from '@chakra-ui/react'; +import { observer } from 'mobx-react-lite'; +import { useMemo, useState } from 'react'; +import { + categories, + products, + type CategoryId, + type Product, +} from '../../data/products'; +import { cartStore } from '../../store/cartStore'; +import { toaster } from '../ui/toaster'; + +const formatPrice = (price: number) => + new Intl.NumberFormat('ru-RU', { + style: 'currency', + currency: 'RUB', + maximumFractionDigits: 0, + }).format(price); + +const IndexProductsSection = observer(() => { + const [activeCategory, setActiveCategory] = useState( + categories[0].id, + ); + const activeCategoryLabel = + categories.find((category) => category.id === activeCategory)?.label ?? ''; + const visibleProducts = useMemo( + () => products.filter((product) => product.categoryId === activeCategory), + [activeCategory], + ); + const featuredProduct = visibleProducts[0]; + const secondaryProducts = visibleProducts.slice(1, 3); + const addToCart = (product: Product) => { + cartStore.add(product); + toaster.create({ + type: 'success', + title: 'Товар добавлен в корзину', + description: product.name, + closable: true, + }); + }; + + return ( + <> + + + {categories.map((item) => ( + setActiveCategory(item.id)} + minW="0" + flex="1" + pb="2" + cursor="pointer" + transition="all 0.2s ease" + > + + + {`TODO: + + + {item.label} + + {activeCategory === item.id ? ( + + ) : ( + + )} + + + ))} + + + + + + + {activeCategoryLabel} + + + + {!featuredProduct ? ( + + В этой категории пока нет товаров + + ) : ( + + + addToCart(featuredProduct)} + > + + + + {featuredProduct.name} + + + + {featuredProduct.description} + + + {formatPrice(featuredProduct.price)}/мес + + + + + {`TODO: + + + + + {secondaryProducts.length > 0 ? ( + + {secondaryProducts.map((product) => ( + addToCart(product)} + > + + + {`TODO: + + + + {product.name} + + + + {product.description} + + + {formatPrice(product.price)}/мес + + + + ))} + + ) : null} + + )} + + + ); +}); + +export default IndexProductsSection; diff --git a/src/components/layouts/AppLayout.tsx b/src/components/layouts/AppLayout.tsx new file mode 100644 index 0000000..b4a0464 --- /dev/null +++ b/src/components/layouts/AppLayout.tsx @@ -0,0 +1,14 @@ +import { Provider } from '../ui/provider'; +import { Outlet } from 'react-router'; +import { Toaster } from '../ui/toaster'; + +const AppLayout = () => { + return ( + + + + + ); +}; + +export default AppLayout; diff --git a/src/components/ui/color-mode.tsx b/src/components/ui/color-mode.tsx new file mode 100644 index 0000000..c3f9aab --- /dev/null +++ b/src/components/ui/color-mode.tsx @@ -0,0 +1,108 @@ +'use client'; + +import type { IconButtonProps, SpanProps } from '@chakra-ui/react'; +import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react'; +import { ThemeProvider, useTheme } from 'next-themes'; +import type { ThemeProviderProps } from 'next-themes'; +import * as React from 'react'; +import { LuMoon, LuSun } from 'react-icons/lu'; + +export interface ColorModeProviderProps extends ThemeProviderProps {} + +export function ColorModeProvider(props: ColorModeProviderProps) { + return ( + + ); +} + +export type ColorMode = 'light' | 'dark'; + +export interface UseColorModeReturn { + colorMode: ColorMode; + setColorMode: (colorMode: ColorMode) => void; + toggleColorMode: () => void; +} + +export function useColorMode(): UseColorModeReturn { + const { resolvedTheme, setTheme, forcedTheme } = useTheme(); + const colorMode = forcedTheme || resolvedTheme; + const toggleColorMode = () => { + setTheme(resolvedTheme === 'dark' ? 'light' : 'dark'); + }; + return { + colorMode: colorMode as ColorMode, + setColorMode: setTheme, + toggleColorMode, + }; +} + +export function useColorModeValue(light: T, dark: T) { + const { colorMode } = useColorMode(); + return colorMode === 'dark' ? dark : light; +} + +export function ColorModeIcon() { + const { colorMode } = useColorMode(); + return colorMode === 'dark' ? : ; +} + +interface ColorModeButtonProps extends Omit {} + +export const ColorModeButton = React.forwardRef< + HTMLButtonElement, + ColorModeButtonProps +>(function ColorModeButton(props, ref) { + const { toggleColorMode } = useColorMode(); + return ( + }> + + + + + ); +}); + +export const LightMode = React.forwardRef( + function LightMode(props, ref) { + return ( + + ); + }, +); + +export const DarkMode = React.forwardRef( + function DarkMode(props, ref) { + return ( + + ); + }, +); diff --git a/src/components/ui/provider.tsx b/src/components/ui/provider.tsx new file mode 100644 index 0000000..df2e866 --- /dev/null +++ b/src/components/ui/provider.tsx @@ -0,0 +1,13 @@ +'use client'; + +import { ChakraProvider } from '@chakra-ui/react'; +import { ColorModeProvider, type ColorModeProviderProps } from './color-mode'; +import { system } from '../../theme'; + +export function Provider(props: ColorModeProviderProps) { + return ( + + + + ); +} diff --git a/src/components/ui/toaster.tsx b/src/components/ui/toaster.tsx new file mode 100644 index 0000000..8032ce7 --- /dev/null +++ b/src/components/ui/toaster.tsx @@ -0,0 +1,43 @@ +'use client'; + +import { + Toaster as ChakraToaster, + Portal, + Spinner, + Stack, + Toast, + createToaster, +} from '@chakra-ui/react'; + +export const toaster = createToaster({ + placement: 'bottom-end', + pauseOnPageIdle: true, +}); + +export const Toaster = () => { + return ( + + + {(toast) => ( + + {toast.type === 'loading' ? ( + + ) : ( + + )} + + {toast.title && {toast.title}} + {toast.description && ( + {toast.description} + )} + + {toast.action && ( + {toast.action.label} + )} + {toast.closable && } + + )} + + + ); +}; diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..3e005ad --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,46 @@ +import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react'; +import * as React from 'react'; + +export interface TooltipProps extends ChakraTooltip.RootProps { + showArrow?: boolean; + portalled?: boolean; + portalRef?: React.RefObject; + content: React.ReactNode; + contentProps?: ChakraTooltip.ContentProps; + disabled?: boolean; +} + +export const Tooltip = React.forwardRef( + function Tooltip(props, ref) { + const { + showArrow, + children, + disabled, + portalled = true, + content, + contentProps, + portalRef, + ...rest + } = props; + + if (disabled) return children; + + return ( + + {children} + + + + {showArrow && ( + + + + )} + {content} + + + + + ); + }, +); diff --git a/src/data/products.ts b/src/data/products.ts new file mode 100644 index 0000000..c0f9050 --- /dev/null +++ b/src/data/products.ts @@ -0,0 +1,211 @@ +import catCloud from '~/assets/images/oblachnye_resheniya.svg'; +import catCollab from '~/assets/images/sovmestnaya_rabota.svg'; +import catGeo from '~/assets/images/geoservisy.svg'; +import catIndustry from '~/assets/images/otraslevye_resheniya.svg'; +import catIot from '~/assets/images/internet_veshey.svg'; +import catMoney from '~/assets/images/dengi_i_raschety.svg'; +import catSecurity from '~/assets/images/besopasnost.svg'; +import catSvaz from '~/assets/images/svyaz_i_internet.svg'; +import prod1 from '~/assets/images/1.png'; +import prod10 from '~/assets/images/10.png'; +import prod11 from '~/assets/images/11.png'; +import prod12 from '~/assets/images/12.png'; +import prod13 from '~/assets/images/13.png'; +import prod14 from '~/assets/images/14.png'; +import prod15 from '~/assets/images/15.svg'; +import prod16 from '~/assets/images/Image_Online_Kassa_4edaa3279f.webp'; +import prod17 from '~/assets/images/Image_mini_mobile_employees_small_ace7893009.webp'; +import prod18 from '~/assets/images/Image_Nabor_servisov_dlya_optovoj_kompanii_Catalog_de32716b9c.webp'; +import prod2 from '~/assets/images/2.png'; +import prod3 from '~/assets/images/3.png'; +import prod4 from '~/assets/images/4.png'; +import prod5 from '~/assets/images/5.png'; +import prod6 from '~/assets/images/6.png'; +import prod7 from '~/assets/images/7.svg'; +import prod8 from '~/assets/images/8.png'; +import prod9 from '~/assets/images/9.png'; + +export const categories = [ + { id: 'connect', label: 'Связь и интернет', imageSrc: catSvaz }, + { id: 'iot', label: 'Интернет вещей M2M/IoT', imageSrc: catIot }, + { id: 'security', label: 'Безопасность', imageSrc: catSecurity }, + { id: 'cloud', label: 'Облачные решения', imageSrc: catCloud }, + { id: 'collab', label: 'Совместная работа', imageSrc: catCollab }, + { id: 'geo', label: 'Геосервисы', imageSrc: catGeo }, + { id: 'money', label: 'Деньги и расчёты', imageSrc: catMoney }, + { id: 'industry', label: 'Отраслевые решения', imageSrc: catIndustry }, +] as const; + +export type CategoryId = (typeof categories)[number]['id']; + +export type Product = { + id: string; + name: string; + description: string; + price: number; + categoryId: CategoryId; + imageSrc: string; +}; + +export const products: Product[] = [ + { + id: '2c2ebb74-7f0b-4c20-aaf3-f138f9755a46', + name: 'Виртуальная АТС', + description: 'Облачная телефония для бизнеса с гибкой настройкой', + price: 1500, + categoryId: 'connect', + imageSrc: prod1, + }, + { + id: '7891394c-67bd-4102-aed5-264ef3d77509', + name: 'Корпоративная мобильная связь', + description: 'Тариф для сотрудников с пакетами минут и интернета', + price: 800, + categoryId: 'connect', + imageSrc: prod2, + }, + { + id: 'fd3894b3-5074-4569-9404-74aac27f08a6', + name: 'Интернет для офиса', + description: 'Высокоскоростной проводной интернет', + price: 1200, + categoryId: 'connect', + imageSrc: prod3, + }, + { + id: 'e555cc38-812a-4be0-b6f2-d5ffa4b4c66f', + name: 'Облачное хранилище', + description: 'Безопасное хранение и доступ к данным', + price: 950, + categoryId: 'cloud', + imageSrc: prod4, + }, + { + id: '4d75904b-3484-4d75-bf91-97f109bcc7c8', + name: 'Видеонаблюдение', + description: 'Система удалённого видеоконтроля', + price: 2000, + categoryId: 'security', + imageSrc: prod5, + }, + { + id: '08b69d44-b8e1-435d-a29f-4c3888609e78', + name: 'Кибербезопасность', + description: 'Комплексная защита IT-инфраструктуры', + price: 3000, + categoryId: 'security', + imageSrc: prod6, + }, + { + id: '7429b33c-4492-4ece-b3f3-5e40418a4f50', + name: 'IoT платформа', + description: 'Управление устройствами интернета вещей', + price: 2700, + categoryId: 'iot', + imageSrc: prod7, + }, + { + id: 'dcf3244b-0bda-4a1c-acde-1f689482cb15', + name: 'SMS-рассылки', + description: 'Сервис массовых уведомлений клиентам', + price: 500, + categoryId: 'collab', + imageSrc: prod8, + }, + { + id: '54f1b970-5b5e-4e3d-9198-32594d4148f3', + name: 'Email-рассылки', + description: 'Маркетинговые email-кампании', + price: 400, + categoryId: 'collab', + imageSrc: prod9, + }, + { + id: 'a5a82af8-f9a4-4882-95e0-bc640b27290c', + name: 'VPN для бизнеса', + description: 'Защищённый удалённый доступ сотрудников', + price: 1100, + categoryId: 'security', + imageSrc: prod10, + }, + { + id: '10d13943-8cee-4c1e-8c1c-0e6fd392e7d8', + name: 'CRM система', + description: 'Управление клиентской базой и продажами', + price: 2200, + categoryId: 'collab', + imageSrc: prod11, + }, + { + id: '9bfbe77d-2377-4f16-9d21-fe7e2cd51963', + name: 'Облачные серверы', + description: 'Виртуальные машины для бизнеса', + price: 3500, + categoryId: 'cloud', + imageSrc: prod12, + }, + { + id: '8bd07d68-ba04-4530-9ad9-1ec67ad4d55d', + name: 'Резервное копирование', + description: 'Автоматический бэкап данных', + price: 1300, + categoryId: 'cloud', + imageSrc: prod13, + }, + { + id: '5c645b56-9cc3-4e8e-9577-d87c4ffb35be', + name: 'IP-телефоны', + description: 'Оборудование для корпоративной связи', + price: 5000, + categoryId: 'connect', + imageSrc: prod14, + }, + { + id: '9abdb5d7-00fe-4315-bae6-22bb5d92846a', + name: 'Контроль сотрудников', + description: 'Система мониторинга рабочего времени', + price: 1700, + categoryId: 'industry', + imageSrc: prod15, + }, + { + id: 'f0d8a50d-3e42-4950-beed-19b26548d9e3', + name: 'Wi-Fi для бизнеса', + description: 'Организация корпоративной Wi-Fi сети', + price: 1400, + categoryId: 'connect', + imageSrc: prod16, + }, + { + id: '0ee72e3a-ba58-4065-9cd2-2d2bd7349aba', + name: 'Аналитика данных', + description: 'Инструменты бизнес-аналитики', + price: 2600, + categoryId: 'geo', + imageSrc: prod17, + }, + { + id: 'd0239808-4b78-4f91-be7f-464ca52eea74', + name: 'Онлайн-кассы', + description: 'Решение для приёма платежей', + price: 4800, + categoryId: 'money', + imageSrc: prod18, + }, + { + id: '795d0e18-2531-4eed-941b-1c74ff48a72e', + name: 'Электронный документооборот', + description: 'Обмен документами в цифровом виде', + price: 900, + categoryId: 'collab', + imageSrc: prod1, + }, + { + id: '2dede89c-c492-45ab-8082-8bbd0a19a4e7', + name: 'Хостинг сайтов', + description: 'Размещение и поддержка веб-сайтов', + price: 700, + categoryId: 'industry', + imageSrc: prod2, + }, +]; diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..698ba8b --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,11 @@ +/// + +/** + * Imports the SVG file as a React component. + * @requires [@rsbuild/plugin-svgr](https://npmjs.com/package/@rsbuild/plugin-svgr) + */ +declare module '*.svg?react' { + import type React from 'react'; + const ReactComponent: React.FunctionComponent>; + export default ReactComponent; +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..3a13907 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './styles/fonts.css'; + +const rootEl = document.getElementById('root'); +if (rootEl) { + const root = ReactDOM.createRoot(rootEl); + root.render( + + + , + ); +} diff --git a/src/pages/CartPage.tsx b/src/pages/CartPage.tsx new file mode 100644 index 0000000..15cca04 --- /dev/null +++ b/src/pages/CartPage.tsx @@ -0,0 +1,85 @@ +import { Box, Container } from '@chakra-ui/react'; +import { observer } from 'mobx-react-lite'; +import { useState } from 'react'; +import { useNavigate } from 'react-router'; +import CartContent from '../components/cart-page/CartContent'; +import CartPageHeader from '../components/cart-page/CartPageHeader'; +import CheckoutDialog, { + type CheckoutFormValues, +} from '../components/cart-page/CheckoutDialog'; +import IndexHeader from '../components/index-page/IndexHeader'; +import { toaster } from '../components/ui/toaster'; +import { cartStore } from '../store/cartStore'; + +const CartPage = observer(() => { + const navigate = useNavigate(); + const [open, setOpen] = useState(false); + + const submitOrder = async (values: CheckoutFormValues) => { + if (cartStore.itemsList.length === 0) { + toaster.create({ + type: 'error', + title: 'Корзина пуста', + closable: true, + }); + return; + } + + try { + const payload = { + customerName: values.customerName.trim(), + phoneNumber: values.phoneNumber.trim(), + email: values.email.trim(), + items: cartStore.itemsList.map((item) => ({ + productId: item.product.id, + quantity: item.quantity, + })), + }; + + const response = await fetch('http://localhost:8080/api/orders', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + cartStore.clear(); + setOpen(false); + toaster.create({ + type: 'success', + title: 'Заказ оформлен', + closable: true, + }); + } catch { + toaster.create({ + type: 'error', + title: 'Не удалось оформить заказ', + description: 'Проверьте данные и попробуйте снова', + closable: true, + }); + } + }; + + return ( + + + + navigate('/')} /> + setOpen(true)} /> + + + + + ); +}); + +export default CartPage; diff --git a/src/pages/IndexPage.tsx b/src/pages/IndexPage.tsx new file mode 100644 index 0000000..2038b00 --- /dev/null +++ b/src/pages/IndexPage.tsx @@ -0,0 +1,18 @@ +import { Box, Container } from '@chakra-ui/react'; +import IndexHeader from '../components/index-page/IndexHeader'; +import IndexHeroBanner from '../components/index-page/IndexHeroBanner'; +import IndexProductsSection from '../components/index-page/IndexProductsSection'; + +const IndexPage = () => { + return ( + + + + + + + + ); +}; + +export default IndexPage; diff --git a/src/pages/NotFoundPage.tsx b/src/pages/NotFoundPage.tsx new file mode 100644 index 0000000..5e6a86a --- /dev/null +++ b/src/pages/NotFoundPage.tsx @@ -0,0 +1,63 @@ +import { Box, Button, Container, Text, VStack } from '@chakra-ui/react'; +import { useNavigate } from 'react-router'; +import IndexHeader from '../components/index-page/IndexHeader'; + +const NotFoundPage = () => { + const navigate = useNavigate(); + + return ( + + + + + + + 404 + + + Страница не найдена + + + Возможно, ссылка устарела или страница была перемещена. Вернитесь + на главную и продолжите работу с сервисами МТС Бизнес. + + + + + + + ); +}; + +export default NotFoundPage; diff --git a/src/pages/OrderReturnPage.tsx b/src/pages/OrderReturnPage.tsx new file mode 100644 index 0000000..5fafea3 --- /dev/null +++ b/src/pages/OrderReturnPage.tsx @@ -0,0 +1,53 @@ +import { Box, Button, Container, Text, VStack } from '@chakra-ui/react'; +import { useNavigate } from 'react-router'; +import IndexHeader from '../components/index-page/IndexHeader'; + +const OrderReturnPage = () => { + const navigate = useNavigate(); + + return ( + + + + + + + Оплата прошла успешно + + + Поздравляем, ваш заказ оплачен. Спасибо, что выбрали МТС Бизнес. + + + + + + + ); +}; + +export default OrderReturnPage; diff --git a/src/pages/PrivacyPage.tsx b/src/pages/PrivacyPage.tsx new file mode 100644 index 0000000..f8892fa --- /dev/null +++ b/src/pages/PrivacyPage.tsx @@ -0,0 +1,81 @@ +import { Box, Container, List, Text, VStack } from '@chakra-ui/react'; +import IndexHeader from '../components/index-page/IndexHeader'; + +const PrivacyPage = () => { + return ( + + + + + + + Согласие на обработку персональных данных + + + + Заполняя форму на сайте business.mts.ru (далее — Форма), + Пользователь свободно, своей волей и в своем интересе + предоставляет ПАО «Мобильные ТелеСистемы» (ИНН 7740000076, + юридический адрес: 109147, г. Москва, ул. Марксистская, д. 4, стр. + 1) (далее — Оператор) согласие на обработку своих персональных + данных (далее — ПДн). Пользователь также подтверждает, что + ознакомлен и согласен с Политикой обработки персональных данных. + + + Оператор обрабатывает ПДн в целях: + + рассмотрения заявки; + информационного взаимодействия; + + проведения маркетинговых мероприятий Оператора и его партнёрам; + + + информирования об услугах и акциях, включая рассылку. + + + + + Согласие распространяется на ПДн, указанные в Форме, а также + полученные при дальнейшем взаимодействии, включая: ФИО, должность, + название компании, ИНН, регион, адрес, абонентский номер, адрес + электронной почты, иная информация, которая может быть + предоставлена Пользователем в полях «Комментарии» и «Загрузите + файлы». + + + + Оператор вправе обрабатывать ПДн с использованием средств + автоматизации и без таковых, включая следующие действия: сбор, + запись, систематизация, накопление, хранение, уточнение + (обновление, изменение), извлечение, использование, передачу + (предоставление, доступ), блокирование, удаление, уничтожение. + + + + Для указанных целей ПДн могут передаваться партнёрам Оператора. + + + + Согласие действует с момента предоставления до достижения целей + обработки ПДн. + + + + Пользователь вправе отозвать согласие в любой момент, направив + письменное заявление по адресу: 109147, г. Москва, ул. + Марксистская, д. 4, стр. 1. + + + + + + ); +}; + +export default PrivacyPage; diff --git a/src/store/cartStore.ts b/src/store/cartStore.ts new file mode 100644 index 0000000..bb4df16 --- /dev/null +++ b/src/store/cartStore.ts @@ -0,0 +1,95 @@ +import { makeAutoObservable, reaction } from 'mobx'; +import type { Product } from '../data/products'; + +export type CartItem = { + product: Product; + quantity: number; +}; + +class CartStore { + private static readonly STORAGE_KEY = 'mts-public-cart'; + items = new Map(); + + constructor() { + makeAutoObservable(this); + this.hydrate(); + reaction( + () => + this.itemsList.map((item) => ({ + product: item.product, + quantity: item.quantity, + })), + (items) => { + if (typeof window === 'undefined') return; + localStorage.setItem(CartStore.STORAGE_KEY, JSON.stringify(items)); + }, + ); + } + + private hydrate() { + if (typeof window === 'undefined') return; + const raw = localStorage.getItem(CartStore.STORAGE_KEY); + if (!raw) return; + + try { + const parsed = JSON.parse(raw) as CartItem[]; + this.items = new Map( + parsed + .filter((item) => item?.product?.id && item.quantity > 0) + .map((item) => [item.product.id, item]), + ); + } catch { + localStorage.removeItem(CartStore.STORAGE_KEY); + } + } + + add(product: Product) { + const existing = this.items.get(product.id); + if (existing) { + existing.quantity += 1; + return; + } + this.items.set(product.id, { product, quantity: 1 }); + } + + remove(productId: string) { + this.items.delete(productId); + } + + increase(productId: string) { + const item = this.items.get(productId); + if (!item) return; + item.quantity += 1; + } + + decrease(productId: string) { + const item = this.items.get(productId); + if (!item) return; + if (item.quantity <= 1) { + this.items.delete(productId); + return; + } + item.quantity -= 1; + } + + clear() { + this.items.clear(); + } + + get itemsList() { + return Array.from(this.items.values()); + } + + get totalCount() { + return this.itemsList.reduce((acc, item) => acc + item.quantity, 0); + } + + get totalPrice() { + return this.itemsList.reduce( + (acc, item) => acc + item.product.price * item.quantity, + 0, + ); + } +} + +export const cartStore = new CartStore(); diff --git a/src/styles/fonts.css b/src/styles/fonts.css new file mode 100644 index 0000000..ffee408 --- /dev/null +++ b/src/styles/fonts.css @@ -0,0 +1,41 @@ +@font-face { + font-family: 'MTS Compact'; + src: url('../assets/fonts/MTSCompact_Regular-s.p.dc07201f.woff2') + format('woff2'); + font-style: normal; + font-weight: 400; + font-display: swap; +} + +@font-face { + font-family: 'MTS Compact'; + src: url('../assets/fonts/MTSCompact_Medium-s.p.07bd8ac4.woff2') + format('woff2'); + font-style: normal; + font-weight: 500; + font-display: swap; +} + +@font-face { + font-family: 'MTS Compact'; + src: url('../assets/fonts/MTSCompact_Bold-s.p.f0b1dee4.woff2') format('woff2'); + font-style: normal; + font-weight: 700; + font-display: swap; +} + +@font-face { + font-family: 'MTS Wide'; + src: url('../assets/fonts/MTSWide_Medium-s.p.5cfaeb8c.woff2') format('woff2'); + font-style: normal; + font-weight: 500; + font-display: swap; +} + +@font-face { + font-family: 'MTS Wide'; + src: url('../assets/fonts/MTSWide_Bold-s.p.9358ad40.woff2') format('woff2'); + font-style: normal; + font-weight: 700; + font-display: swap; +} diff --git a/src/theme/index.ts b/src/theme/index.ts new file mode 100644 index 0000000..70e0b39 --- /dev/null +++ b/src/theme/index.ts @@ -0,0 +1,105 @@ +// theme.ts +import { createSystem, defaultConfig, defineConfig } from '@chakra-ui/react'; + +const config = defineConfig({ + theme: { + tokens: { + colors: { + brand: { + 50: { value: '#f5f2ff' }, + 100: { value: '#e9e3ff' }, + 200: { value: '#d1c6ff' }, + 300: { value: '#b39cff' }, + 400: { value: '#8f6cf7' }, + 500: { value: '#7a5af8' }, + 600: { value: '#6941c6' }, + 700: { value: '#53389e' }, + 800: { value: '#42307d' }, + 900: { value: '#2c1c5f' }, + }, + + accent: { + 50: { value: '#ffe5e8' }, + 100: { value: '#ffccd3' }, + 200: { value: '#ff99a8' }, + 300: { value: '#ff667d' }, + 400: { value: '#ff3352' }, + 500: { value: '#ff0033' }, + 600: { value: '#cc0029' }, + 700: { value: '#99001f' }, + 800: { value: '#660014' }, + 900: { value: '#33000a' }, + }, + + gray: { + 50: { value: '#f9fafb' }, + 100: { value: '#f2f4f7' }, + 200: { value: '#e4e7ec' }, + 300: { value: '#d0d5dd' }, + 400: { value: '#98a2b3' }, + 500: { value: '#667085' }, + 600: { value: '#475467' }, + 700: { value: '#344054' }, + 800: { value: '#1d2939' }, + 900: { value: '#101828' }, + }, + }, + + fonts: { + heading: { + value: "'MTS Wide', 'MTS Compact', Inter, system-ui, sans-serif", + }, + body: { value: "'MTS Compact', Inter, system-ui, sans-serif" }, + }, + + radii: { + sm: { value: '8px' }, + md: { value: '12px' }, + lg: { value: '16px' }, + xl: { value: '24px' }, + }, + + shadows: { + sm: { value: '0 1px 2px rgba(16,24,40,0.05)' }, + md: { value: '0 4px 12px rgba(16,24,40,0.1)' }, + lg: { value: '0 12px 24px rgba(16,24,40,0.12)' }, + }, + }, + + semanticTokens: { + colors: { + bg: { + DEFAULT: { value: '{colors.gray.50}' }, + subtle: { value: '{colors.gray.100}' }, + panel: { value: '#ffffff' }, + gradient: { + value: 'linear-gradient(135deg, #7a5af8 0%, #b39cff 100%)', + }, + }, + + fg: { + DEFAULT: { value: '{colors.gray.900}' }, + muted: { value: '{colors.gray.500}' }, + }, + + primary: { + solid: { value: '{colors.brand.500}' }, + contrast: { value: '#ffffff' }, + muted: { value: '{colors.brand.100}' }, + }, + + danger: { + solid: { value: '{colors.accent.500}' }, + contrast: { value: '#ffffff' }, + }, + + border: { + DEFAULT: { value: '{colors.gray.200}' }, + strong: { value: '{colors.gray.300}' }, + }, + }, + }, + }, +}); + +export const system = createSystem(defaultConfig, config); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..fd1f11a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2020"], + "jsx": "react-jsx", + "target": "ES2020", + "noEmit": true, + "skipLibCheck": true, + "useDefineForClassFields": true, + + /* modules */ + "module": "ESNext", + "moduleDetection": "force", + "moduleResolution": "bundler", + "verbatimModuleSyntax": true, + "resolveJsonModule": true, + "allowImportingTsExtensions": true, + "noUncheckedSideEffectImports": true, + + /* type checking */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + + "paths": { + "~/*": ["./src/*"] + } + }, + "include": ["src"] +}