commit cb0fd04f59aa82ee008ba190ddfccf31ac74ad1e Author: LeonspaceX Date: Sat Oct 18 17:34:11 2025 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..563cc6c --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024-2025 libm + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README-deployment.md b/README-deployment.md new file mode 100644 index 0000000..53547da --- /dev/null +++ b/README-deployment.md @@ -0,0 +1,70 @@ +# SPA 路由部署说明 + +## 问题描述 +React Router 使用的是客户端路由,当用户直接访问 `/admin`、`/create` 等路由时,服务器会尝试查找对应的文件,但这些路径在服务器上并不存在,因此返回 404。 + +## 解决方案 + +### 1. OpenResty/Nginx 配置 + +在你的 OpenResty 配置中添加以下配置: + +```nginx +server { + listen 80; + server_name your-domain.com; + root /path/to/your/dist; + index index.html; + + # 处理静态资源 + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + + # SPA 路由回退 - 关键配置 + location / { + try_files $uri $uri/ /index.html; + } +} +``` + +### 2. 关键配置说明 + +- `try_files $uri $uri/ /index.html;` 是核心配置 +- 当访问任何路由时,服务器会: + 1. 首先尝试查找对应的文件 (`$uri`) + 2. 然后尝试查找对应的目录 (`$uri/`) + 3. 最后回退到 `index.html` + +### 3. 部署步骤 + +1. 构建项目: + ```bash + pnpm build + ``` + +2. 将 `dist` 目录的内容上传到服务器 + +3. 配置 OpenResty/Nginx 使用上述配置 + +4. 重启服务器: + ```bash + nginx -s reload + # 或 + systemctl reload nginx + ``` + +### 4. 验证 + +部署后,以下访问方式都应该正常工作: +- 直接访问 `https://your-domain.com/admin` +- 直接访问 `https://your-domain.com/create` +- 通过侧边栏导航访问 + +### 5. 注意事项 + +- 确保静态资源路径正确 +- 如果使用子路径部署,需要相应调整配置 +- API 路由需要单独配置代理,避免被 SPA 回退规则影响 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..61ab9a1 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` +"# frontend" diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..b19330b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..310ee24 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..c0740f6 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "sycamore_whisper_front", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@arco-design/web-react": "^2.66.5", + "@fluentui/react": "^8.124.0", + "@fluentui/react-components": "^9.72.1", + "@fluentui/react-icons": "^2.0.311", + "@uiw/react-md-editor": "^4.0.8", + "axios": "^1.12.2", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-hot-toast": "^2.6.0", + "react-markdown": "^10.1.0", + "react-markdown-editor-lite": "^1.3.4", + "react-router-dom": "^7.9.3", + "react-toastify": "^11.0.5", + "remark-gfm": "^4.0.1", + "remark-ins": "^1.2.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/node": "^24.6.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.45.0", + "vite": "^7.1.7" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..068528b --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6129 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@arco-design/web-react': + specifier: ^2.66.5 + version: 2.66.5(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react': + specifier: ^8.124.0 + version: 8.124.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-components': + specifier: ^9.72.1 + version: 9.72.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': + specifier: ^2.0.311 + version: 2.0.311(react@19.2.0) + '@uiw/react-md-editor': + specifier: ^4.0.8 + version: 4.0.8(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + axios: + specifier: ^1.12.2 + version: 1.12.2 + react: + specifier: ^19.1.1 + version: 19.2.0 + react-dom: + specifier: ^19.1.1 + version: 19.2.0(react@19.2.0) + react-hot-toast: + specifier: ^2.6.0 + version: 2.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react-markdown: + specifier: ^10.1.0 + version: 10.1.0(@types/react@19.2.2)(react@19.2.0) + react-markdown-editor-lite: + specifier: ^1.3.4 + version: 1.3.4(react@19.2.0) + react-router-dom: + specifier: ^7.9.3 + version: 7.9.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react-toastify: + specifier: ^11.0.5 + version: 11.0.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 + remark-ins: + specifier: ^1.2.1 + version: 1.2.1(unified@11.0.5) + devDependencies: + '@eslint/js': + specifier: ^9.36.0 + version: 9.37.0 + '@types/node': + specifier: ^24.6.0 + version: 24.7.0 + '@types/react': + specifier: ^19.1.16 + version: 19.2.2 + '@types/react-dom': + specifier: ^19.1.9 + version: 19.2.1(@types/react@19.2.2) + '@vitejs/plugin-react': + specifier: ^5.0.4 + version: 5.0.4(vite@7.1.9(@types/node@24.7.0)) + eslint: + specifier: ^9.36.0 + version: 9.37.0 + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.37.0) + eslint-plugin-react-refresh: + specifier: ^0.4.22 + version: 0.4.23(eslint@9.37.0) + globals: + specifier: ^16.4.0 + version: 16.4.0 + typescript: + specifier: ~5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.45.0 + version: 8.46.0(eslint@9.37.0)(typescript@5.9.3) + vite: + specifier: ^7.1.7 + version: 7.1.9(@types/node@24.7.0) + +packages: + + '@arco-design/color@0.4.0': + resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==} + + '@arco-design/web-react@2.66.5': + resolution: {integrity: sha512-ity0kG+B6pmuJ2/Zh3wUtBV78XxWmRtGEwazL8f4KAjoQpMkisgLMXibUpAGfcqph3vycNFq4yHgHujjgwrJMQ==} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + 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.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + 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.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.0': + resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.16.0': + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.37.0': + resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.0': + resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/devtools@0.2.3': + resolution: {integrity: sha512-ZTcxTvgo9CRlP7vJV62yCxdqmahHTGpSTi5QaTDgGoyQq0OyjaVZhUhXv/qdkQFOI3Sxlfmz0XGG4HaZMsDf8Q==} + peerDependencies: + '@floating-ui/dom': ^1.0.0 + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@fluentui/date-time-utilities@8.6.10': + resolution: {integrity: sha512-Bxq8DIMkFvkpCA1HKtCHdnFwPAnXLz3TkGp9kpi2T6VIv6VtLVSxRn95mbsUydpP9Up/DLglp/z9re5YFBGNbw==} + + '@fluentui/dom-utilities@2.3.10': + resolution: {integrity: sha512-6WDImiLqTOpkEtfUKSStcTDpzmJfL6ZammomcjawN9xH/8u8G3Hx72CIt2MNck9giw/oUlNLJFdWRAjeP3rmPQ==} + + '@fluentui/font-icons-mdl2@8.5.64': + resolution: {integrity: sha512-aiGPNWdOHM5WOugyF9KNNqGSA/9sdT+B9+JYmdR1lGzNJtn6hxhbiwXCjerKh+JFp7WXtIetgBHQbz2TKIa4Kw==} + + '@fluentui/foundation-legacy@8.5.0': + resolution: {integrity: sha512-YEpoT+KsWCfWhyLVJkgmyIc/Siip5V3XNZXbHIIOfeI1v3CzONoNV8ofsgJxLbJv2HleeH4qMKf9W7NQfrxQ/A==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@fluentui/keyboard-key@0.4.23': + resolution: {integrity: sha512-9GXeyUqNJUdg5JiQUZeGPiKnRzMRi9YEUn1l9zq6X/imYdMhxHrxpVZS12129cBfgvPyxt9ceJpywSfmLWqlKA==} + + '@fluentui/keyboard-keys@9.0.8': + resolution: {integrity: sha512-iUSJUUHAyTosnXK8O2Ilbfxma+ZyZPMua5vB028Ys96z80v+LFwntoehlFsdH3rMuPsA8GaC1RE7LMezwPBPdw==} + + '@fluentui/merge-styles@8.6.14': + resolution: {integrity: sha512-vghuHFAfQgS9WLIIs4kgDOCh/DHd5vGIddP4/bzposhlAVLZR6wUBqldm9AuCdY88r5LyCRMavVJLV+Up3xdvA==} + + '@fluentui/priority-overflow@9.2.0': + resolution: {integrity: sha512-uwB5drtNGeEdLO3CEzM/VolyzkywIgpNhuOzFrLbKFxq20kCqteRDkUJIySgYu/+rK+Cyl8xiKmLzey49nlocg==} + + '@fluentui/react-accordion@9.8.8': + resolution: {integrity: sha512-jicuHHlFK7Tsh0gx1FWKpgZixaZMBU1Nw751cGerL7XGF1OODBXCPqbmvZBSe/xLzfKj250EfDQ3V/5EGt6tcg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-alert@9.0.0-beta.124': + resolution: {integrity: sha512-yFBo3B5H9hnoaXxlkuz8wRz04DEyQ+ElYA/p5p+Vojf19Zuta8DmFZZ6JtWdtxcdnnQ4LvAfC5OYYlzdReozPA==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + '@types/react-dom': '>=16.9.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + react-dom: '>=16.14.0 <19.0.0' + + '@fluentui/react-aria@9.17.1': + resolution: {integrity: sha512-OmHqfHpVQZV6M8pZpl7QYmEoQuKbrDMboLWUzvAH9FxCjYQljNfgYyUKy5aP+gPJIKsO90mUUIbGY1LRH4e3fQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-avatar@9.9.7': + resolution: {integrity: sha512-T5zZGXta1sWbnxG5Dr+DzV9oxbab5Diws9V4ztcBWsBCowViPh8sZ6y/dSd/dnML3uWhMwNeW6dwPubA94pdAQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-badge@9.4.6': + resolution: {integrity: sha512-WxmUMcw5VthyeZrNAaSPLaMp+0F5g+Z9KZXH2ENAh0xM+BoWQjfruWUlTuMVT4rlmQcUEd7rz4rXjyflMoFzIQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-breadcrumb@9.3.7': + resolution: {integrity: sha512-NbSHxHpEKvTC0IeLIZg+NM8Kf6sL0VeMd8DgId1Py+XnUI4PpI7glJ1JovhSenMWL3kPNX7qPeFcxbtHn3BowA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-button@9.6.7': + resolution: {integrity: sha512-les2Fwej/nCOpf+jZigqX/+cspdwZLZgKuGbbOQ/70f8bOOBB+pXft795wpFKcjncRIGLa+ABjZbc4eTbUYuJQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-card@9.5.1': + resolution: {integrity: sha512-ZaNkQFjsmaDFKD+EsOwpCcLWOt+ZHZ2AWRkW4OK3cUzPSpqa/7Wa6eMUpsvOeSfritLnwTv9XFfrpmFSgXV8PQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-carousel@9.8.7': + resolution: {integrity: sha512-Bdw0yAA4U7X+nzhjgtTeL/Xmupu4uYurO38VmZiC7jmKLq1jqE8YjA+u5eFuyEG/Nc9auThFkES6vhDcPnezDw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-checkbox@9.5.6': + resolution: {integrity: sha512-nUOnn0MMrIZAEFkB664qYdXzUG7G6pA4IWCd1KtS5/jn01s29+nDLDuwgNXVD6jGZ+VLGo0ZEJ8+SJowsddFCA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-color-picker@9.2.6': + resolution: {integrity: sha512-CYgSbG8yTTEW1Jf2LVJS6dvFN8NQFB24HazmU42+ZmnSJX/qAYMAmxOA0F3apV2ziOitnjrdUYeRqHPMsaAdqA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-combobox@9.16.7': + resolution: {integrity: sha512-n3Y+bqD1c9fCUY8kbdsteMJT8VMuwr3pn0JvdCXsDiRxL7z9W1j/vFn+9gIAVC6okRhhwLwoi4wXoXDnPD907g==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-components@9.72.1': + resolution: {integrity: sha512-drBaCVWpPVC8z029yit0ECL+XgfjsRBSwGPgyJPj4JbdtpoCv8ujYT1frUjnwdkmwiUkoY4kCUY+N5wayiT+hQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-context-selector@9.2.8': + resolution: {integrity: sha512-mh7Phvz6S4LQGuoRLCtqoAOP66JrbHyzrUynSK5yR4V+WRhBH0QNC/eOeivocV8wSQWV9YlCmRYm9hNEvOqi1Q==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + scheduler: '>=0.19.0 <=0.23.0' + + '@fluentui/react-dialog@9.15.3': + resolution: {integrity: sha512-GtGUXVoNttsI7NuHMkhtLbJpjUw5ovIWKH3CMpdlgmnispdd4jYYYyTVDapG+9VJvYesHXI00yOoBM1ymtVrJA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-divider@9.4.6': + resolution: {integrity: sha512-pIk5mvkXQRR+rZkOg62vn2rWS//eikvm+jLn3E4e+qy59BQhXufI1aGw2gcZG3WTpeHHtRMbDD/xauEkMdrg7A==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-drawer@9.10.3': + resolution: {integrity: sha512-HLr41jlQ1QFgk1iD0u/Cu+2uoQl2lMaMj7/CERina0SIneof+skt61WQdUtntEKidM0fyHfU41PUDySWXYKLtg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-field@9.4.6': + resolution: {integrity: sha512-Xk/bNYhL2bLMO/mdoZrGX05Ga51QQVVC0wyqvcv5yv4l3s3oLcxb9pZCVgexzQOOUNUAaxz5QDOBHRjv7KT2xg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-focus@8.9.27': + resolution: {integrity: sha512-DD+C41Ttr7S6OFrJ0/hjMdE+TD5Ue9UvmlTVO4tDRuZeZm1o8339v/i493a4eXb/+zdlygs2ZJPyxy0BPAgXDg==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@fluentui/react-hooks@8.9.0': + resolution: {integrity: sha512-2Yw45+HNqy9+s21XvrkaAxL+SCy9u0lbM3vC5Jn+sjLbXQ/XKijLdwIFZn+juVfmQr5NKQIboipBRbhos6sFPQ==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@fluentui/react-icons@2.0.311': + resolution: {integrity: sha512-njTCiHki4gxtB0ebFFIy8jC+9xFqIbnqzFGO+3mixSjUIn/wl0NKUVzXiXcaYUx6d0okEAiYgciuT7eQjJhW8Q==} + peerDependencies: + react: '>=16.8.0 <20.0.0' + + '@fluentui/react-image@9.3.6': + resolution: {integrity: sha512-khdxM+h+A+d5fcFZG+mZinTGy6x38QBkjxvhly4TFJHIVziuF+mbB3vpf4J0TwynZOMiza3D174kvrK3x5yyvw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-infobutton@9.0.0-beta.102': + resolution: {integrity: sha512-3kA4F0Vga8Ds6JGlBajLCCDOo/LmPuS786Wg7ui4ZTDYVIMzy1yp2XuVcZniifBFvEp0HQCUoDPWUV0VI3FfzQ==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + '@types/react-dom': '>=16.9.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + react-dom: '>=16.14.0 <19.0.0' + + '@fluentui/react-infolabel@9.4.7': + resolution: {integrity: sha512-JHhIML6Wv+X0w+qyRYDx9GH8tUU0dCN3lAodI/02w+3do2a6ychRjoEa/7Aa9gA2wYxAuz7TC6hzfdcI4ec//Q==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-input@9.7.6': + resolution: {integrity: sha512-s+f5kznbm2McheAAz868Lre1+xzCinVJm4eNiuKXJzTSCiLsdlE27xWjv2+Lzh1du4HLC+arUkdZ+HCLg5Kvug==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-jsx-runtime@9.2.1': + resolution: {integrity: sha512-qfkqqYqKbqMEXk+yxnQ+L88yEi9CWzCmYHyZQ5Xhk6wfKyNAWYv/otConKLzbWJWnbpEq0zgysqqeJT/LYAoDg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + + '@fluentui/react-label@9.3.6': + resolution: {integrity: sha512-3mnDaoZrPuMTeJdXUQkNBMvhrq/qYw3UFKO6lfqu4701FCggLk2kdqcUqx5ViKEgEtRELrDjbilOYapagZvpag==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-link@9.6.6': + resolution: {integrity: sha512-b6hQLNK7L/HJ85XneVszKmnEhxf20DQImcRlMUcdHediJTFuCjoat3DHE6mFNjZEZSfQJTbDsH7rqwA0TOiuvg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-list@9.6.1': + resolution: {integrity: sha512-eoYupnsGDGKfpfcOfXhyCHuXz9jiIRmEYZXcrk1fCK+9KYEaSZ3gAqPFY/FWq5xDLs0+exyECfDPAstb7R1fxg==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-menu@9.20.0': + resolution: {integrity: sha512-zKgavux8mhd+H6544hACS+OYG8fi53ndZtocJqTF85ebBA/ndHY2GFZcHLemifRKctjKQsYKNAekg2Bxu4QmgA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-message-bar@9.6.8': + resolution: {integrity: sha512-XSPOSLtXzW7xXqA5I1gJa88xyV+kwOPhgadmYfPEfTAOeqYYzCqnJnI5ZSnMgjDQuCotzgvLT/hGxTGIhb9MFw==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-motion-components-preview@0.11.0': + resolution: {integrity: sha512-IIG3FI31AUaiyp56+4g9gx1J4W2UqUj0s6vpMB9zkIZ+KCFEq1x47H7b0kARHdGUc0voMY2OGPQQeewFcukUaw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-motion@9.11.0': + resolution: {integrity: sha512-X6MAw4zXsV9RwpE9WCVjz3Uwkjgl7A+q2lT+hy0wKSprASQ1g3HZJwTtS6cCuBNijUKge2wIhIquUuk0WCcWqA==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-nav@9.3.8': + resolution: {integrity: sha512-UwFxa5qlBJLS7nNXLBVo9bhbxjIbIOSe2shAEJcOFK1ziPfOTUIBFalYvmSZGK1bNAq2lvuSY2lVMkiMHS7Y2Q==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-overflow@9.6.0': + resolution: {integrity: sha512-ZzjBuNQXHEp84lGPzJOeZjPcsStugUEzzDiDp/0v9LdF3EZoBmq8/4Z7nZfqoTU+oHXOy2mGkhpCKTrXgawXOw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-persona@9.5.7': + resolution: {integrity: sha512-4dPcmnE4jX8IUgOxZu+aWQ+XhqTcJ5ISK1VwDxujH3JQbjOK/4aQjUBTwQWfRej0/lfT74ktD/CorcdB7Wz6CA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-popover@9.12.7': + resolution: {integrity: sha512-AkbtGCEG6OwpeXQ4RjorOw56Qnlh7ndf5Lb7P8x/2jmXyi2BusJy0qAJ9cqpt3n5Y31dt1dJ2e+DNk7A1tu23w==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-portal-compat-context@9.0.15': + resolution: {integrity: sha512-DpV+qtFvM3dmH1j8ZD+YcM5vaTvmQPHUAx6tQnnmIoYJWs2R0wU/L5p2EajXy7zSg74jrDbDRxzaziamoOaJdg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + + '@fluentui/react-portal@9.8.3': + resolution: {integrity: sha512-+i2TW9pQ/Oz7PAKxssbonStD4kcgkzsaKZrhTfK9rynSpy3YR4DpyHPzd/5ioJgSKFlqTnoBBCu5zVFohXI6gw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-positioning@9.20.6': + resolution: {integrity: sha512-g4/XRftuW/MztCC2pYVvlfHExmWRqOqgwQu9MoWglTuZFz9rSTTonCNSKJLIsZQYV9BpqFXDHUe8v+pqyDNZ2g==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-progress@9.4.6': + resolution: {integrity: sha512-zDmSmsTGaM9rPk9lQ6wKcG8kkM9UHtzJdsXPfvPKj8K7gP1Oyha7yb5hIlX45q0YeWG+3nweQYz9WNnoAAAsQQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-provider@9.22.6': + resolution: {integrity: sha512-vHShKHYeZptf+Jc6O+ZVGTjU0fo0OzqrzSpcEeQ9iuRF2XPvhTldE0Q67KYeCe5eQJsiDH7wYM6Hjt7UihNmOA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-radio@9.5.6': + resolution: {integrity: sha512-MT6AFJ3GuL5JgZ22xSbHlxO0RUVaJJUW5eq96zy2kqSSzyJxDLLhuNxkoMI/nnlEGlzkSipM5WOxutYfOhJTwQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-rating@9.3.6': + resolution: {integrity: sha512-0mvmcyDDnUUrFOIrM15K1Ie+UTBF3iFL/FDaiTTelL3xlAHSOUksVKStkj4pFsvXb8xNgFjoACvM+COV7DRSLg==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-search@9.3.6': + resolution: {integrity: sha512-pvmzcBOqvrQaLiw0gk+Yg0YxFX/qGod3NhoZrXXAI7YrHItMbkqEcECZbtiyoPG+WV+IiSzTGzFw2BlTJq7FCg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-select@9.4.6': + resolution: {integrity: sha512-LJ0cl7w6TDsDK6TKQDij3O1TI8mwt3nzuoTcsMlgSQRJZMC/n4nSGRUmX0GHbLCtcWxfFJ3Vy+1e/9NydxLJqA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-shared-contexts@9.25.2': + resolution: {integrity: sha512-PxDVy6RPps3gqee/RESIMXzOlrlVOQ/uQffFMeVniqjW0IPwCs/d2TwJT1Sfh9DCFgnI9onD0GGlBelszzRjmA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + + '@fluentui/react-skeleton@9.4.6': + resolution: {integrity: sha512-AnGvW28A4equQ0j2uxZHDpwrOrqeE8ZqELhI7pIyRgSwQaIjaxjb0C3tlqQS9jl6456g8NE1hpoanb41ojtqNw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-slider@9.5.6': + resolution: {integrity: sha512-JoIDXA1GHB9n99EvxOxcxwy6nUVk/p2GYoQ9sWoAvf5QOEQjOsD2QHymtDoVoNWWUKfBE51A8XGnJ80uk0qAcA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-spinbutton@9.5.6': + resolution: {integrity: sha512-D+cDKaZjVh+3P/u+G9mcZSKO3riyYYr/D6n7zVhWaFxC2dZxHQpvtCG+8cj1Jgt8FjhZWby4wXKoQfEeja2Yzw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-spinner@9.7.6': + resolution: {integrity: sha512-vOJIXA3GI75n2hoVCWm10ZzqmCqKR5ZQV4naSd3koJ4cb/6AMYHGVzfy41KTuybTUtkPbN1RRfjFcwv9HGncew==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-swatch-picker@9.4.6': + resolution: {integrity: sha512-c1ZJqjcpb+PjzqkHh9G3N3iXUq9t31b7HXdNwQJ2gKzi8kiGL8LFgmGCzhbUeGsZNmV0rkQAxfp6nzKGXSSr7g==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-switch@9.4.6': + resolution: {integrity: sha512-FNMWwHbD7GxwtOZJArSc2wRo2Dg4l2VUjHTYBL5yeS4cmDnVjCaChMCDPHxocv86upw3Uom1VSWLssUzXRNN1w==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-table@9.19.0': + resolution: {integrity: sha512-4XR2XNp5iq4sY3MtkEnuUBLu7BZ4xhGnyrnZ3eFb23TP3ERZTXx0oewpyURscERSv05czV3fwFjvT2gsQPy4Pw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tabs@9.10.2': + resolution: {integrity: sha512-aK4QVtCN3LQ40MR2/5LGb/reyBsCPsPnEjkifSQn8YrhJbkt0XRFMyIgJJ+EOOUadvQxEXEDDbz/PNpZFWoQCQ==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tabster@9.26.6': + resolution: {integrity: sha512-4uk8O7S3qEkixjP2PnB4FvXxNqFKMVRetS3bCsc0T7MLufWtFYMqIfxSrdqyxvtLKMPdMohWmdeOu7E4X+ef6Q==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tag-picker@9.7.7': + resolution: {integrity: sha512-yN8x01vvEt4C9SZHtF4OyUmIP2wFjjAcEqWY1ofwyICKsI9Xc23OANsIWBR9QdvM6jISJ7slwcwcgfP8JmyOSA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tags@9.7.7': + resolution: {integrity: sha512-TZ9Cc73hdCFzOBDvL3pQthndlVnGByn+l3vKyAu5kT6pWzrC7gfiWXHsUVUDzLQ8XyFDq1G4vCYfq+949OYyAg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-teaching-popover@9.6.7': + resolution: {integrity: sha512-SIXQLP4NKhv5E6hUCR2eMgg+MBehfuHWSygvf8yEZKaoGjgN/4bg/4Rn64Ld6cELcXcHpg7/0tFmDxgxycSU4w==} + peerDependencies: + '@types/react': '>=16.8.0 <20.0.0' + '@types/react-dom': '>=16.8.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.8.0 <20.0.0' + + '@fluentui/react-text@9.6.6': + resolution: {integrity: sha512-WfxzfE3LnGLAy+7w1elVkUwcnCgoVtGVysfYNbQYqs7eEDp7c7asRkVn++nWYGFALu2S0OCthYj98JT5VZlccA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-textarea@9.6.6': + resolution: {integrity: sha512-opxqQg+6IexnjW4XJrrueaU66dznDq7h5zjg6KoVR6RscYaqWpythrW2ragZujXQifouUHcrkw+BnwmnAuollw==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-theme@9.2.0': + resolution: {integrity: sha512-Q0zp/MY1m5RjlkcwMcjn/PQRT2T+q3bgxuxWbhgaD07V+tLzBhGROvuqbsdg4YWF/IK21zPfLhmGyifhEu0DnQ==} + + '@fluentui/react-toast@9.7.3': + resolution: {integrity: sha512-JuuOwvzCT+RK3X6IuZGLS3267cg3/DWQ9hlmP3ZThkHKabO/MYyFYTvry+Id5IDBBzFfyoV5M3L7T8MVwAbhYg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-toolbar@9.6.7': + resolution: {integrity: sha512-EaBT312aP3WXCwc9vUP/6diNdGUEtFSBbPupolkvM7l3Hqt2NaEgN86RMPubykCbwV4SoJvOQCTxgtsYKCK0gg==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tooltip@9.8.6': + resolution: {integrity: sha512-ue72LCnpTyLUvTNA+KWao0zt8T2BQsQdigY1rXwXUu6PQi4X8TKdZsOMaXCe/pzBDKWk9Du0ClZq7JWw3/mKig==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-tree@9.15.0': + resolution: {integrity: sha512-Z0tK8NJN8a2thzySwqfueN2xcVogFs4M1EXuhrk793X+ZkeokhA0qjref7Mpkc08E/tU7895e7FtaGpxzSIzfA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + '@types/react-dom': '>=16.9.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + react-dom: '>=16.14.0 <20.0.0' + + '@fluentui/react-utilities@9.25.0': + resolution: {integrity: sha512-ZuQ1jjNZ9DKxnnwPnQFTnjgt7qEWHttgaNdAoJlbqk1MG9zZYcuglEMLzj0wajPdkVuOOuS9LhSbbdCoW1aSsA==} + peerDependencies: + '@types/react': '>=16.14.0 <20.0.0' + react: '>=16.14.0 <20.0.0' + + '@fluentui/react-virtualizer@9.0.0-alpha.102': + resolution: {integrity: sha512-kt/kuAMTKTTY/00ToUlgUwUCty2HGj4Tnr+fxKRmr7Ziy5VWhi1YoNJ8vcgmxog5J90t4tS29LB0LP0KztQUVg==} + peerDependencies: + '@types/react': '>=16.14.0 <19.0.0' + '@types/react-dom': '>=16.9.0 <19.0.0' + react: '>=16.14.0 <19.0.0' + react-dom: '>=16.14.0 <19.0.0' + + '@fluentui/react-window-provider@2.2.30': + resolution: {integrity: sha512-2SXuiZcU29W0D9zfExcTfzVx97OI50YCn5fGGO0bTDuP5VxzTQp1mipAY4qm/yJMMinoXkzBGLl1rK0Tdtxh1w==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@fluentui/react@8.124.0': + resolution: {integrity: sha512-3/VOFfLZgwNW60QtI7M6w2QKuu45PzkPyKA+6SYbL3bZiTonfcUKwOCysPpBmaCfdrDy7USctw36hnx35LQi9g==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + '@types/react-dom': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + react-dom: '>=16.8.0 <19.0.0' + + '@fluentui/set-version@8.2.24': + resolution: {integrity: sha512-8uNi2ThvNgF+6d3q2luFVVdk/wZV0AbRfJ85kkvf2+oSRY+f6QVK0w13vMorNhA5puumKcZniZoAfUF02w7NSg==} + + '@fluentui/style-utilities@8.13.0': + resolution: {integrity: sha512-91cxKXIgvNnh5cyqrNUXRtvO7OfmzmLmZJnPz9yYCFJJteYlWPst6iRffuuTL6+LN6eRi55qbgU6SLzjvDwdcw==} + + '@fluentui/theme@2.6.68': + resolution: {integrity: sha512-rhCCVNaYl/RHeJzdFwskuxikxVo6YtaS5lGxoZUzQ7QSFm6wFpAqVyqOfgTTEKKtYWs4Sxko0ennJPw5Vil2iQ==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@fluentui/tokens@1.0.0-alpha.22': + resolution: {integrity: sha512-i9fgYyyCWFRdUi+vQwnV6hp7wpLGK4p09B+O/f2u71GBXzPuniubPYvrIJYtl444DD6shLjYToJhQ1S6XTFwLg==} + + '@fluentui/utilities@8.16.0': + resolution: {integrity: sha512-V8ZUYNhkUKjic5nxn8UeDnSxp3nJOY3rN3+Xszc/pGCSC2JW8DWfmtHV2lXOeyG3qnqOAfyeeysRopSnjEKoxw==} + peerDependencies: + '@types/react': '>=16.8.0 <19.0.0' + react: '>=16.8.0 <19.0.0' + + '@griffel/core@1.19.2': + resolution: {integrity: sha512-WkB/QQkjy9dE4vrNYGhQvRRUHFkYVOuaznVOMNTDT4pS9aTJ9XPrMTXXlkpcwaf0D3vNKoerj4zAwnU2lBzbOg==} + + '@griffel/react@1.5.30': + resolution: {integrity: sha512-1q4ojbEVFY5YA0j1NamP0WWF4BKh+GHsVugltDYeEgEaVbH3odJ7tJabuhQgY+7Nhka0pyEFWSiHJev0K3FSew==} + peerDependencies: + react: '>=16.8.0 <20.0.0' + + '@griffel/style-types@1.3.0': + resolution: {integrity: sha512-bHwD3sUE84Xwv4dH011gOKe1jul77M1S6ZFN9Tnq8pvZ48UMdY//vtES6fv7GRS5wXYT4iqxQPBluAiYAfkpmw==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@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==} + + '@microsoft/load-themed-styles@1.10.295': + resolution: {integrity: sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rolldown/pluginutils@1.0.0-beta.38': + resolution: {integrity: sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==} + + '@rollup/rollup-android-arm-eabi@4.52.4': + resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.52.4': + resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.52.4': + resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.52.4': + resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.52.4': + resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.52.4': + resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.52.4': + resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.52.4': + resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.52.4': + resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.52.4': + resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-gnu@4.52.4': + resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.52.4': + resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.52.4': + resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.52.4': + resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.40.0': + resolution: {integrity: sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.52.4': + resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.52.4': + resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openharmony-arm64@4.52.4': + resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.4': + resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.52.4': + resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.52.4': + resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.52.4': + resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} + cpu: [x64] + os: [win32] + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@24.7.0': + resolution: {integrity: sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==} + + '@types/prismjs@1.26.5': + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + + '@types/react-dom@19.2.1': + resolution: {integrity: sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/eslint-plugin@8.46.0': + resolution: {integrity: sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.46.0': + resolution: {integrity: sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.0': + resolution: {integrity: sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.46.0': + resolution: {integrity: sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.0': + resolution: {integrity: sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.46.0': + resolution: {integrity: sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.0': + resolution: {integrity: sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.0': + resolution: {integrity: sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.46.0': + resolution: {integrity: sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.0': + resolution: {integrity: sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@uiw/copy-to-clipboard@1.0.17': + resolution: {integrity: sha512-O2GUHV90Iw2VrSLVLK0OmNIMdZ5fgEg4NhvtwINsX+eZ/Wf6DWD0TdsK9xwV7dNRnK/UI2mQtl0a2/kRgm1m1A==} + + '@uiw/react-markdown-preview@5.1.5': + resolution: {integrity: sha512-DNOqx1a6gJR7Btt57zpGEKTfHRlb7rWbtctMRO2f82wWcuoJsxPBrM+JWebDdOD0LfD8oe2CQvW2ICQJKHQhZg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@uiw/react-md-editor@4.0.8': + resolution: {integrity: sha512-S3mOzZeGmJNhzdXJxRTCwsFMDp8nBWeQUf59cK3L6QHzDUHnRoHpcmWpfVRyKGKSg8zaI2+meU5cYWf8kYn3mQ==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitejs/plugin-react@5.0.4': + resolution: {integrity: sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + b-tween@0.3.3: + resolution: {integrity: sha512-oEHegcRpA7fAuc9KC4nktucuZn2aS8htymCPcP3qkEGPqiBH+GfqtqoG2l7LxHngg6O0HFM7hOeOYExl1Oz4ZA==} + + b-validate@1.5.3: + resolution: {integrity: sha512-iCvCkGFskbaYtfQ0a3GmcQCHl/Sv1GufXFGuUQ+FE+WJa7A/espLOuFIn09B944V8/ImPj71T4+rTASxO2PAuA==} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + baseline-browser-mapping@2.8.13: + resolution: {integrity: sha512-7s16KR8io8nIBWQyCYhmFhd+ebIzb9VKTzki+wOJXHTxTnV6+mFGH3+Jwn1zoKaY9/H9T/0BcKCZnzXljPnpSQ==} + hasBin: true + + bcp-47-match@2.0.3: + resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.26.3: + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001749: + resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + compute-scroll-into-view@1.0.20: + resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-selector-parser@3.1.3: + resolution: {integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + direction@2.0.1: + resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} + hasBin: true + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.233: + resolution: {integrity: sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==} + + embla-carousel-autoplay@8.6.0: + resolution: {integrity: sha512-OBu5G3nwaSXkZCo1A6LTaFMZ8EpkYbwIaH+bPqdBnDGQ2fh4+NbzjXjs2SktoPNKCtflfVMc75njaDHOYXcrsA==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel-fade@8.6.0: + resolution: {integrity: sha512-qaYsx5mwCz72ZrjlsXgs1nKejSrW+UhkbOMwLgfRT7w2LtdEB03nPRI06GHuHv5ac2USvbEiX2/nAHctcDwvpg==} + peerDependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: + resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.23: + resolution: {integrity: sha512-G4j+rv0NmbIR45kni5xJOrYvCtyD3/7LjpVH8MPPcudXDcNu8gv+4ATTDXTtbRR8rTCM5HxECvCSsRmxKnWDsA==} + peerDependencies: + eslint: '>=8.40' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.37.0: + resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + focus-lock@1.3.6: + resolution: {integrity: sha512-Ik/6OCk9RQQ0T5Xw+hKNLWrjSMtv51dD4GRmJjbD5a58TIEpI5a5iXagKVl3Z5UuyslMCA8Xwnu76jQob62Yhg==} + engines: {node: '>=10'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + 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==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + goober@2.1.18: + resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==} + peerDependencies: + csstype: ^3.0.10 + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-heading-rank@3.0.0: + resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-parse-selector@3.1.1: + resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + + hast-util-select@6.0.4: + resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@7.2.0: + resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + 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-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + keyborg@2.6.0: + resolution: {integrity: sha512-o5kvLbuTF+o326CMVYpjlaykxqYP9DphFQZ2ZpgrvBouyvOxyEB7oqe8nOLFpiV5VCtz0D3pt8gXQYWpLpBnmA==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + node-releases@2.0.23: + resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + number-precision@1.6.0: + resolution: {integrity: sha512-05OLPgbgmnixJw+VvEh18yNPUo3iyp4BEWJcrLu4X9W05KmMifN7Mu5exYvQXqxxeNWhvIF+j3Rij+HmddM/hQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-clientside-effect@1.2.8: + resolution: {integrity: sha512-ma2FePH0z3px2+WOu6h+YycZcEvFmmxIlAb62cF52bG86eMySciO/EQZeQMXd07kPCYB0a1dWDT5J+KE9mCDUw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + react-dom@19.2.0: + resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} + peerDependencies: + react: ^19.2.0 + + react-focus-lock@2.13.6: + resolution: {integrity: sha512-ehylFFWyYtBKXjAO9+3v8d0i+cnc1trGS0vlTGhzFW1vbFXVUTmR8s2tt/ZQG8x5hElg6rhENlLG1H3EZK0Llg==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-hot-toast@2.6.0: + resolution: {integrity: sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-markdown-editor-lite@1.3.4: + resolution: {integrity: sha512-PhS4HzLzSgCsr8O9CfJX75nAYmZ0NwpfviLxARlT0Tau+APOerDSHSw3u9hub5wd0EqmonWibw0vhXXNu4ldRA==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18.0.0 + + react-markdown@10.1.0: + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + + react-markdown@9.0.3: + resolution: {integrity: sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + + react-router-dom@7.9.3: + resolution: {integrity: sha512-1QSbA0TGGFKTAc/aWjpfW/zoEukYfU4dc1dLkT/vvf54JoGMkW+fNA+3oyo2gWVW1GM7BxjJVHz5GnPJv40rvg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.9.3: + resolution: {integrity: sha512-4o2iWCFIwhI/eYAIL43+cjORXYn/aRQPgtFRRZb3VzoyQ5Uej0Bmqj7437L97N9NJW4wnicSwLOLS+yCXfAPgg==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-toastify@11.0.5: + resolution: {integrity: sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA==} + peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} + engines: {node: '>=0.10.0'} + + refractor@4.9.0: + resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} + + rehype-attr@3.0.3: + resolution: {integrity: sha512-Up50Xfra8tyxnkJdCzLBIBtxOcB2M1xdeKe1324U06RAvSjYm7ULSeoM+b/nYPQPVd7jsXJ9+39IG1WAJPXONw==} + engines: {node: '>=16'} + + rehype-autolink-headings@7.1.0: + resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==} + + rehype-ignore@2.0.2: + resolution: {integrity: sha512-BpAT/3lU9DMJ2siYVD/dSR0A/zQgD6Fb+fxkJd4j+wDVy6TYbYpK+FZqu8eM9EuNKGvi4BJR7XTZ/+zF02Dq8w==} + engines: {node: '>=16'} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-prism-plus@2.0.0: + resolution: {integrity: sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==} + + rehype-prism-plus@2.0.1: + resolution: {integrity: sha512-Wglct0OW12tksTUseAPyWPo3srjBOY7xKlql/DPKi7HbsdZTyaLCAoO58QBKSczFQxElTsQlOY3JDOFzB/K++Q==} + + rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + + rehype-rewrite@4.0.2: + resolution: {integrity: sha512-rjLJ3z6fIV11phwCqHp/KRo8xuUCO8o9bFJCNw5o6O2wlLk6g8r323aRswdGBQwfXPFYeSuZdAjp4tzo6RGqEg==} + engines: {node: '>=16.0.0'} + + rehype-slug@6.0.0: + resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==} + + rehype-stringify@10.0.1: + resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + + rehype@13.0.2: + resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-github-blockquote-alert@1.3.1: + resolution: {integrity: sha512-OPNnimcKeozWN1w8KVQEuHOxgN3L4rah8geMOLhA5vN9wITqU4FWD+G26tkEsCGHiOVDbISx+Se5rGZ+D1p0Jg==} + engines: {node: '>=16'} + + remark-ins@1.2.1: + resolution: {integrity: sha512-Q31eT9DEcQz6kmNvIbI1hJwr2xXnTJ2geVt5fm4GVTgjVgeiCQ4mEfLqZp3R/iWLWDJqX5nsVJNu4TRwEAPfZg==} + peerDependencies: + unified: ^11 + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.52.4: + resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rtl-css-js@1.16.1: + resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + scroll-into-view-if-needed@2.2.31: + resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + tabster@8.5.6: + resolution: {integrity: sha512-2vfrRGrx8O9BjdrtSlVA5fvpmbq5HQBRN13XFRg6LAvZ1Fr3QdBnswgT4YgFS5Bhoo5nxwgjRaRueI2Us/dv7g==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.46.0: + resolution: {integrity: sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.14.0: + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-builder@4.0.0: + resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} + + unist-util-filter@5.0.1: + resolution: {integrity: sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-find-all-after@5.0.0: + resolution: {integrity: sha512-nGmOYvTSdGcI4RvrUNfe0mOsqqbbJOtqCQsppsY9KZjmv3nwM3YRgNBwFPdZ8Y+iv9Z/2PDjR9u6u+uK62XTTg==} + + unist-util-find-all-before@5.0.0: + resolution: {integrity: sha512-zir6a7GsXfdn4YAWR4F3hLNKZjTjLBJurdyquysvmX38xbftS1+qwvEhutxxHLq0Pp1tW5V1TDiuj+qluuOnKw==} + + unist-util-find-between-all@1.1.0: + resolution: {integrity: sha512-vL7mANFHZaZsZC9ckyZUUWTE98sFNElwZtscONxIk87/0BYHo0mTKGG9/zUPa7nzSh4S5PAf0KhxXaCFfjJM2A==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + 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 + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@7.1.9: + resolution: {integrity: sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@arco-design/color@0.4.0': + dependencies: + color: 3.2.1 + + '@arco-design/web-react@2.66.5(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@arco-design/color': 0.4.0 + '@babel/runtime': 7.28.4 + b-tween: 0.3.3 + b-validate: 1.5.3 + compute-scroll-into-view: 1.0.20 + dayjs: 1.11.18 + lodash: 4.17.21 + number-precision: 1.6.0 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-focus-lock: 2.13.6(@types/react@19.2.2)(react@19.2.0) + react-is: 18.3.1 + react-transition-group: 4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + resize-observer-polyfill: 1.5.1 + scroll-into-view-if-needed: 2.2.31 + shallowequal: 1.1.0 + transitivePeerDependencies: + - '@types/react' + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.4': {} + + '@babel/core@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.26.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/runtime@7.28.4': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@ctrl/tinycolor@3.6.1': {} + + '@emotion/hash@0.9.2': {} + + '@esbuild/aix-ppc64@0.25.10': + optional: true + + '@esbuild/android-arm64@0.25.10': + optional: true + + '@esbuild/android-arm@0.25.10': + optional: true + + '@esbuild/android-x64@0.25.10': + optional: true + + '@esbuild/darwin-arm64@0.25.10': + optional: true + + '@esbuild/darwin-x64@0.25.10': + optional: true + + '@esbuild/freebsd-arm64@0.25.10': + optional: true + + '@esbuild/freebsd-x64@0.25.10': + optional: true + + '@esbuild/linux-arm64@0.25.10': + optional: true + + '@esbuild/linux-arm@0.25.10': + optional: true + + '@esbuild/linux-ia32@0.25.10': + optional: true + + '@esbuild/linux-loong64@0.25.10': + optional: true + + '@esbuild/linux-mips64el@0.25.10': + optional: true + + '@esbuild/linux-ppc64@0.25.10': + optional: true + + '@esbuild/linux-riscv64@0.25.10': + optional: true + + '@esbuild/linux-s390x@0.25.10': + optional: true + + '@esbuild/linux-x64@0.25.10': + optional: true + + '@esbuild/netbsd-arm64@0.25.10': + optional: true + + '@esbuild/netbsd-x64@0.25.10': + optional: true + + '@esbuild/openbsd-arm64@0.25.10': + optional: true + + '@esbuild/openbsd-x64@0.25.10': + optional: true + + '@esbuild/openharmony-arm64@0.25.10': + optional: true + + '@esbuild/sunos-x64@0.25.10': + optional: true + + '@esbuild/win32-arm64@0.25.10': + optional: true + + '@esbuild/win32-ia32@0.25.10': + optional: true + + '@esbuild/win32-x64@0.25.10': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0)': + dependencies: + eslint: 9.37.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + + '@eslint/core@0.16.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.37.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.4.0': + dependencies: + '@eslint/core': 0.16.0 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/devtools@0.2.3(@floating-ui/dom@1.7.4)': + dependencies: + '@floating-ui/dom': 1.7.4 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/utils@0.2.10': {} + + '@fluentui/date-time-utilities@8.6.10': + dependencies: + '@fluentui/set-version': 8.2.24 + tslib: 2.8.1 + + '@fluentui/dom-utilities@2.3.10': + dependencies: + '@fluentui/set-version': 8.2.24 + tslib: 2.8.1 + + '@fluentui/font-icons-mdl2@8.5.64(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/set-version': 8.2.24 + '@fluentui/style-utilities': 8.13.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/react' + - react + + '@fluentui/foundation-legacy@8.5.0(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/merge-styles': 8.6.14 + '@fluentui/set-version': 8.2.24 + '@fluentui/style-utilities': 8.13.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/keyboard-key@0.4.23': + dependencies: + tslib: 2.8.1 + + '@fluentui/keyboard-keys@9.0.8': + dependencies: + '@swc/helpers': 0.5.17 + + '@fluentui/merge-styles@8.6.14': + dependencies: + '@fluentui/set-version': 8.2.24 + tslib: 2.8.1 + + '@fluentui/priority-overflow@9.2.0': + dependencies: + '@swc/helpers': 0.5.17 + + '@fluentui/react-accordion@9.8.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion-components-preview': 0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-alert@9.0.0-beta.124(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-aria@9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-avatar@9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-badge': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-popover': 9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-tooltip': 9.8.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-badge@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-breadcrumb@9.3.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-link': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-button@9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-card@9.5.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-text': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-carousel@9.8.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-tooltip': 9.8.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + embla-carousel: 8.6.0 + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-checkbox@9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-color-picker@9.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-combobox@9.16.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-components@9.72.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-accordion': 9.8.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-alert': 9.0.0-beta.124(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-badge': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-breadcrumb': 9.3.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-card': 9.5.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-carousel': 9.8.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-checkbox': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-color-picker': 9.2.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-combobox': 9.16.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-dialog': 9.15.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-divider': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-drawer': 9.10.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-image': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-infobutton': 9.0.0-beta.102(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-infolabel': 9.4.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-input': 9.7.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-link': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-list': 9.6.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-menu': 9.20.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-message-bar': 9.6.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-nav': 9.3.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-overflow': 9.6.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-persona': 9.5.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-popover': 9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-progress': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-provider': 9.22.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-radio': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-rating': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-search': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-select': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-skeleton': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-slider': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-spinbutton': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-spinner': 9.7.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-swatch-picker': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-switch': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-table': 9.19.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-tabs': 9.10.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-tag-picker': 9.7.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-tags': 9.7.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-teaching-popover': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-text': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-textarea': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-toast': 9.7.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-toolbar': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-tooltip': 9.8.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-tree': 9.15.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-virtualizer': 9.0.0-alpha.102(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-context-selector@9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + scheduler: 0.27.0 + + '@fluentui/react-dialog@9.15.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion-components-preview': 0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-divider@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-drawer@9.10.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-dialog': 9.15.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-field@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-focus@8.9.27(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/keyboard-key': 0.4.23 + '@fluentui/merge-styles': 8.6.14 + '@fluentui/set-version': 8.2.24 + '@fluentui/style-utilities': 8.13.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/react-hooks@8.9.0(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/react-window-provider': 2.2.30(@types/react@19.2.2)(react@19.2.0) + '@fluentui/set-version': 8.2.24 + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/react-icons@2.0.311(react@19.2.0)': + dependencies: + '@griffel/react': 1.5.30(react@19.2.0) + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/react-image@9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-infobutton@9.0.0-beta.102(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-popover': 9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-infolabel@9.4.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-popover': 9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-input@9.7.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-jsx-runtime@9.2.1(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + react: 19.2.0 + react-is: 17.0.2 + + '@fluentui/react-label@9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-link@9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-list@9.6.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-checkbox': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-menu@9.20.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-message-bar@9.6.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-link': 9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion-components-preview': 0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-motion-components-preview@0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-motion@9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-nav@9.3.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-divider': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-drawer': 9.10.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-tooltip': 9.8.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-overflow@9.6.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/priority-overflow': 9.2.0 + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-persona@9.5.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-badge': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-popover@9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-portal-compat-context@9.0.15(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + react: 19.2.0 + + '@fluentui/react-portal@9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-positioning@9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@floating-ui/devtools': 0.2.3(@floating-ui/dom@1.7.4) + '@floating-ui/dom': 1.7.4 + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) + + '@fluentui/react-progress@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-provider@9.22.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/core': 1.19.2 + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-radio@9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-rating@9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-search@9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-input': 9.7.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-select@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-shared-contexts@9.25.2(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/react-theme': 9.2.0 + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + react: 19.2.0 + + '@fluentui/react-skeleton@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-slider@9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-spinbutton@9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-spinner@9.7.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-swatch-picker@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-switch@9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-label': 9.3.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-table@9.19.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-checkbox': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-radio': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-tabs@9.10.2(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-tabster@9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + keyborg: 2.6.0 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + tabster: 8.5.6 + + '@fluentui/react-tag-picker@9.7.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-combobox': 9.16.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-tags': 9.7.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-tags@9.7.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-teaching-popover@9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-popover': 9.12.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + use-sync-external-store: 1.6.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-text@9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-textarea@9.6.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-field': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-theme@9.2.0': + dependencies: + '@fluentui/tokens': 1.0.0-alpha.22 + '@swc/helpers': 0.5.17 + + '@fluentui/react-toast@9.7.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion-components-preview': 0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-toolbar@9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-divider': 9.4.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-radio': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-tooltip@9.8.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal': 9.8.3(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-positioning': 9.20.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-tree@9.15.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-aria': 9.17.1(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-avatar': 9.9.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-button': 9.6.7(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-checkbox': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-context-selector': 9.2.8(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-icons': 2.0.311(react@19.2.0) + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-motion': 9.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-motion-components-preview': 0.11.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-radio': 9.5.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(scheduler@0.27.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-tabster': 9.26.6(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@fluentui/react-theme': 9.2.0 + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - scheduler + + '@fluentui/react-utilities@9.25.0(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/keyboard-keys': 9.0.8 + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + react: 19.2.0 + + '@fluentui/react-virtualizer@9.0.0-alpha.102(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/react-jsx-runtime': 9.2.1(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-shared-contexts': 9.25.2(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-utilities': 9.25.0(@types/react@19.2.2)(react@19.2.0) + '@griffel/react': 1.5.30(react@19.2.0) + '@swc/helpers': 0.5.17 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + '@fluentui/react-window-provider@2.2.30(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/set-version': 8.2.24 + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/react@8.124.0(@types/react-dom@19.2.1(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@fluentui/date-time-utilities': 8.6.10 + '@fluentui/font-icons-mdl2': 8.5.64(@types/react@19.2.2)(react@19.2.0) + '@fluentui/foundation-legacy': 8.5.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/merge-styles': 8.6.14 + '@fluentui/react-focus': 8.9.27(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-hooks': 8.9.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-portal-compat-context': 9.0.15(@types/react@19.2.2)(react@19.2.0) + '@fluentui/react-window-provider': 2.2.30(@types/react@19.2.2)(react@19.2.0) + '@fluentui/set-version': 8.2.24 + '@fluentui/style-utilities': 8.13.0(@types/react@19.2.2)(react@19.2.0) + '@fluentui/theme': 2.6.68(@types/react@19.2.2)(react@19.2.0) + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@microsoft/load-themed-styles': 1.10.295 + '@types/react': 19.2.2 + '@types/react-dom': 19.2.1(@types/react@19.2.2) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + tslib: 2.8.1 + + '@fluentui/set-version@8.2.24': + dependencies: + tslib: 2.8.1 + + '@fluentui/style-utilities@8.13.0(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/merge-styles': 8.6.14 + '@fluentui/set-version': 8.2.24 + '@fluentui/theme': 2.6.68(@types/react@19.2.2)(react@19.2.0) + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@microsoft/load-themed-styles': 1.10.295 + tslib: 2.8.1 + transitivePeerDependencies: + - '@types/react' + - react + + '@fluentui/theme@2.6.68(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/merge-styles': 8.6.14 + '@fluentui/set-version': 8.2.24 + '@fluentui/utilities': 8.16.0(@types/react@19.2.2)(react@19.2.0) + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@fluentui/tokens@1.0.0-alpha.22': + dependencies: + '@swc/helpers': 0.5.17 + + '@fluentui/utilities@8.16.0(@types/react@19.2.2)(react@19.2.0)': + dependencies: + '@fluentui/dom-utilities': 2.3.10 + '@fluentui/merge-styles': 8.6.14 + '@fluentui/react-window-provider': 2.2.30(@types/react@19.2.2)(react@19.2.0) + '@fluentui/set-version': 8.2.24 + '@types/react': 19.2.2 + react: 19.2.0 + tslib: 2.8.1 + + '@griffel/core@1.19.2': + dependencies: + '@emotion/hash': 0.9.2 + '@griffel/style-types': 1.3.0 + csstype: 3.1.3 + rtl-css-js: 1.16.1 + stylis: 4.3.6 + tslib: 2.8.1 + + '@griffel/react@1.5.30(react@19.2.0)': + dependencies: + '@griffel/core': 1.19.2 + react: 19.2.0 + tslib: 2.8.1 + + '@griffel/style-types@1.3.0': + dependencies: + csstype: 3.1.3 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@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 + + '@microsoft/load-themed-styles@1.10.295': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@rolldown/pluginutils@1.0.0-beta.38': {} + + '@rollup/rollup-android-arm-eabi@4.52.4': + optional: true + + '@rollup/rollup-android-arm64@4.52.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.52.4': + optional: true + + '@rollup/rollup-darwin-x64@4.52.4': + optional: true + + '@rollup/rollup-freebsd-arm64@4.52.4': + optional: true + + '@rollup/rollup-freebsd-x64@4.52.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.52.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.52.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.52.4': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.52.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.40.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.52.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.52.4': + optional: true + + '@rollup/rollup-openharmony-arm64@4.52.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.52.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.52.4': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.52.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.52.4': + optional: true + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.4 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.28.4 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + + '@types/estree@1.0.8': {} + + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/json-schema@7.0.15': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + + '@types/node@24.7.0': + dependencies: + undici-types: 7.14.0 + + '@types/prismjs@1.26.5': {} + + '@types/react-dom@19.2.1(@types/react@19.2.2)': + dependencies: + '@types/react': 19.2.2 + + '@types/react@19.2.2': + dependencies: + csstype: 3.1.3 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@typescript-eslint/eslint-plugin@8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/type-utils': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + eslint: 9.37.0 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3 + eslint: 9.37.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.46.0': + dependencies: + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + + '@typescript-eslint/tsconfig-utils@8.46.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.46.0(eslint@9.37.0)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.37.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.46.0': {} + + '@typescript-eslint/typescript-estree@8.46.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.0(typescript@5.9.3) + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/visitor-keys': 8.46.0 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.0(eslint@9.37.0)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0) + '@typescript-eslint/scope-manager': 8.46.0 + '@typescript-eslint/types': 8.46.0 + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + eslint: 9.37.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.0': + dependencies: + '@typescript-eslint/types': 8.46.0 + eslint-visitor-keys: 4.2.1 + + '@uiw/copy-to-clipboard@1.0.17': {} + + '@uiw/react-markdown-preview@5.1.5(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@uiw/copy-to-clipboard': 1.0.17 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-markdown: 9.0.3(@types/react@19.2.2)(react@19.2.0) + rehype-attr: 3.0.3 + rehype-autolink-headings: 7.1.0 + rehype-ignore: 2.0.2 + rehype-prism-plus: 2.0.0 + rehype-raw: 7.0.0 + rehype-rewrite: 4.0.2 + rehype-slug: 6.0.0 + remark-gfm: 4.0.1 + remark-github-blockquote-alert: 1.3.1 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@uiw/react-md-editor@4.0.8(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@babel/runtime': 7.28.4 + '@uiw/react-markdown-preview': 5.1.5(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + rehype: 13.0.2 + rehype-prism-plus: 2.0.1 + transitivePeerDependencies: + - '@types/react' + - supports-color + + '@ungap/structured-clone@1.3.0': {} + + '@vitejs/plugin-react@5.0.4(vite@7.1.9(@types/node@24.7.0))': + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) + '@rolldown/pluginutils': 1.0.0-beta.38 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.1.9(@types/node@24.7.0) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b-tween@0.3.3: {} + + b-validate@1.5.3: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + baseline-browser-mapping@2.8.13: {} + + bcp-47-match@2.0.3: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.26.3: + dependencies: + baseline-browser-mapping: 2.8.13 + caniuse-lite: 1.0.30001749 + electron-to-chromium: 1.5.233 + node-releases: 2.0.23 + update-browserslist-db: 1.1.3(browserslist@4.26.3) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001749: {} + + ccount@2.0.1: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + classnames@2.5.1: {} + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + compute-scroll-into-view@1.0.20: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cookie@1.0.2: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-selector-parser@3.1.3: {} + + csstype@3.1.3: {} + + dayjs@1.11.18: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 + + deep-is@0.1.4: {} + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + detect-node-es@1.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + direction@2.0.1: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.28.4 + csstype: 3.1.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.233: {} + + embla-carousel-autoplay@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel-fade@8.6.0(embla-carousel@8.6.0): + dependencies: + embla-carousel: 8.6.0 + + embla-carousel@8.6.0: {} + + entities@6.0.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.25.10: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-plugin-react-hooks@5.2.0(eslint@9.37.0): + dependencies: + eslint: 9.37.0 + + eslint-plugin-react-refresh@0.4.23(eslint@9.37.0): + dependencies: + eslint: 9.37.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.37.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.4.0 + '@eslint/core': 0.16.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.37.0 + '@eslint/plugin-kit': 0.4.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-util-is-identifier-name@3.0.0: {} + + esutils@2.0.3: {} + + eventemitter3@4.0.7: {} + + extend@3.0.2: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + focus-lock@1.3.6: + dependencies: + tslib: 2.8.1 + + follow-redirects@1.15.11: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + github-slugger@2.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.4.0: {} + + goober@2.1.18(csstype@3.1.3): + dependencies: + csstype: 3.1.3 + + gopd@1.2.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-heading-rank@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-parse-selector@3.1.1: + dependencies: + '@types/hast': 2.3.10 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-raw@9.1.0: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.3.0 + hast-util-from-parse5: 8.0.3 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.3.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-select@6.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + bcp-47-match: 2.0.3 + comma-separated-tokens: 2.0.3 + css-selector-parser: 3.1.3 + devlop: 1.1.0 + direction: 2.0.1 + hast-util-has-property: 3.0.0 + hast-util-to-string: 3.0.1 + hast-util-whitespace: 3.0.0 + nth-check: 2.1.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-parse5@8.0.0: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@7.2.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 3.1.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + html-url-attributes@3.0.1: {} + + html-void-elements@3.0.0: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inline-style-parser@0.2.4: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-arrayish@0.3.4: {} + + is-decimal@2.0.1: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-number@7.0.0: {} + + is-plain-obj@4.1.0: {} + + isexe@2.0.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + keyborg@2.6.0: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + merge2@1.4.1: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + node-releases@2.0.23: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + number-precision@1.6.0: {} + + object-assign@4.1.1: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-numeric-range@1.3.0: {} + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + property-information@6.5.0: {} + + property-information@7.1.0: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-clientside-effect@1.2.8(react@19.2.0): + dependencies: + '@babel/runtime': 7.28.4 + react: 19.2.0 + + react-dom@19.2.0(react@19.2.0): + dependencies: + react: 19.2.0 + scheduler: 0.27.0 + + react-focus-lock@2.13.6(@types/react@19.2.2)(react@19.2.0): + dependencies: + '@babel/runtime': 7.28.4 + focus-lock: 1.3.6 + prop-types: 15.8.1 + react: 19.2.0 + react-clientside-effect: 1.2.8(react@19.2.0) + use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.2.0) + use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + + react-hot-toast@2.6.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + csstype: 3.1.3 + goober: 2.1.18(csstype@3.1.3) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-is@18.3.1: {} + + react-markdown-editor-lite@1.3.4(react@19.2.0): + dependencies: + '@babel/runtime': 7.28.4 + classnames: 2.5.1 + eventemitter3: 4.0.7 + react: 19.2.0 + uuid: 8.3.2 + + react-markdown@10.1.0(@types/react@19.2.2)(react@19.2.0): + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 19.2.2 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 19.2.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + react-markdown@9.0.3(@types/react@19.2.2)(react@19.2.0): + dependencies: + '@types/hast': 3.0.4 + '@types/react': 19.2.2 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 19.2.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + react-refresh@0.17.0: {} + + react-router-dom@7.9.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-router: 7.9.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + + react-router@7.9.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + cookie: 1.0.2 + react: 19.2.0 + set-cookie-parser: 2.7.1 + optionalDependencies: + react-dom: 19.2.0(react@19.2.0) + + react-toastify@11.0.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + clsx: 2.1.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + react-transition-group@4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + '@babel/runtime': 7.28.4 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + react@19.2.0: {} + + refractor@4.9.0: + dependencies: + '@types/hast': 2.3.10 + '@types/prismjs': 1.26.5 + hastscript: 7.2.0 + parse-entities: 4.0.2 + + rehype-attr@3.0.3: + dependencies: + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-autolink-headings@7.1.0: + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.3.0 + hast-util-heading-rank: 3.0.0 + hast-util-is-element: 3.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-ignore@2.0.2: + dependencies: + hast-util-select: 6.0.4 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-prism-plus@2.0.0: + dependencies: + hast-util-to-string: 3.0.1 + parse-numeric-range: 1.3.0 + refractor: 4.9.0 + rehype-parse: 9.0.1 + unist-util-filter: 5.0.1 + unist-util-visit: 5.0.0 + + rehype-prism-plus@2.0.1: + dependencies: + hast-util-to-string: 3.0.1 + parse-numeric-range: 1.3.0 + refractor: 4.9.0 + rehype-parse: 9.0.1 + unist-util-filter: 5.0.1 + unist-util-visit: 5.0.0 + + rehype-raw@7.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-raw: 9.1.0 + vfile: 6.0.3 + + rehype-rewrite@4.0.2: + dependencies: + hast-util-select: 6.0.4 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + rehype-slug@6.0.0: + dependencies: + '@types/hast': 3.0.4 + github-slugger: 2.0.0 + hast-util-heading-rank: 3.0.0 + hast-util-to-string: 3.0.1 + unist-util-visit: 5.0.0 + + rehype-stringify@10.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + rehype@13.0.2: + dependencies: + '@types/hast': 3.0.4 + rehype-parse: 9.0.1 + rehype-stringify: 10.0.1 + unified: 11.0.5 + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-github-blockquote-alert@1.3.1: + dependencies: + unist-util-visit: 5.0.0 + + remark-ins@1.2.1(unified@11.0.5): + dependencies: + '@types/mdast': 4.0.4 + unified: 11.0.5 + unist-builder: 4.0.0 + unist-util-find-after: 5.0.0 + unist-util-find-all-after: 5.0.0 + unist-util-find-all-before: 5.0.0 + unist-util-find-between-all: 1.1.0 + unist-util-visit: 5.0.0 + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + resize-observer-polyfill@1.5.1: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.52.4: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.52.4 + '@rollup/rollup-android-arm64': 4.52.4 + '@rollup/rollup-darwin-arm64': 4.52.4 + '@rollup/rollup-darwin-x64': 4.52.4 + '@rollup/rollup-freebsd-arm64': 4.52.4 + '@rollup/rollup-freebsd-x64': 4.52.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 + '@rollup/rollup-linux-arm-musleabihf': 4.52.4 + '@rollup/rollup-linux-arm64-gnu': 4.52.4 + '@rollup/rollup-linux-arm64-musl': 4.52.4 + '@rollup/rollup-linux-loong64-gnu': 4.52.4 + '@rollup/rollup-linux-ppc64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-gnu': 4.52.4 + '@rollup/rollup-linux-riscv64-musl': 4.52.4 + '@rollup/rollup-linux-s390x-gnu': 4.52.4 + '@rollup/rollup-linux-x64-gnu': 4.52.4 + '@rollup/rollup-linux-x64-musl': 4.52.4 + '@rollup/rollup-openharmony-arm64': 4.52.4 + '@rollup/rollup-win32-arm64-msvc': 4.52.4 + '@rollup/rollup-win32-ia32-msvc': 4.52.4 + '@rollup/rollup-win32-x64-gnu': 4.52.4 + '@rollup/rollup-win32-x64-msvc': 4.52.4 + fsevents: 2.3.3 + + rtl-css-js@1.16.1: + dependencies: + '@babel/runtime': 7.28.4 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + scheduler@0.27.0: {} + + scroll-into-view-if-needed@2.2.31: + dependencies: + compute-scroll-into-view: 1.0.20 + + semver@6.3.1: {} + + semver@7.7.3: {} + + set-cookie-parser@2.7.1: {} + + shallowequal@1.1.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-json-comments@3.1.1: {} + + style-to-js@1.1.17: + dependencies: + style-to-object: 1.0.9 + + style-to-object@1.0.9: + dependencies: + inline-style-parser: 0.2.4 + + stylis@4.3.6: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + tabster@8.5.6: + dependencies: + keyborg: 2.6.0 + tslib: 2.8.1 + optionalDependencies: + '@rollup/rollup-linux-x64-gnu': 4.40.0 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.46.0(eslint@9.37.0)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.0(@typescript-eslint/parser@8.46.0(eslint@9.37.0)(typescript@5.9.3))(eslint@9.37.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.0(eslint@9.37.0)(typescript@5.9.3) + eslint: 9.37.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + undici-types@7.14.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-builder@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-filter@5.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-find-all-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-find-all-before@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-find-between-all@1.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + update-browserslist-db@1.1.3(browserslist@4.26.3): + dependencies: + browserslist: 4.26.3 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.2.0): + dependencies: + react: 19.2.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.2 + + use-sidecar@1.1.3(@types/react@19.2.2)(react@19.2.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.2.2 + + use-sync-external-store@1.6.0(react@19.2.0): + dependencies: + react: 19.2.0 + + uuid@8.3.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + vite@7.1.9(@types/node@24.7.0): + dependencies: + esbuild: 0.25.10 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.4 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.7.0 + fsevents: 2.3.3 + + web-namespaces@2.0.1: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + zwitch@2.0.4: {} diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..50a4633 --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/public/about.md b/public/about.md new file mode 100644 index 0000000..6ab044f --- /dev/null +++ b/public/about.md @@ -0,0 +1,8 @@ +# Hi~欢迎来到Sycamore_Whisper匿名投稿站! +这里的内容来自开发环境下的/public/about.md,请编辑此文件以便在这里显示自己的内容! + +如果你不了解Markdown文档的语法,可以前往[这里](https://www.runoob.com/markdown/md-tutorial.html)简单学习 + + + +Made with ❤️ By Leonxie \ No newline at end of file diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 0000000..e022bfc Binary files /dev/null and b/public/icon.png differ diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..edad5ed --- /dev/null +++ b/src/App.css @@ -0,0 +1,27 @@ +/* 滚动条样式 */ +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: #888; + border-radius: 5px; +} + +::-webkit-scrollbar-thumb:hover { + background: #555; +} + +/* 深色模式下的滚动条 */ +.dark ::-webkit-scrollbar-thumb { + background: #4a4a4a; +} + +.dark ::-webkit-scrollbar-thumb:hover { + background: #3a3a3a; +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..d2d4d25 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,125 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react'; +import { FluentProvider, webLightTheme, webDarkTheme } from '@fluentui/react-components'; +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import PostCard from './components/PostCard'; +import MainLayout from './layouts/MainLayout'; +import './App.css'; +import { fetchArticles } from './api'; +import CreatePost from './components/CreatePost'; +import { ToastContainer } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; +import AboutPage from './components/AboutPage'; +import PostState from './components/PostState'; +import ReportState from './components/ReportState'; +import AdminPage from './components/AdminPage'; +import InitPage from './pages/InitPage'; +import NotFound from './pages/NotFound'; + +function App() { + const [isDarkMode, setIsDarkMode] = React.useState(false); + const [articles, setArticles] = useState>([]); + const [page, setPage] = useState(1); + const [loading, setLoading] = useState(false); + const [hasMore, setHasMore] = useState(true); + const observer = useRef(null); + + const lastArticleRef = useCallback((node: HTMLDivElement) => { + if (loading) return; + if (observer.current) observer.current.disconnect(); + observer.current = new IntersectionObserver(entries => { + if (entries[0].isIntersecting && hasMore) { + setPage(prevPage => prevPage + 1); + } + }); + if (node) observer.current.observe(node); + }, [loading, hasMore]); + + useEffect(() => { + const controller = new AbortController(); + const signal = controller.signal; + + const loadArticles = async () => { + if (!hasMore) return; + setLoading(true); + try { + const newArticles = await fetchArticles(page, signal); + if (newArticles.length === 0) { + setHasMore(false); + } else { + setArticles(prev => [...prev, ...newArticles]); + } + } catch (error) { + if (error instanceof Error && error.name !== 'AbortError') { + console.error('Failed to load articles:', error); + } + } finally { + setLoading(false); + } + }; + loadArticles(); + + return () => { + controller.abort(); + }; + }, [page, hasMore]); + + return ( + + + + setIsDarkMode(!isDarkMode)} />}> + +
+ {articles.map((article, index) => { + if (articles.length === index + 1 && hasMore) { + return ( +
+ +
+ ); + } else { + return ( + + ); + } + })} + {loading &&
加载中...
} +
+ + } + /> + } /> + } /> + } /> + } /> + + } /> + } /> + } /> +
+
+ +
+ ); +} + +export default App; diff --git a/src/admin_api.tsx b/src/admin_api.tsx new file mode 100644 index 0000000..9cbcab4 --- /dev/null +++ b/src/admin_api.tsx @@ -0,0 +1,732 @@ +import { API_CONFIG } from './config'; + +// 管理员认证相关的 API 接口 + +export interface AdminAuthResponse { + success: boolean; + message?: string; +} + +// 管理员密码缓存键 +const ADMIN_TOKEN_KEY = 'admin_token'; + +/** + * 获取存储的管理员令牌 + */ +export const getAdminToken = (): string | null => { + return localStorage.getItem(ADMIN_TOKEN_KEY); +}; + +/** + * 存储管理员令牌 + */ +export const setAdminToken = (token: string): void => { + localStorage.setItem(ADMIN_TOKEN_KEY, token); +}; + +/** + * 清除管理员令牌 + */ +export const clearAdminToken = (): void => { + localStorage.removeItem(ADMIN_TOKEN_KEY); +}; + +/** + * 验证管理员密码 + * @param password 管理员密码 + * @returns Promise + */ +export const verifyAdminPassword = async (password: string): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/admin/test`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${password}`, + 'Content-Type': 'application/json', + }, + }); + + if (response.status === 401 || response.status === 403) { + return { + success: false, + message: '密码错误,请重新输入' + }; + } + + if (response.ok) { + // 密码正确,存储到缓存 + setAdminToken(password); + return { + success: true, + message: '登录成功' + }; + } + + // 其他错误状态 + return { + success: false, + message: `服务器错误: ${response.status}` + }; + + } catch (error) { + console.error('Admin authentication error:', error); + return { + success: false, + message: '网络错误,请检查连接' + }; + } +}; + +/** + * 检查管理员是否已登录 + */ +export const isAdminLoggedIn = (): boolean => { + return getAdminToken() !== null; +}; + +/** + * 管理员退出登录 + */ +export const adminLogout = (): void => { + clearAdminToken(); +}; + +/** + * 创建带有管理员认证的请求头 + */ +export const createAdminHeaders = (): HeadersInit => { + const token = getAdminToken(); + return { + 'Content-Type': 'application/json', + ...(token && { 'Authorization': `Bearer ${token}` }) + }; +}; + +/** + * 通用的管理员 API 请求函数 + * @param endpoint API 端点 + * @param options 请求选项 + */ +export const adminApiRequest = async ( + endpoint: string, + options: RequestInit = {} +): Promise => { + const token = getAdminToken(); + + if (!token) { + throw new Error('未登录或登录已过期'); + } + + // 动态处理 Content-Type:当 body 是 FormData 时让浏览器自动设置 boundary + const baseHeaders: HeadersInit = createAdminHeaders(); + if (typeof FormData !== 'undefined' && options.body instanceof FormData) { + // @ts-ignore + delete baseHeaders['Content-Type']; + } + + const response = await fetch(`${API_CONFIG.BASE_URL}/admin${endpoint}`, { + ...options, + headers: { + ...baseHeaders, + ...options.headers, + }, + }); + + // 如果返回 401 或 403,说明令牌无效,清除缓存 + if (response.status === 401 || response.status === 403) { + clearAdminToken(); + throw new Error('登录已过期,请重新登录'); + } + + return response; +}; + +/** + * 创建备份并返回 ZIP 文件 Blob 与文件名 + * GET /admin/get/backup -> ZIP + */ +export const getBackupZip = async (): Promise<{ blob: Blob; filename: string }> => { + const resp = await adminApiRequest('/get/backup', { method: 'GET' }); + if (!resp.ok) { + throw new Error(`创建备份失败: ${resp.status}`); + } + const disposition = resp.headers.get('Content-Disposition') || ''; + let filename = 'backup.zip'; + const match = disposition.match(/filename\*=UTF-8''([^;]+)|filename="?([^";]+)"?/i); + if (match) { + filename = decodeURIComponent(match[1] || match[2] || filename); + } + const blob = await resp.blob(); + return { blob, filename }; +}; + +/** + * 恢复备份 + * POST /admin/recover (multipart/form-data: backup_file) + */ +export const recoverBackup = async (file: File): Promise<{ status: 'OK' }> => { + const form = new FormData(); + // 后端要求的字段名:file + form.append('file', file); + const resp = await adminApiRequest('/recover', { + method: 'POST', + body: form, + // 让 adminApiRequest 自动去掉 Content-Type + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`恢复备份失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + return resp.json(); +}; + +/** + * 获取当前帖子审核模式 + * GET /admin/get/need_audit -> { status: boolean } + */ +export const getAuditMode = async (): Promise<{ status: boolean }> => { + const resp = await adminApiRequest('/get/need_audit', { + method: 'GET', + }); + if (!resp.ok) { + throw new Error(`获取审核模式失败: ${resp.status}`); + } + return resp.json(); +}; + +/** + * 切换帖子审核模式 + * POST /admin/need_audit { need_audit: boolean } + */ +export const setAuditMode = async (need_audit: boolean): Promise<{ status: 'OK' }> => { + const resp = await adminApiRequest('/need_audit', { + method: 'POST', + body: JSON.stringify({ need_audit }), + }); + if (!resp.ok) { + throw new Error(`切换审核模式失败: ${resp.status}`); + } + return resp.json(); +}; + +/** + * 图片链接项 + */ +export interface PicLink { + filename: string; + url: string; + upload_time: string; +} + +/** + * 获取图片链接列表 + * GET /admin/get/pic_links?page=1 -> PicLink[] + */ +export const getPicLinks = async (page: number = 1): Promise => { + const resp = await adminApiRequest(`/get/pic_links?page=${encodeURIComponent(page)}`, { + method: 'GET', + }); + if (!resp.ok) { + throw new Error(`获取图片链接失败: ${resp.status}`); + } + const data = await resp.json(); + // 兼容字符串数组(如 ["/img/251012_xxx.png", ...])与对象数组的返回 + return (Array.isArray(data) ? data : []).map((item: any) => { + // 字符串项:直接视为图片相对或绝对 URL + if (typeof item === 'string') { + const raw = item.trim(); + const isAbsolute = /^https?:\/\//i.test(raw); + const path = isAbsolute ? raw : (raw.startsWith('/') ? raw : `/${raw}`); + const url = isAbsolute ? raw : `${API_CONFIG.BASE_URL}${path}`; + // 从路径派生 filename + let filename = ''; + if (raw.startsWith('/img/')) { + filename = raw.slice('/img/'.length); + } else { + const idx = raw.lastIndexOf('/'); + filename = idx >= 0 ? raw.slice(idx + 1) : raw; + } + try { filename = decodeURIComponent(filename); } catch {} + return { filename, url, upload_time: '' } as PicLink; + } + + // 对象项:使用字段并进行回退与绝对化 + const filename = String(item?.filename || ''); + const upload_time = String(item?.upload_time || ''); + const urlRaw = item?.url; + let url = typeof urlRaw === 'string' ? urlRaw.trim() : ''; + if (!url && filename) { + url = `/img/${encodeURIComponent(filename)}`; + } + if (url && !/^https?:\/\//i.test(url)) { + const path = url.startsWith('/') ? url : `/${url}`; + url = `${API_CONFIG.BASE_URL}${path}`; + } + return { filename, url, upload_time } as PicLink; + }); +}; + +/** + * 删除图片 + * POST /admin/del_pic { filename } + */ +export const deletePic = async (filename: string): Promise<{ status: 'OK' }> => { + if (!filename) { + throw new Error('缺少图片文件名'); + } + const resp = await adminApiRequest('/del_pic', { + method: 'POST', + body: JSON.stringify({ filename }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`删除图片失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + return resp.json(); +}; + +/** + * 待处理举报项 + */ +export interface PendingReport { + id: number; + submission_id: number; + title: string; + content: string; + status: string; + created_at: string; +} + +/** + * 获取待处理举报列表 + * GET /admin/get/pending_reports -> PendingReport[] + */ +export const getPendingReports = async (): Promise => { + const resp = await adminApiRequest('/get/pending_reports', { method: 'GET' }); + if (!resp.ok) { + throw new Error(`获取待处理举报失败: ${resp.status}`); + } + const data = await resp.json(); + return (Array.isArray(data) ? data : []).map((item: any) => ({ + id: Number(item?.id ?? 0), + submission_id: Number(item?.submission_id ?? 0), + title: String(item?.title ?? ''), + content: String(item?.content ?? ''), + status: String(item?.status ?? ''), + created_at: String(item?.created_at ?? ''), + })); +}; + +/** + * 批准举报 + * POST /admin/approve_report { id } + */ +export const approveReport = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少举报 ID'); + } + const resp = await adminApiRequest('/approve_report', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`批准举报失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + return resp.json(); +}; + +/** + * 拒绝举报 + * POST /admin/reject_report { id } + */ +export const rejectReport = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少举报 ID'); + } + const resp = await adminApiRequest('/reject_report', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`拒绝举报失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + return resp.json(); +}; + +/** + * 获取管理员视角的帖子详情(只需 content 字段) + * GET /admin/get/post_info?id=number -> { content: string, ... } + */ +export interface AdminPostInfo { content: string } + +export const getAdminPostInfo = async (id: number): Promise => { + if (!id && id !== 0) { + throw new Error('缺少帖子 ID'); + } + const resp = await adminApiRequest(`/get/post_info?id=${encodeURIComponent(id)}`, { method: 'GET' }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`获取帖子详情失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + const data = await resp.json(); + return { content: String(data?.content || '') }; +}; + +/** + * 管理端帖子列表项(用于待审核/已拒绝) + */ +export interface AdminPostListItem { + id: number; + content: string; + create_time: string; + upvotes: number; + downvotes: number; +} + +/** + * 获取待审核帖子列表 + * GET /admin/get/pending_posts -> AdminPostListItem[] + */ +export const getPendingPosts = async (): Promise => { + const resp = await adminApiRequest('/get/pending_posts', { method: 'GET' }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`获取待审核帖子失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + const data = await resp.json(); + return Array.isArray(data) ? data as AdminPostListItem[] : []; +}; + +/** + * 获取已拒绝帖子列表 + * GET /admin/get/reject_posts -> AdminPostListItem[] + */ +export const getRejectedPosts = async (): Promise => { + const resp = await adminApiRequest('/get/reject_posts', { method: 'GET' }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + throw new Error(`获取已拒绝帖子失败: ${resp.status}${detail ? ` - ${detail}` : ''}`); + } + const data = await resp.json(); + return Array.isArray(data) ? data as AdminPostListItem[] : []; +}; + +/** + * 审核通过帖子 + * POST /admin/approve { id } + */ +export const approvePost = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少帖子 ID'); + } + const resp = await adminApiRequest('/approve', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '帖子不存在' + : resp.status === 400 + ? '缺少帖子 ID' + : `审核通过失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 拒绝帖子 + * POST /admin/disapprove { id } + */ +export const disapprovePost = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少帖子 ID'); + } + const resp = await adminApiRequest('/disapprove', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '帖子不存在' + : resp.status === 400 + ? '缺少帖子 ID' + : `拒绝帖子失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 重新审核帖子(将已通过设回待审核) + * POST /admin/reaudit { id } + */ +export const reauditPost = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少帖子 ID'); + } + const resp = await adminApiRequest('/reaudit', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '帖子不存在' + : resp.status === 400 + ? '缺少帖子 ID' + : `重新审核失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 删除帖子 + * POST /admin/del_post { id } + */ +export const deletePost = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少帖子 ID'); + } + const resp = await adminApiRequest('/del_post', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '帖子不存在' + : resp.status === 400 + ? '缺少帖子 ID' + : `删除帖子失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 修改帖子内容 + * POST /admin/modify_post { id, content } + */ +export const modifyPost = async ( + id: number, + content: string +): Promise<{ status: 'OK' }> => { + if ((!id && id !== 0) || !content) { + throw new Error(!content ? '缺少帖子内容' : '缺少帖子 ID'); + } + const resp = await adminApiRequest('/modify_post', { + method: 'POST', + body: JSON.stringify({ id, content }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '帖子不存在' + : resp.status === 400 + ? '缺少 ID 或 content' + : `修改帖子失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 删除评论 + * POST /admin/del_comment { id } + */ +export const deleteComment = async (id: number): Promise<{ status: 'OK' }> => { + if (!id && id !== 0) { + throw new Error('缺少评论 ID'); + } + const resp = await adminApiRequest('/del_comment', { + method: 'POST', + body: JSON.stringify({ id }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '评论不存在' + : resp.status === 400 + ? '缺少评论 ID' + : `删除评论失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; + +/** + * 修改评论 + * POST /admin/modify_comment { id, content, parent_comment_id, nickname } + */ +export const modifyComment = async ( + id: number, + content: string, + parent_comment_id: number, + nickname: string +): Promise<{ status: 'OK' }> => { + const missingId = !id && id !== 0; + const missingParent = parent_comment_id === undefined || parent_comment_id === null || Number.isNaN(parent_comment_id); + if (missingId || !content || !nickname || missingParent) { + throw new Error('缺少必填字段'); + } + const resp = await adminApiRequest('/modify_comment', { + method: 'POST', + body: JSON.stringify({ id, content, parent_comment_id, nickname }), + }); + if (!resp.ok) { + let detail = ''; + try { + const ct = resp.headers.get('Content-Type') || ''; + if (ct.includes('application/json')) { + const data = await resp.json(); + detail = typeof data === 'string' ? data : (data?.message || JSON.stringify(data)); + } else { + detail = await resp.text(); + } + } catch {} + const msg = resp.status === 401 || resp.status === 403 + ? '身份验证失败,请重新登陆' + : resp.status === 404 + ? '评论或父评论不存在' + : resp.status === 400 + ? '缺少必填字段' + : `修改评论失败: ${resp.status}${detail ? ` - ${detail}` : ''}`; + throw new Error(msg); + } + return resp.json(); +}; \ No newline at end of file diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 0000000..628d5f7 --- /dev/null +++ b/src/api.ts @@ -0,0 +1,234 @@ +import { API_CONFIG } from './config'; +import { toast } from 'react-hot-toast'; + +export interface Article { + id: number; + content: string; + upvotes: number; + downvotes: number; +} + +export const fetchArticles = async (page: number, signal?: AbortSignal): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/get/10_info?page=${page}`, { signal }); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return await response.json(); + } catch (error) { + if (error instanceof Error && error.name !== 'AbortError') { + console.error('Error fetching articles:', error); + } + throw error; + } +}; + +export const voteArticle = async ( + id: number, + type: 'up' | 'down' +): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/${type}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ id }), + }); + + const data = await response.json(); + if (data.status !== 'OK') { + throw new Error(`Vote ${type} failed`); + } + } catch (error) { + toast.error(`点赞${type === 'up' ? '赞' : '踩'}失败`); + throw error; + } +}; + +interface SubmitPostResponse { + id: string; + status: "Pass" | "Pending" | "Deny"; + message?: string; +} + +export const submitPost = async (postData: { content: string }): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/post`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ content: postData.content }), + }); + + if (response.status === 403) { + return { status: 'Deny', message: '投稿中包含违禁词', id: 'null'}; + } + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + return await response.json() as SubmitPostResponse; + } catch (error) { + console.error('Error submitting post:', error); + throw error; + } +}; + +export const uploadImage = async (formData: FormData): Promise<{ status: 'OK' | 'Error'; url?: string; message?: string }> => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/upload_pic`, { + method: 'POST', + body: formData, + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const result = await response.json(); + if (result.url) { + result.url = `${API_CONFIG.BASE_URL}${result.url}`; + } + + return result; + } catch (error) { + console.error('Error uploading image:', error); + throw error; + } +}; + +interface ReportPostResponse { + id: number; + status: string; +} + +export const reportPost = async (reportData: { id: number; title: string; content: string }): Promise => { + const response = await fetch(`${API_CONFIG.BASE_URL}/report`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(reportData), + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + return (await response.json()) as ReportPostResponse; +}; + +export async function getPostState(id: string): Promise<{ status: string }> { + const response = await fetch(`${API_CONFIG.BASE_URL}/get/post_state?id=${id}`); + if (!response.ok) { + throw new Error('Failed to fetch post state'); + } + return response.json(); +} + +export async function getReportState(id: string): Promise<{ status: string }> { + const response = await fetch(`${API_CONFIG.BASE_URL}/get/report_state?id=${id}`); + if (!response.ok) { + throw new Error('Failed to fetch report state'); + } + return response.json(); +} + + +export interface Comment { + id: number; + nickname: string; + content: string; + parent_comment_id: number; +} + +export const getComments = async (id: string | number): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/get/comment?id=${id}`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return await response.json(); + } catch (error) { + console.error('Error fetching comments:', error); + throw error; + } +}; + +export interface PostCommentRequest { + content: string; + submission_id: number; + parent_comment_id: number; + nickname: string; +} + +export interface PostCommentResponse { + id: number; + status: string; +} + +export const postComment = async (commentData: PostCommentRequest): Promise => { + try { + const response = await fetch(`${API_CONFIG.BASE_URL}/comment`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(commentData), + }); + + if (response.status === 403) { + throw new Error('评论包含违禁词'); + } + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + return await response.json(); + } catch (error) { + console.error('Error posting comment:', error); + throw error; + } +}; + +// === Backend Initialization === +export interface InitPayload { + adminToken: string; + uploadFolder: string; + allowedExtensions: string[]; + maxFileSize: number; + bannedKeywords?: string[]; +} + +export const initBackend = async (payload: InitPayload): Promise<{ status: string; reason?: string }> => { + const body = { + ADMIN_TOKEN: payload.adminToken, + UPLOAD_FOLDER: payload.uploadFolder, + ALLOWED_EXTENSIONS: payload.allowedExtensions, + MAX_FILE_SIZE: payload.maxFileSize, + ...(payload.bannedKeywords ? { BANNED_KEYWORDS: payload.bannedKeywords } : {}), + }; + + const response = await fetch(`${API_CONFIG.BASE_URL}/init`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + }); + + const data = await response.json().catch(() => ({ status: 'Fail', reason: 'Invalid response' })); + + if (response.status === 403) { + throw new Error(data?.reason || '后端已初始化'); + } + if (!response.ok) { + throw new Error(data?.reason || `初始化失败,状态码 ${response.status}`); + } + + return data as { status: string; reason?: string }; +}; \ No newline at end of file diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/AboutPage.tsx b/src/components/AboutPage.tsx new file mode 100644 index 0000000..127f718 --- /dev/null +++ b/src/components/AboutPage.tsx @@ -0,0 +1,99 @@ +import React, { useState, useEffect } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import remarkIns from 'remark-ins'; +import { toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; +import { makeStyles, tokens } from '@fluentui/react-components'; + +const useStyles = makeStyles({ + markdownContent: { + // Markdown样式优化 + '& h1, & h2, & h3, & h4, & h5, & h6': { + marginTop: '1em', + marginBottom: '0.5em', + fontWeight: 'bold', + }, + '& p': { + marginTop: '0.5em', + marginBottom: '0.5em', + lineHeight: '1.6', + }, + '& ul, & ol': { + marginTop: '0.5em', + marginBottom: '0.5em', + paddingLeft: '2em', + }, + '& li': { + marginTop: '0.25em', + marginBottom: '0.25em', + }, + '& blockquote': { + margin: '1em 0', + paddingLeft: '1em', + borderLeft: `3px solid ${tokens.colorNeutralStroke1}`, + color: tokens.colorNeutralForeground2, + }, + '& code': { + backgroundColor: tokens.colorNeutralBackground1, + padding: '2px 4px', + borderRadius: '3px', + fontFamily: 'monospace', + }, + '& pre': { + backgroundColor: tokens.colorNeutralBackground1, + padding: '1em', + borderRadius: '5px', + overflowX: 'auto', + marginTop: '1em', + marginBottom: '1em', + }, + '& table': { + borderCollapse: 'collapse', + width: '100%', + marginTop: '1em', + marginBottom: '1em', + }, + '& th, & td': { + border: `1px solid ${tokens.colorNeutralStroke1}`, + padding: '8px', + textAlign: 'left', + }, + '& th': { + backgroundColor: tokens.colorNeutralBackground1, + fontWeight: 'bold', + }, + '& ins': { + textDecoration: 'underline', + backgroundColor: 'transparent', + }, + }, +}); + +const AboutPage: React.FC = () => { + const [markdown, setMarkdown] = useState(''); + const styles = useStyles(); + + useEffect(() => { + fetch('/about.md') + .then(response => { + if (!response.ok) { + throw new Error('找不到about.md,请检查文件是否存在。'); + } + return response.text(); + }) + .then(text => setMarkdown(text)) + .catch(error => { + console.error('Error fetching about.md:', error); + toast.error(error.message); + }); + }, []); + + return ( +
+ {markdown} +
+ ); +}; + +export default AboutPage; \ No newline at end of file diff --git a/src/components/AdminDashboard.tsx b/src/components/AdminDashboard.tsx new file mode 100644 index 0000000..8247259 --- /dev/null +++ b/src/components/AdminDashboard.tsx @@ -0,0 +1,886 @@ +import React from 'react'; +import { + makeStyles, + Button, + Text, + tokens, + Tab, + TabList, + Dialog, + DialogSurface, + DialogBody, + DialogTitle, + DialogContent, + DialogActions, +} from '@fluentui/react-components'; +import type { TabValue } from '@fluentui/react-components'; +import { getAuditMode, setAuditMode, getBackupZip, recoverBackup, getPicLinks, deletePic, type PicLink, getPendingReports, approveReport, rejectReport, type PendingReport, getAdminPostInfo, getPendingPosts, getRejectedPosts, type AdminPostListItem, approvePost, disapprovePost, reauditPost, deletePost } from '../admin_api'; +import { Switch } from '@fluentui/react-components'; +import { toast } from 'react-hot-toast'; +import { + SignOut24Regular, + WeatherSunny24Regular, + WeatherMoon24Regular +} from '@fluentui/react-icons'; +import { adminLogout } from '../admin_api'; +import { SITE_TITLE } from '../config'; + +import icon from '/icon.png'; +import AdminPostCard from './AdminPostCard'; +import AdminModifyPost from './AdminModifyPost'; +import AdminManageComments from './AdminManageComments'; +import { fetchArticles, type Article } from '../api'; + +const useStyles = makeStyles({ + root: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + display: 'flex', + flexDirection: 'column', + backgroundColor: tokens.colorNeutralBackground2, + overflow: 'hidden', + height: '100vh', + }, + header: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + height: '30px', + backgroundColor: tokens.colorNeutralBackground1, + boxShadow: tokens.shadow4, + padding: tokens.spacingHorizontalL, + }, + title: { + marginLeft: tokens.spacingHorizontalM, + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalS, + }, + icon: { + height: '32px', + width: '32px', + }, + themeToggle: { + cursor: 'pointer', + }, + content: { + flex: '1 1 auto', + backgroundColor: tokens.colorNeutralBackground2, + overflowY: 'auto', + }, + tabs: { + padding: `${tokens.spacingVerticalS} ${tokens.spacingHorizontalL}`, + borderBottom: `1px solid ${tokens.colorNeutralStroke1}`, + backgroundColor: tokens.colorNeutralBackground2, + }, + contentPanel: { + padding: tokens.spacingHorizontalL, + }, + footer: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '50px', + backgroundColor: tokens.colorNeutralBackground1, + borderTop: `1px solid ${tokens.colorNeutralStroke1}`, + }, + logoutButton: { + display: 'flex', + alignItems: 'center', + gap: tokens.spacingHorizontalS, + }, + modalOverlay: { + position: 'fixed', + top: 0, + left: 0, + width: '100%', + height: '100%', + backgroundColor: 'rgba(0, 0, 0, 0.5)', + backdropFilter: 'blur(5px)', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + zIndex: 999, + }, +}); + +interface AdminDashboardProps { + onLogout: () => void; + isDarkMode?: boolean; + onToggleTheme?: () => void; +} + +const AdminDashboard: React.FC = ({ + onLogout, + isDarkMode = false, + onToggleTheme +}) => { + const styles = useStyles(); + const [activeTab, setActiveTab] = React.useState('systemSettings'); + const [postReviewSubTab, setPostReviewSubTab] = React.useState('pending'); + const [needAudit, setNeedAudit] = React.useState(null); + const [loadingAudit, setLoadingAudit] = React.useState(false); + const [recovering, setRecovering] = React.useState(false); + const fileInputRef = React.useRef(null); + const [selectedBackupFile, setSelectedBackupFile] = React.useState(null); + const [confirmOpen, setConfirmOpen] = React.useState(false); + // 图片管理状态 + const [picPage, setPicPage] = React.useState(1); + const [picLoading, setPicLoading] = React.useState(false); + const [picList, setPicList] = React.useState([]); + const [deleteConfirm, setDeleteConfirm] = React.useState<{ open: boolean; filename?: string }>({ open: false }); + // 举报管理状态 + const [reportsLoading, setReportsLoading] = React.useState(false); + const [pendingReports, setPendingReports] = React.useState([]); + const [postContents, setPostContents] = React.useState>({}); + // 投稿审核数据状态 + const [approvedArticles, setApprovedArticles] = React.useState([]); + const [approvedLoading, setApprovedLoading] = React.useState(false); + const [approvedPage, setApprovedPage] = React.useState(1); + const [approvedHasMore, setApprovedHasMore] = React.useState(true); + const approvedObserver = React.useRef(null); + const lastApprovedRef = React.useCallback((node: HTMLDivElement | null) => { + if (approvedLoading) return; + if (approvedObserver.current) approvedObserver.current.disconnect(); + approvedObserver.current = new IntersectionObserver(entries => { + if (entries[0].isIntersecting && approvedHasMore) { + setApprovedPage(prev => prev + 1); + } + }); + if (node) approvedObserver.current.observe(node); + }, [approvedLoading, approvedHasMore]); + const [pendingPosts, setPendingPosts] = React.useState([]); + const [pendingPostsLoading, setPendingPostsLoading] = React.useState(false); + const [rejectedPosts, setRejectedPosts] = React.useState([]); + const [rejectedPostsLoading, setRejectedPostsLoading] = React.useState(false); + // 帖子删除二次确认 + const [deletePostConfirm, setDeletePostConfirm] = React.useState<{ open: boolean; id?: number; list?: 'approved' | 'pending' | 'rejected' }>({ open: false }); + // 修改帖子弹窗 + const [modifyPostModal, setModifyPostModal] = React.useState<{ open: boolean; id?: number; initialContent?: string; list?: 'approved' | 'pending' }>({ open: false }); + // 评论管理弹窗 + const [manageCommentsModal, setManageCommentsModal] = React.useState<{ open: boolean; id?: number }>({ open: false }); + + React.useEffect(() => { + if (activeTab === 'systemSettings') { + setLoadingAudit(true); + getAuditMode() + .then(data => { + setNeedAudit(!!data.status); + }) + .catch((err: any) => { + console.error(err); + const msg = String(err?.message || ''); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('获取审核模式失败'); + } + }) + .finally(() => setLoadingAudit(false)); + } else if (activeTab === 'imageManage') { + setPicLoading(true); + getPicLinks(picPage) + .then(list => setPicList(list)) + .catch((err: any) => { + console.error(err); + const msg = String(err?.message || '获取图片链接失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('获取图片链接失败'); + } + }) + .finally(() => setPicLoading(false)); + } else if (activeTab === 'complaintReview') { + setReportsLoading(true); + getPendingReports() + .then(list => setPendingReports(list)) + .catch((err: any) => { + console.error(err); + const msg = String(err?.message || '获取待处理举报失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('获取待处理举报失败'); + } + }) + .finally(() => setReportsLoading(false)); + } + }, [activeTab, picPage]); + + // 当待处理举报列表更新时,基于 submission_id 拉取帖子内容 + React.useEffect(() => { + if (activeTab !== 'complaintReview') return; + const ids = Array.from(new Set(pendingReports.map(r => r.submission_id).filter(id => typeof id === 'number' && id > 0))); + if (ids.length === 0) return; + const needFetch = ids.filter(id => !(id in postContents)); + if (needFetch.length === 0) return; + Promise.all(needFetch.map(id => + getAdminPostInfo(id) + .then(info => ({ id, content: info.content })) + .catch((e: any) => { + const msg = String(e?.message || '获取帖子详情失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else if (msg.includes('404')) { + toast.error('帖子不存在'); + } else if (msg.includes('400')) { + toast.error('缺少帖子 ID'); + } else { + toast.error('获取帖子详情失败'); + } + return { id, content: '' }; + }) + )).then(results => { + setPostContents(prev => { + const next = { ...prev }; + for (const r of results) { + next[r.id] = r.content; + } + return next; + }); + }); + }, [activeTab, pendingReports]); + + // 进入“已过审”子选项卡时重置无限滚动状态 + React.useEffect(() => { + if (activeTab === 'postReview' && postReviewSubTab === 'approved') { + setApprovedArticles([]); + setApprovedPage(1); + setApprovedHasMore(true); + } + }, [activeTab, postReviewSubTab]); + + // 投稿审核:根据子选项卡加载对应列表 + React.useEffect(() => { + if (activeTab !== 'postReview') return; + if (postReviewSubTab === 'approved') { + const ac = new AbortController(); + const signal = ac.signal; + const loadApproved = async () => { + if (!approvedHasMore) return; + setApprovedLoading(true); + try { + const newArticles = await fetchArticles(approvedPage, signal); + if (newArticles.length === 0) { + setApprovedHasMore(false); + } else { + setApprovedArticles(prev => [...prev, ...newArticles]); + } + } catch (err) { + if (err instanceof Error && err.name !== 'AbortError') { + console.error(err); + toast.error('获取已过审帖子失败'); + } + } finally { + setApprovedLoading(false); + } + }; + loadApproved(); + return () => ac.abort(); + } else if (postReviewSubTab === 'pending') { + setPendingPostsLoading(true); + getPendingPosts() + .then(list => setPendingPosts(list)) + .catch((err: any) => { + console.error(err); + const msg = String(err?.message || '获取待审核帖子失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('获取待审核帖子失败'); + } + }) + .finally(() => setPendingPostsLoading(false)); + } else if (postReviewSubTab === 'rejected') { + setRejectedPostsLoading(true); + getRejectedPosts() + .then(list => setRejectedPosts(list)) + .catch((err: any) => { + console.error(err); + const msg = String(err?.message || '获取已拒绝帖子失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('获取已拒绝帖子失败'); + } + }) + .finally(() => setRejectedPostsLoading(false)); + } + }, [activeTab, postReviewSubTab, approvedPage]); + + // 确认删除帖子 + const handleConfirmDeletePost = async () => { + const id = deletePostConfirm.id; + const list = deletePostConfirm.list; + if (!id) { + setDeletePostConfirm({ open: false }); + return; + } + try { + await deletePost(id); + toast.success(`已删除帖子 #${id}`); + if (list === 'approved') { + setApprovedArticles(prev => prev.filter(x => x.id !== id)); + } else if (list === 'pending') { + setPendingPosts(prev => prev.filter(x => x.id !== id)); + } else if (list === 'rejected') { + setRejectedPosts(prev => prev.filter(x => x.id !== id)); + } + } catch (e: any) { + const msg = String(e?.message || '删除帖子失败'); + toast.error(msg); + } finally { + setDeletePostConfirm({ open: false }); + } + }; + + const handleToggleAudit = async (checked: boolean) => { + try { + await setAuditMode(checked); + setNeedAudit(checked); + toast.success(checked ? '已开启审核模式' : '已关闭审核模式'); + } catch (e: any) { + const msg = String(e?.message || '切换审核模式失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('切换审核模式失败'); + } + } + }; + + const handleCreateBackup = async () => { + try { + const { blob, filename } = await getBackupZip(); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename || 'backup.zip'; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); + toast.success('备份已生成并开始下载'); + } catch (e: any) { + const msg = String(e?.message || '创建备份失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else { + toast.error('创建备份失败'); + } + } + }; + + const handleRecoverBackup = async (file: File | null) => { + if (!file) return; + setRecovering(true); + try { + await recoverBackup(file); + toast.success('恢复成功'); + } catch (e: any) { + const msg = String(e?.message || '恢复失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else if (msg.includes('400')) { + toast.error('请求错误:请检查文件是否为有效 ZIP 备份'); + } else { + toast.error('服务器错误或恢复失败'); + } + } finally { + setRecovering(false); + if (fileInputRef.current) fileInputRef.current.value = ''; + setSelectedBackupFile(null); + } + }; + + const handleConfirmRecover = () => { + if (!selectedBackupFile) return; + const lower = selectedBackupFile.name.toLowerCase(); + if (!lower.endsWith('.zip')) { + toast.error('请选择 ZIP 格式的备份文件'); + return; + } + setConfirmOpen(false); + void handleRecoverBackup(selectedBackupFile); + }; + + const handleLogout = () => { + try { + adminLogout(); + toast.success('已退出登录'); + onLogout(); + } catch (error) { + toast.error('退出登录失败'); + console.error('Logout error:', error); + } + }; + + // 图片删除触发与确认 + const requestDeletePic = (filename: string) => { + setDeleteConfirm({ open: true, filename }); + }; + + // 举报审批操作 + const handleApproveReport = async (id: number) => { + try { + await approveReport(id); + toast.success('已批准举报并删除违规帖子'); + // 刷新列表 + setReportsLoading(true); + const list = await getPendingReports(); + setPendingReports(list); + } catch (e: any) { + const msg = String(e?.message || '批准举报失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else if (msg.includes('404')) { + toast.error('举报记录不存在或已处理'); + } else if (msg.includes('400')) { + toast.error('缺少举报 ID'); + } else { + toast.error('批准举报失败'); + } + } finally { + setReportsLoading(false); + } + }; + + const handleRejectReport = async (id: number) => { + try { + await rejectReport(id); + toast.success('已拒绝举报,帖子保持原状'); + // 刷新列表 + setReportsLoading(true); + const list = await getPendingReports(); + setPendingReports(list); + } catch (e: any) { + const msg = String(e?.message || '拒绝举报失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else if (msg.includes('404')) { + toast.error('举报记录不存在或已处理'); + } else if (msg.includes('400')) { + toast.error('缺少举报 ID'); + } else { + toast.error('拒绝举报失败'); + } + } finally { + setReportsLoading(false); + } + }; + + const handleConfirmDeletePic = async () => { + const filename = deleteConfirm.filename; + if (!filename) { + setDeleteConfirm({ open: false }); + return; + } + try { + await deletePic(filename); + toast.success('图片已删除'); + // 刷新当前页 + setPicLoading(true); + const list = await getPicLinks(picPage); + setPicList(list); + } catch (e: any) { + const msg = String(e?.message || '删除图片失败'); + if (msg.includes('401') || msg.includes('403') || msg.includes('登录已过期')) { + toast.error('身份验证失败,请重新登陆'); + } else if (msg.includes('404')) { + toast.error('图片不存在或已被删除'); + } else if (msg.includes('400')) { + toast.error('缺少图片文件名'); + } else { + toast.error('删除图片失败'); + } + } finally { + setDeleteConfirm({ open: false }); + setPicLoading(false); + } + }; + + return ( +
+ {/* 顶栏 - 采用 MainLayout 的 Header 样式 */} +
+ + logo + {`${SITE_TITLE} | 管理面板`} + +
+ {onToggleTheme && ( + +
+
+ + {/* 主内容区域 - 占据剩余空间 */} +
+ {/* 选项卡 */} +
+ setActiveTab(data.value)} + > + 投稿审核 + 投诉审核 + 图片管理 + 系统设置 + +
+ + {/* 内容面板 */} +
+ {activeTab === 'systemSettings' ? ( +
+ 系统设置 +
+ 新文章是否需要审核 +
+ handleToggleAudit(!!data.checked)} + /> + + {needAudit ? '开' : '关'} + +
+
+ + {/* 备份 */} +
+ 备份 +
+ +
+
+ + {/* 恢复 */} +
+ 恢复 +
+ setSelectedBackupFile(e.target.files?.[0] || null)} + disabled={recovering} + /> + + {selectedBackupFile && ( + 已选择:{selectedBackupFile.name} + )} +
+ + 恢复会覆盖现有数据和图片,操作不可逆,建议提前二次备份。 + +
+ + {/* 确认对话框 */} + setConfirmOpen(!!data.open)}> + + + 确认恢复 + + 恢复备份后,现有内容会被清除,要继续吗? + + + + + + + + +
+ ) : activeTab === 'postReview' ? ( +
+ 投稿审核 +
+ setPostReviewSubTab(data.value)} + > + 已过审 + 待处理 + 未过审 + +
+
+ {postReviewSubTab === 'approved' ? ( + approvedLoading && approvedArticles.length === 0 ? ( + 加载中... + ) : approvedArticles.length === 0 ? ( + 暂无已过审帖子 + ) : ( +
+ {approvedArticles.map((a, idx) => { + const isLast = approvedArticles.length === idx + 1 && approvedHasMore; + const card = ( + { + try { + await reauditPost(id); + toast.success(`已重新审核,帖子 #${id} 回到待审核`); + setApprovedArticles(prev => prev.filter(x => x.id !== id)); + } catch (e: any) { + const msg = String(e?.message || '重新审核失败'); + toast.error(msg); + } + }} + onEdit={(id) => setModifyPostModal({ open: true, id, initialContent: a.content, list: 'approved' })} + onManageComments={(id) => setManageCommentsModal({ open: true, id })} + onDelete={(id) => setDeletePostConfirm({ open: true, id, list: 'approved' })} + /> + ); + return isLast ? ( +
{card}
+ ) : card; + })} + {approvedLoading && approvedArticles.length > 0 && ( + 加载中... + )} +
+ ) + ) : postReviewSubTab === 'pending' ? ( + pendingPostsLoading ? ( + 加载中... + ) : pendingPosts.length === 0 ? ( + 暂无待审核帖子 + ) : ( +
+ {pendingPosts.map(p => ( + { + try { + await approvePost(id); + toast.success(`已通过帖子 #${id}`); + setPendingPosts(prev => prev.filter(x => x.id !== id)); + } catch (e: any) { + const msg = String(e?.message || '审核通过失败'); + toast.error(msg); + } + }} + onReject={async (id) => { + try { + await disapprovePost(id); + toast.success(`已拒绝帖子 #${id}`); + setPendingPosts(prev => prev.filter(x => x.id !== id)); + } catch (e: any) { + const msg = String(e?.message || '拒绝帖子失败'); + toast.error(msg); + } + }} + onEdit={(id) => setModifyPostModal({ open: true, id, initialContent: p.content, list: 'pending' })} + onManageComments={(id) => setManageCommentsModal({ open: true, id })} + onDelete={(id) => setDeletePostConfirm({ open: true, id, list: 'pending' })} + /> + ))} +
+ ) + ) : ( + rejectedPostsLoading ? ( + 加载中... + ) : rejectedPosts.length === 0 ? ( + 暂无已拒绝帖子 + ) : ( +
+ {rejectedPosts.map(p => ( + setDeletePostConfirm({ open: true, id, list: 'rejected' })} + /> + ))} +
+ ) + )} +
+
+ + + ) : activeTab === 'imageManage' ? ( +
+ 图片管理 +
+ {picLoading ? ( + 加载中... + ) : picList.length === 0 ? ( + 暂无图片 + ) : ( +
+ {picList.map((item, idx) => ( +
+ {item.url && item.url.trim() !== '' ? ( + {item.filename + ) : ( +
+ 无图片链接 +
+ )} +
+
+ {item.filename} + {item.upload_time} +
+ +
+
+ ))} +
+ )} +
+
+ + 第 {picPage} 页 + +
+ + {/* 删除确认对话框 */} + setDeleteConfirm({ open: !!data.open, filename: deleteConfirm.filename })}> + + + 确认删除图片 + + 将永久删除服务器上的此图片:{deleteConfirm.filename} + + + + + + + + +
+ ) : activeTab === 'complaintReview' ? ( +
+ 投诉审核 +
+ {reportsLoading ? ( + 加载中... + ) : pendingReports.length === 0 ? ( + 暂无待处理举报 + ) : ( +
+ {pendingReports.map((r) => ( +
+
+ {r.title || `举报 #${r.id}`} + {r.created_at} +
+
+ 帖子内容 + + {postContents[r.submission_id] !== undefined + ? (postContents[r.submission_id] || '(帖子内容为空)') + : '加载中...'} + +
+
+ 举报内容 + + {r.content || '(无举报内容)'} + +
+
+ + +
+
+ ))} +
+ )} +
+
+ ) : ( + TODO: {String(activeTab)} + )} + {/* 删除帖子二次确认弹窗(放在内容面板末尾,避免打断三元表达式) */} + setDeletePostConfirm(prev => ({ ...prev, open: !!data.open }))}> + + + 确认删除帖子 + + 该操作不可恢复,确定要永久删除帖子 #{deletePostConfirm.id} 吗? + + + + + + + + + {/* 修改帖子弹窗 */} + {modifyPostModal.open && modifyPostModal.id !== undefined && ( +
+ setModifyPostModal({ open: false })} + onSubmitSuccess={(newContent) => { + if (modifyPostModal.list === 'approved') { + setApprovedArticles(prev => prev.map(a => a.id === modifyPostModal.id ? { ...a, content: newContent } : a)); + } else if (modifyPostModal.list === 'pending') { + setPendingPosts(prev => prev.map(p => p.id === modifyPostModal.id ? { ...p, content: newContent } : p)); + } + }} + /> +
+ )} + {manageCommentsModal.open && manageCommentsModal.id !== undefined && ( +
+ setManageCommentsModal({ open: false })} + /> +
+ )} +
+
+ + {/* 页脚 - 采用 MainLayout 的 Footer 样式 */} +
+ + Powered By Sycamore_Whisper + +
+
+ ); +}; + +export default AdminDashboard; \ No newline at end of file diff --git a/src/components/AdminLogin.tsx b/src/components/AdminLogin.tsx new file mode 100644 index 0000000..462b373 --- /dev/null +++ b/src/components/AdminLogin.tsx @@ -0,0 +1,179 @@ +import React, { useState } from 'react'; +import { + makeStyles, + Button, + Input, + Text, + Card, + CardHeader, + CardPreview, + tokens, + Spinner, + Field, +} from '@fluentui/react-components'; +import { LockClosed24Regular, Shield24Regular, ShieldLock24Regular} from '@fluentui/react-icons'; +import { verifyAdminPassword } from '../admin_api'; +import { toast } from 'react-hot-toast'; + +const useStyles = makeStyles({ + container: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + minHeight: '100vh', + backgroundColor: tokens.colorNeutralBackground1, + padding: tokens.spacingVerticalXL, + }, + loginCard: { + width: '400px', + maxWidth: '90vw', + padding: tokens.spacingVerticalXL, + }, + cardHeader: { + textAlign: 'center', + marginBottom: tokens.spacingVerticalL, + }, + title: { + fontSize: tokens.fontSizeHero700, + fontWeight: tokens.fontWeightSemibold, + color: tokens.colorNeutralForeground1, + marginBottom: tokens.spacingVerticalS, + }, + subtitle: { + fontSize: tokens.fontSizeBase300, + color: tokens.colorNeutralForeground2, + }, + iconContainer: { + display: 'flex', + justifyContent: 'center', + marginBottom: tokens.spacingVerticalM, + }, + icon: { + fontSize: '48px', + color: tokens.colorBrandForeground1, + }, + form: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + }, + passwordField: { + width: '100%', + }, + passwordIconContainer: { + display: 'flex', + justifyContent: 'center', + marginBottom: tokens.spacingVerticalM, + }, + passwordIcon: { + fontSize: '48px', + color: tokens.colorBrandForeground1, + }, + loginButton: { + width: '100%', + marginTop: tokens.spacingVerticalS, + }, + loadingContainer: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + gap: tokens.spacingHorizontalS, + }, +}); + +interface AdminLoginProps { + onLoginSuccess: () => void; +} + +const AdminLogin: React.FC = ({ onLoginSuccess }) => { + const styles = useStyles(); + const [password, setPassword] = useState(''); + const [loading, setLoading] = useState(false); + + const handleLogin = async () => { + if (!password.trim()) { + toast.error('请输入管理员密码'); + return; + } + + setLoading(true); + try { + const result = await verifyAdminPassword(password); + + if (result.success) { + toast.success(result.message || '登录成功'); + onLoginSuccess(); + } else { + toast.error(result.message || '登录失败'); + setPassword(''); // 清空密码输入 + } + } catch (error) { + toast.error('登录过程中发生错误'); + console.error('Login error:', error); + } finally { + setLoading(false); + } + }; + + const handleKeyPress = (event: React.KeyboardEvent) => { + if (event.key === 'Enter' && !loading) { + handleLogin(); + } + }; + + return ( +
+ + +
+ +
+ 管理员登录 + 请输入管理员密码以访问后台 +
+ + +
+
+ +
+ + setPassword(e.target.value)} + onKeyPress={handleKeyPress} + placeholder="请输入管理员密码" + disabled={loading} + contentBefore={} + /> + + + +
+
+
+
+ ); +}; + +export default AdminLogin; \ No newline at end of file diff --git a/src/components/AdminManageComments.tsx b/src/components/AdminManageComments.tsx new file mode 100644 index 0000000..954081c --- /dev/null +++ b/src/components/AdminManageComments.tsx @@ -0,0 +1,259 @@ +import React from 'react'; +import { makeStyles, shorthands, tokens, Button, Input, Textarea, Dropdown, Option, Card, Text } from '@fluentui/react-components'; +import { getComments, type Comment as CommentType } from '../api'; +import { deleteComment, modifyComment } from '../admin_api'; +import { toast } from 'react-toastify'; + +const useStyles = makeStyles({ + modalContent: { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 'min(860px, 96vw)', + backgroundColor: tokens.colorNeutralBackground1, + boxShadow: tokens.shadow64, + ...shorthands.borderRadius(tokens.borderRadiusXLarge), + ...shorthands.padding(tokens.spacingVerticalL, tokens.spacingHorizontalXL), + zIndex: 1001, + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + maxHeight: '80vh', + }, + titleRow: { + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + }, + title: { + fontSize: tokens.fontSizeBase600, + fontWeight: tokens.fontWeightBold, + }, + closeButton: { + position: 'absolute', + right: tokens.spacingHorizontalM, + top: tokens.spacingVerticalM, + }, + commentsList: { + overflowY: 'auto', + flex: 1, + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalM, + ...shorthands.padding(tokens.spacingVerticalM), + }, + commentCard: { + backgroundColor: tokens.colorNeutralBackground1, + ...shorthands.borderRadius(tokens.borderRadiusLarge), + ...shorthands.border('1px', 'solid', tokens.colorNeutralStroke1), + boxShadow: tokens.shadow8, + marginBottom: tokens.spacingVerticalS, + padding: tokens.spacingHorizontalM, + width: '100%', + }, + commentHeader: { + display: 'flex', + alignItems: 'baseline', + justifyContent: 'space-between', + color: tokens.colorNeutralForeground1, + }, + nickname: { + fontWeight: tokens.fontWeightSemibold, + }, + commentMeta: { + color: tokens.colorNeutralForeground3, + fontSize: tokens.fontSizeBase300, + }, + childComment: { + marginLeft: tokens.spacingHorizontalL, + borderLeft: `2px solid ${tokens.colorNeutralStroke2}`, + paddingLeft: tokens.spacingHorizontalM, + }, + actionsRow: { + display: 'flex', + gap: tokens.spacingHorizontalS, + marginTop: tokens.spacingVerticalS, + }, + editor: { + display: 'flex', + flexDirection: 'column', + gap: tokens.spacingVerticalS, + }, + fieldRow: { + display: 'flex', + gap: tokens.spacingHorizontalS, + }, + fieldControl: { + flex: 1, + }, +}); + +type AdminManageCommentsProps = { + postId: number; + onClose: () => void; +}; + +const AdminManageComments: React.FC = ({ postId, onClose }) => { + const styles = useStyles(); + const [loading, setLoading] = React.useState(false); + const [comments, setComments] = React.useState([]); + const [editingId, setEditingId] = React.useState(null); + const [nickname, setNickname] = React.useState(''); + const [content, setContent] = React.useState(''); + const [parentId, setParentId] = React.useState(0); + const depthMap = React.useMemo(() => { + const map = new Map(); + const idToParent = new Map(); + comments.forEach(c => idToParent.set(c.id, (c.parent_comment_id as any) ?? 0)); + const calcDepth = (id: number) => { + if (map.has(id)) return map.get(id)!; + let d = 0; + let current = id; + const seen = new Set(); + while (true) { + seen.add(current); + const p = idToParent.get(current) ?? 0; + if (p === 0 || !idToParent.has(p) || seen.has(p)) break; + d += 1; + current = p; + } + map.set(id, d); + return d; + }; + comments.forEach(c => calcDepth(c.id)); + return map; + }, [comments]); + + const loadComments = React.useCallback(async () => { + setLoading(true); + try { + const list = await getComments(postId); + setComments(list); + } catch (e: any) { + toast.error(`加载评论失败:${e?.message || e}`); + } finally { + setLoading(false); + } + }, [postId]); + + React.useEffect(() => { + loadComments(); + }, [loadComments]); + + const startEdit = (c: CommentType) => { + setEditingId(c.id); + setNickname(c.nickname || ''); + setContent(c.content || ''); + setParentId((c.parent_comment_id as any) ?? 0); + }; + + const cancelEdit = () => { + setEditingId(null); + setNickname(''); + setContent(''); + setParentId(0); + }; + + const submitEdit = async () => { + if (editingId === null) return; + if (parentId === editingId) { + toast.error('父评论不能设置为自己'); + return; + } + try { + await modifyComment(editingId, content, Number(parentId), nickname); + toast.success('修改评论成功'); + setComments(prev => prev.map(c => c.id === editingId ? { ...c, content, nickname, parent_comment_id: Number(parentId) } : c)); + cancelEdit(); + } catch (e: any) { + toast.error(e?.message || '修改评论失败'); + } + }; + + const handleDelete = async (id: number) => { + if (!id && id !== 0) return; + try { + await deleteComment(id); + toast.success('删除评论成功'); + setComments(prev => prev.filter(c => c.id !== id)); + } catch (e: any) { + toast.error(e?.message || '删除评论失败'); + } + }; + + // 递归渲染函数工厂(用于显示树形结构) + const renderComments = React.useMemo(() => { + return renderCommentsFactory(comments, styles, startEdit, handleDelete); + }, [comments, styles]); + + return ( +
+
+
评论管理
+ +
+
帖子 #{postId}
+ + {editingId !== null && ( +
+ 修改评论 #{editingId} +
+ setNickname(d.value)} placeholder="用户名" /> + setParentId(Number(data.optionValue))} + > + + {comments.filter(c => c.id !== editingId).map(c => { + const depth = depthMap.get(c.id) ?? 0; + const indent = ' '.repeat(Math.max(0, depth * 2)); + return ( + + ); + })} + +
+