commit d1d7f0fbc1224329f21ce327f840029825737534 Author: Devika Date: Fri May 23 12:26:18 2025 +0530 initial 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/README.md b/README.md new file mode 100644 index 0000000..fc6a9ac --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# Snowflake Data Warehouse Dashboard + +An interactive visualization tool for exploring Snowflake data warehouse structures, including databases, schemas, and tables (both fact and dimension). + +## Features + +- **True Infinite Canvas**: Unlimited zooming and panning capabilities for exploring vast data structures +- **Interactive Exploration**: Click to expand/collapse databases and schemas +- **Table Details**: View detailed information about fact and dimension tables +- **Visual Distinction**: Different colors for databases, schemas, fact tables, and dimension tables +- **Relationship Visualization**: Animated connections between related elements +- **Dynamic Navigation**: Zoom controls and minimap for easy navigation of the infinite space +- **Custom Connections**: Create and manage custom connections between any elements (databases, schemas, tables) + +## Implementation Details + +This dashboard is built using: + +- React for the UI components +- ReactFlow for the interactive graph visualization +- CSS for styling and visual hierarchy + +## Usage + +1. **Exploring the Data Warehouse**: + - Click on a database node to expand and see its schemas + - Click on a schema node to expand and see its tables + - Click on a table node to view detailed information + +2. **Infinite Canvas Navigation**: + - Use the mouse wheel to zoom in/out without limits + - Click and drag to pan infinitely in any direction + - Use the minimap in the bottom-right for quick navigation + - Use the dedicated "Zoom Out" button to quickly get a broader view + - Click "Reset View" to return to the initial state + - Current zoom level is displayed in the control panel + +3. **Creating Custom Connections**: + - Click "Start Connection Mode" to enter connection mode + - Choose connection type: Reference, Dependency, or Custom + - Drag from a connection point (dot) on any node + - Drop onto a connection point on another node to create the connection + - View and manage all custom connections in the bottom-left panel + - Delete connections by clicking the "✕" button + - Connection points appear on all four sides of each node + +## Data Structure + +The dashboard visualizes: + +- **Databases**: Top-level containers (e.g., Sales DW, Marketing DW) +- **Schemas**: Logical groupings of tables within a database +- **Fact Tables**: Tables containing measurable, quantitative data about business events +- **Dimension Tables**: Tables containing descriptive attributes used for analysis + +## Future Enhancements + +- Add search functionality to quickly find specific elements +- Implement filtering options for different table types +- Add ability to save and share specific views +- Integrate with real Snowflake data sources via API +- Add SQL query generation based on selected tables + +## Development + +To run the project locally: + +```bash +npm install +npm run dev +``` + +The application will be available at http://localhost:5173/ + +--- + +This project was bootstrapped with [Vite](https://vitejs.dev/) and uses [React](https://reactjs.org/) for the UI. diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..ec2b712 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,33 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...reactHooks.configs.recommended.rules, + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/index.html b/index.html new file mode 100644 index 0000000..07f0b21 --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + Vite + React + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5e5a75f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9204 @@ +{ + "name": "qbx", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "qbx", + "version": "0.0.0", + "dependencies": { + "@univerjs-pro/engine-pivot": "^0.7.0", + "@univerjs-pro/sheets-pivot": "^0.7.0", + "@univerjs-pro/sheets-pivot-ui": "^0.7.0", + "@univerjs/core": "^0.7.0", + "@univerjs/preset-sheets-core": "^0.7.0", + "@univerjs/presets": "^0.7.0", + "d3": "^7.9.0", + "luckysheet": "^2.1.13", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-flow-renderer": "^10.3.17", + "react-icons": "^5.5.0", + "reactflow": "^11.11.4", + "recharts": "^2.15.3" + }, + "devDependencies": { + "@eslint/js": "^9.25.0", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "eslint": "^9.25.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "vite": "^6.3.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@flatten-js/interval-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.3.tgz", + "integrity": "sha512-xhFWUBoHJFF77cJO1D6REjdgJEMRf2Y2Z+eKEPav8evGKcLSnj1ud5pLXQSbGuxF3VSvT1rWhMfVpXEKJLTL+A==", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", + "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", + "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.3.tgz", + "integrity": "sha512-rmOWVRUbUJD7iSvJugjUbFZshTAuJ48MXoZ80Osx1GM0K/H1w7rSEvmw8m6vdWxNASgtaHIhAgre4H/E9GJiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@noble/ed25519": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.2.3.tgz", + "integrity": "sha512-iHV8eI2mRcUmOx159QNrU8vTpQ/Xm70yJ2cTk3Trc86++02usfqFoNl6x0p3JN81ZDS/1gx6xiK0OwrgqCT43g==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz", + "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz", + "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.15.tgz", + "integrity": "sha512-mIBnOjgwo9AH3FyKaSWoSu/dYj6VdhJ7frEPiGTeXCdUFHjl9h3mFh2wwhEtINOmYXWhdpf1rY2minFsmaNgVQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.15", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz", + "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.15.tgz", + "integrity": "sha512-tVlmA3Vb9n8SZSd+YSbuFR66l87Wiy4du+YE+0hzKQEANA+7cWKH1WgqcEX4pXqxUFQKrWQGHdvEfw00TjFiew==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.10", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz", + "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-focus-guards": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz", + "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", + "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz", + "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz", + "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.7.tgz", + "integrity": "sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.10", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.7", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz", + "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.44.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@reactflow/background": { + "version": "11.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz", + "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/background/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@reactflow/controls": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz", + "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/controls/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@reactflow/core": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz", + "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==", + "license": "MIT", + "dependencies": { + "@types/d3": "^7.4.0", + "@types/d3-drag": "^3.0.1", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/core/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@reactflow/minimap": { + "version": "11.7.14", + "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz", + "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/minimap/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@reactflow/node-resizer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz", + "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.4", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-resizer/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@reactflow/node-toolbar": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz", + "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-toolbar/node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz", + "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", + "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz", + "integrity": "sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.34", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", + "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@types/resize-observer-browser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz", + "integrity": "sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ==", + "license": "MIT" + }, + "node_modules/@univerjs-pro/collaboration": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/collaboration/-/collaboration-0.7.0.tgz", + "integrity": "sha512-gSyJx08TevUm2hWh+8MivwXqIX5fqpqwxDmZzTyA1amR6foPAG8Wso+VlQrIppN9LjQBRCRd+nhZ8ChKNpNV/A==", + "dependencies": { + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/data-validation": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-conditional-formatting": "0.7.0", + "@univerjs/sheets-drawing": "0.7.0", + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-hyper-link": "0.7.0", + "@univerjs/thread-comment": "0.7.0", + "uuid": "^11.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs-pro/collaboration-client": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/collaboration-client/-/collaboration-client-0.7.0.tgz", + "integrity": "sha512-4S3XRZdti8vstI2JufLK1oULGG/U7gvE1SjowpPYiMuHOj/wbC6OwlE5remgjsLI6bbfM4Iw75e3Mq4zxBRk9Q==", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/network": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/sheets": "0.7.0", + "@univerjs/telemetry": "0.7.0", + "crypto-js": "4.2.0", + "uuid": "^11.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/collaboration-client-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/collaboration-client-ui/-/collaboration-client-ui-0.7.0.tgz", + "integrity": "sha512-ways3mu5B+CovHBLVL1Gh/rKPeWG4x6ZrXL+HJArqXyuUERRVxCi3XA2oP5YxXst6XzlQMCnhOtlEkd9kLGRgA==", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/network": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0", + "crypto-js": "4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/collaboration-client-ui/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs-pro/collaboration-client/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs-pro/collaboration/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs-pro/edit-history-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/edit-history-loader/-/edit-history-loader-0.7.0.tgz", + "integrity": "sha512-CgajXqGLyUQgtIqskbU7pjQXNDG9fA6oBTc866Sc1kxhd0WSTg2zLLHtZcWMMqnvkf25vrcsK+yKy5VFYec4NQ==", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs-pro/edit-history-viewer": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs-pro/sheets-pivot": "0.7.0", + "@univerjs-pro/sheets-sparkline": "0.7.0", + "@univerjs-pro/sheets-sparkline-ui": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/data-validation": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/drawing-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/network": "0.7.0", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-conditional-formatting": "0.7.0", + "@univerjs/sheets-conditional-formatting-ui": "0.7.0", + "@univerjs/sheets-data-validation": "0.7.0", + "@univerjs/sheets-data-validation-ui": "0.7.0", + "@univerjs/sheets-drawing": "0.7.0", + "@univerjs/sheets-drawing-ui": "0.7.0", + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-filter-ui": "0.7.0", + "@univerjs/sheets-formula": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-hyper-link": "0.7.0", + "@univerjs/sheets-hyper-link-ui": "0.7.0", + "@univerjs/sheets-numfmt": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/edit-history-viewer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/edit-history-viewer/-/edit-history-viewer-0.7.0.tgz", + "integrity": "sha512-I/hvFF2uqInd9mzmqgwOSG4RHHCxwZWOjMBFqyByKH7QigEmbR8sB8OnlrSJX28L3Xf/XtMN7FhnOqv6cMFFyg==", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs-pro/collaboration-client-ui": "0.7.0", + "@univerjs-pro/sheets-sparkline": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/data-validation": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/network": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-conditional-formatting": "0.7.0", + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/edit-history-viewer/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs-pro/engine-chart": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/engine-chart/-/engine-chart-0.7.0.tgz", + "integrity": "sha512-C2mZeH4S9oAAX5QOQ8Xk97xiiRZS7SOKylJhVUWnoXO1WmUW1sjgDHh7OJskcDxuuZLsOVFoNysuD6+GJqcy0g==", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-render": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/engine-formula": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/engine-formula/-/engine-formula-0.7.0.tgz", + "integrity": "sha512-wqUmavUWLPMyl8JxGwLJJwKvXzFE0dVVubvEStCYKOAes1bn/WZ9qeewXuuebtPo1HtpnpAXGXFPrU4wSjxaYg==", + "dependencies": { + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/engine-pivot": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/engine-pivot/-/engine-pivot-0.7.0.tgz", + "integrity": "sha512-Nh+kxremuLNZx1AyVZeQb+cRxgOYg/dZ8/IahSqWmux4K6Uc42va8J4A3qObumxAfff+LUFwHoeSBHGazMrthg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs-pro/exchange-client": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/exchange-client/-/exchange-client-0.7.0.tgz", + "integrity": "sha512-itVK98xGx+YL+QHC7gvdokwosvftOLvelHDd02DNnLAzVt5MGa5YSb13i0bnmCaGbQao4/DAhYsFw9AYLAvHSw==", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/network": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/ui": "0.7.0", + "pako": "^2.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/exchange-client/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs-pro/exchange-client/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@univerjs-pro/license": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/license/-/license-0.7.0.tgz", + "integrity": "sha512-jvVE0xUjeFQKp23lPoiRKFWs6Z5fBxXfP5IKmLjTzYyoBDcRJCLiE0US1Q39nVcJe5euMDTYVrP29Tpd4MmjGQ==", + "dependencies": { + "@noble/ed25519": "2.2.3", + "@noble/hashes": "1.7.1", + "@univerjs/core": "0.7.0", + "@univerjs/engine-render": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs-pro/print": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/print/-/print-0.7.0.tgz", + "integrity": "sha512-75SkXUw6DJ8P2tBQpDtKyfZihIHQzNHi8CmR5CWj1a+yZuKg9czGHVKAN3jY9W0wIO3ee3DuIacL6IKVQ9eGhg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs-pro/sheets-chart": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-chart/-/sheets-chart-0.7.0.tgz", + "integrity": "sha512-M1RqXGyXMNnEt0LFIq+z/pcYzy4/XzTtENfM1eKTGm3lvkAFYJ/3O6CVkgn3OWLC25MY6zB5+JvRBKVj+oKZlw==", + "dependencies": { + "@univerjs-pro/engine-chart": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-chart-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-chart-ui/-/sheets-chart-ui-0.7.0.tgz", + "integrity": "sha512-6UAl19RCLmCC459sFl8ao1NjK8sI61mHN9IqIHtGPwZ5iO48vWvSd+PWnvvAdS68dBYVuzn8n3STUfoX0WN+nQ==", + "dependencies": { + "@univerjs-pro/engine-chart": "0.7.0", + "@univerjs-pro/sheets-chart": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-drawing-ui": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0", + "echarts": "^5.6.0", + "echarts-wordcloud": "^2.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-exchange-client": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-exchange-client/-/sheets-exchange-client-0.7.0.tgz", + "integrity": "sha512-UnsMkTNlbab5mfjaKJL8vvtKMThsZoXYFTknWtzViGxnxFweOROJGocWHS41Wp59V+yZELMqznnaFNm/kdgveA==", + "dependencies": { + "@univerjs-pro/exchange-client": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs-pro/sheets-pivot": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-pivot/-/sheets-pivot-0.7.0.tgz", + "integrity": "sha512-O00aHMMXVVGcmsrCk/5CguxTRAQCKCoJeUia0PzV05ri+48n9s831I1Y5gURJL8JO0ogJhRpihOPIFHDXyNV0Q==", + "dependencies": { + "@univerjs-pro/engine-pivot": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-filter": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-pivot-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-pivot-ui/-/sheets-pivot-ui-0.7.0.tgz", + "integrity": "sha512-tjc6YOUc6EVPEJyLbYqhzeezckYK7frQrZGTpkhtXOgWs78XEs9MH3AG5RQavYxoyG2ur49WTyl7vPUMrZaPig==", + "dependencies": { + "@univerjs-pro/engine-pivot": "0.7.0", + "@univerjs-pro/sheets-pivot": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0", + "react-beautiful-dnd": "^13.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-print": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-print/-/sheets-print-0.7.0.tgz", + "integrity": "sha512-De57d4lNljhKFZ3sFcVv2HG8lnzyPeZXxWwf039NTCtYl5TYXR+13TSQpV9GcpyZXQJyMMu8cR6h56jFKOUtqA==", + "dependencies": { + "@univerjs-pro/license": "0.7.0", + "@univerjs-pro/print": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/network": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "optionalDependencies": { + "@univerjs-pro/collaboration-client": "0.7.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-sparkline": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-sparkline/-/sheets-sparkline-0.7.0.tgz", + "integrity": "sha512-cTe1HyzHw9oKbDDmNxD2osIujhvVIGqYYBx64WdMn3d3e0yllG34K7Ot4SemGyH27xP2JYZHXEFLc5JuR2chvA==", + "dependencies": { + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/sheets-sparkline-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/sheets-sparkline-ui/-/sheets-sparkline-ui-0.7.0.tgz", + "integrity": "sha512-EquqrdZUru/gib8w1vAr/OUQosoQZoQdwpe7GPBc/wE8W53MSlhu1zjB9ocW+BPUbFp4BgesSPe8v3liIIjbCA==", + "dependencies": { + "@univerjs-pro/sheets-sparkline": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-graphics": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/thread-comment-datasource": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs-pro/thread-comment-datasource/-/thread-comment-datasource-0.7.0.tgz", + "integrity": "sha512-6hhto7wr70FCIHfEmq2DkNym5bd882Y6unI4lr35qcy0cs0WX5Vo+nO2GXgQKNeeToMlV7ga6dkfjnVnGB8wvA==", + "dependencies": { + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs/core": "0.7.0", + "@univerjs/network": "0.7.0", + "@univerjs/protocol": "0.1.46-alpha.3", + "@univerjs/thread-comment": "0.7.0", + "@univerjs/thread-comment-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs-pro/thread-comment-datasource/node_modules/@univerjs/protocol": { + "version": "0.1.46-alpha.3", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46-alpha.3.tgz", + "integrity": "sha512-ZF9jr8LQCMthH22soj7aV88MCFMAAzizgFlg3+Cf5Dezb6DHIVTjqr93h+EAoXoqNMMs8G2PtpjwUhhKVkQd4g==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/core/-/core-0.7.0.tgz", + "integrity": "sha512-nji//vo098Jt+Da7ilmVhqfuzAzEPvfaqf117xYBqTg/NSWuLWcXfcvpfHSeIdnaCr+ui8s0WkmXkaqHGC47wg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/protocol": "0.1.46", + "@univerjs/themes": "0.7.0", + "@wendellhu/redi": "0.18.0", + "async-lock": "^1.4.1", + "dayjs": "^1.11.13", + "fast-diff": "1.3.0", + "kdbush": "^4.0.2", + "lodash-es": "^4.17.21", + "nanoid": "5.1.5", + "numeral": "^2.0.6", + "numfmt": "^2.5.2", + "ot-json1": "^1.0.2", + "rbush": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "@wendellhu/redi": "0.18.0", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@univerjs/data-validation": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/data-validation/-/data-validation-0.7.0.tgz", + "integrity": "sha512-07qt9wCvCY358L1lLQl7g0kwYCR5JKQwBrSTwO8UgQCaXBVICgC8OwdeKkoLsKJZKsMHbkh7LnWVP/EOImLsFQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/design": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/design/-/design-0.7.0.tgz", + "integrity": "sha512-ss03KECCo600qFfJEkjCQe6yqmljOwl/QqsCzeiW1g5MgkzdTkfTp40z9ipMawSrSVI2gpxFF9KMA7I3wRnGJw==", + "license": "Apache-2.0", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.13", + "@radix-ui/react-dropdown-menu": "^2.1.14", + "@radix-ui/react-popover": "^1.1.13", + "@radix-ui/react-separator": "^1.1.6", + "@radix-ui/react-slot": "^1.2.2", + "@radix-ui/react-tooltip": "^1.2.6", + "@rc-component/trigger": "^2.2.6", + "@univerjs/icons": "^0.3.24", + "@univerjs/themes": "0.7.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "dayjs": "^1.11.13", + "rc-dropdown": "^4.2.1", + "rc-menu": "^9.16.0", + "rc-picker": "^4.9.0", + "rc-virtual-list": "^3.16.1", + "react-grid-layout": "^1.5.1", + "react-transition-group": "^4.4.5", + "sonner": "^2.0.3", + "tailwind-merge": "^3.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/@univerjs/docs": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs/-/docs-0.7.0.tgz", + "integrity": "sha512-5aeasty5cJlWwTg7ce7lrPbmoicjSgxJGfzKBrknhlCI42eQruuEYBCWbYyhtm3A2UMxS2Ud5Ve2Wk2k3NNdnA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-render": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/docs-drawing": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-drawing/-/docs-drawing-0.7.0.tgz", + "integrity": "sha512-k5wHqJPVJ2xI0JDEEFkaSBRkatjdguoNhne+JtwP33PvI7O2+2v65cP8IVZC2qrKlG1IIVdCQt/DEmqxMSskNw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/drawing": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/docs-drawing-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-drawing-ui/-/docs-drawing-ui-0.7.0.tgz", + "integrity": "sha512-7JaerzL8Ne4rxny+Xs/GWYOYJe4+2o6Q8QZZlRHQlSk29zC6DwcfNgSFk+OpyXXDHErDzRjn0Wkv9rlwTWDAig==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-drawing": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/drawing-ui": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/docs-hyper-link": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-hyper-link/-/docs-hyper-link-0.7.0.tgz", + "integrity": "sha512-al1z6/F33/Cui39VNdePV2CTk9vULGL6RTIav8uVeEx9h+8wRCPeflwdDFq6rxLiUuVR8w9y6KEneZWfxQLkvg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/docs-hyper-link-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-hyper-link-ui/-/docs-hyper-link-ui-0.7.0.tgz", + "integrity": "sha512-Lsuv1Da2rmIuvbXQb+d0Q+kHRy11aVZp8lfXheETvzP/o2fai9nGe+DfCW4EpBptZCPvoND+ZvWngU9TWBwgBQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-hyper-link": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/docs-thread-comment-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-thread-comment-ui/-/docs-thread-comment-ui-0.7.0.tgz", + "integrity": "sha512-am1MwyQCM5LTHiq+ppMidICD0RsHpqvhge3cByLQt6BTy79qK6fRCtoXFeVA85ZuoDhaHabn+GRBpQZOXME5NQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/thread-comment": "0.7.0", + "@univerjs/thread-comment-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/docs-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/docs-ui/-/docs-ui-0.7.0.tgz", + "integrity": "sha512-GgETr0WxMmKoBhmXGjlMTGK/GRlfTdqjso1PgBqHcDuPQSQ4l73mQUpGrHnT5s3qJX2SgkvPxOy8AwuxUmi/Vg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/drawing": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/drawing/-/drawing-0.7.0.tgz", + "integrity": "sha512-wlz9EhXJLKtDPOK94gb+L5KGpV8hH3FGX6FC9jGqs1AegbhKFkdygsA7pENbFhvTcuw+At//k72g22j+5wM8AA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "ot-json1": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/drawing-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/drawing-ui/-/drawing-ui-0.7.0.tgz", + "integrity": "sha512-vPu4U+iRBsDqpmfGQAPrWYcHYSJeZNHQUylfOrHW8N1o+3tDKg2ALsBNvdA8Fz90RY4Pnbub8aZia5PqcYf46A==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/engine-formula": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/engine-formula/-/engine-formula-0.7.0.tgz", + "integrity": "sha512-nPq4uAVbSM1AQ5dVxA42OG5jf5AuQWlXLgt5/MyPqx+6i3ViOO9Y7nyTp56CSDA6tpzgAasrDvef8KLybB/+Sw==", + "license": "Apache-2.0", + "dependencies": { + "@flatten-js/interval-tree": "^1.1.3", + "@univerjs/core": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/rpc": "0.7.0", + "decimal.js": "^10.5.0", + "numfmt": "^2.5.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/engine-numfmt": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/engine-numfmt/-/engine-numfmt-0.7.0.tgz", + "integrity": "sha512-pecEkYjIoiIhn8tVyI0Wl/UsutnPM+hIjqcZ7kyjQMPgGhspjA9UUOEDjlwDUYWtmMtEKdE73kexM07a+KJIXA==", + "license": "Apache-2.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/engine-render": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/engine-render/-/engine-render-0.7.0.tgz", + "integrity": "sha512-qiXH3LnLRuoXXUzCfY5ouE9IC/FdJrScfKD3TGvmug+570x2WSibhkhwim6w5KvQTibH4Wm1yzvyb5paEDWWrQ==", + "license": "Apache-2.0", + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "@floating-ui/utils": "^0.2.9", + "@univerjs/core": "0.7.0", + "cjk-regex": "^3.3.0", + "franc-min": "^6.2.0", + "opentype.js": "^1.3.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/find-replace": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/find-replace/-/find-replace-0.7.0.tgz", + "integrity": "sha512-OLzni8UrJJkuepPc0j8Izjoj151Urrl42EOI6pxv/9SpyrowF15VrRTT07wl6GRb5+ssI3X/YCTxeSJo0EQmFg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/icons": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@univerjs/icons/-/icons-0.3.24.tgz", + "integrity": "sha512-ClGOKE0GS+hgvtP4XAI0ekKCmcrs4VZqZUVQddunuP7h+prCr01vMEuoLax9I/PrjOrSrl2u/xpvs9iGtXP1xw==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@univerjs/network": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/network/-/network-0.7.0.tgz", + "integrity": "sha512-xWxecNg+vNpJJ/agfSYvDTeW1ky8Cn0XHlQOcDiRqjfjKDAYzMRwHzCh2BDKRkYO9lNug6pnDC1ustkZxr6tug==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-docs-collaboration": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-docs-collaboration/-/preset-docs-collaboration-0.7.0.tgz", + "integrity": "sha512-tPJsxoVNrK7+gxEh7nyn2pu2ieJbKVFHUbt2Xvmwr05cArpdiLZFTrvxb1Tit2Qqv67JLSXT6BpKZm0R0X1Buw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs-pro/collaboration-client-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-docs-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-docs-core/-/preset-docs-core-0.7.0.tgz", + "integrity": "sha512-4GDfkry158nWU+dxkzSqBRoygfSl/FLz0SscCdk2a06sNAPYPmJarXjyfmoeEfnsDanF/eBCwvEIOkjfH+0AEQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/network": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-docs-drawing": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-docs-drawing/-/preset-docs-drawing-0.7.0.tgz", + "integrity": "sha512-JsZwXwpeqmZszWJAF0BnNnJsihZNm6v0XF4LDGo/rp1Bua2N38jmpZjuc5NgNw1I3eWfnGp5HfWdT+rM7Y2mkQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/docs-drawing": "0.7.0", + "@univerjs/docs-drawing-ui": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/drawing-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-docs-hyper-link": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-docs-hyper-link/-/preset-docs-hyper-link-0.7.0.tgz", + "integrity": "sha512-nfX+V3nO2SnkK/xYD/Kg/w9TFXlCP3hpsdyxWwUZGsRpFkmYT8kAitLvl15569xWB8sIg+VJUKN1HSClwrWxYw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/docs-hyper-link": "0.7.0", + "@univerjs/docs-hyper-link-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-docs-thread-comment": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-docs-thread-comment/-/preset-docs-thread-comment-0.7.0.tgz", + "integrity": "sha512-DEWtIhmZHXbTpLjBuVvo2fqVWywcWOjXydXqUOgMVxFt8Roins9wPhuHb/34BQVkbM0XEvtHcBbK1w5jW1Btzw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/docs-thread-comment-ui": "0.7.0", + "@univerjs/thread-comment-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-advanced": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-advanced/-/preset-sheets-advanced-0.7.0.tgz", + "integrity": "sha512-6Hd0qre4ZGe4XbEmdxsiQX2SG2I+WJTAPRIC6LxNDB/R1wuPqSIqcCtdKTpDkaOETN1BvuFHNdD9zohKDFxKpg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs-pro/engine-chart": "0.7.0", + "@univerjs-pro/engine-formula": "0.7.0", + "@univerjs-pro/exchange-client": "0.7.0", + "@univerjs-pro/license": "0.7.0", + "@univerjs-pro/sheets-chart": "0.7.0", + "@univerjs-pro/sheets-chart-ui": "0.7.0", + "@univerjs-pro/sheets-exchange-client": "0.7.0", + "@univerjs-pro/sheets-pivot": "0.7.0", + "@univerjs-pro/sheets-pivot-ui": "0.7.0", + "@univerjs-pro/sheets-print": "0.7.0", + "@univerjs-pro/sheets-sparkline": "0.7.0", + "@univerjs-pro/sheets-sparkline-ui": "0.7.0", + "@univerjs/sheets-graphics": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-collaboration": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-collaboration/-/preset-sheets-collaboration-0.7.0.tgz", + "integrity": "sha512-12o60JvV/+eIhspcuFzcdSZwA3TQ9Dji4rLSIqwYq74OAlDBY51eJhmelQuW0PbK0GjfCzVXVKUSUSWaLG4lDA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs-pro/collaboration": "0.7.0", + "@univerjs-pro/collaboration-client": "0.7.0", + "@univerjs-pro/collaboration-client-ui": "0.7.0", + "@univerjs-pro/edit-history-loader": "0.7.0", + "@univerjs-pro/edit-history-viewer": "0.7.0", + "@univerjs-pro/thread-comment-datasource": "0.7.0", + "@univerjs/preset-sheets-advanced": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-conditional-formatting": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-conditional-formatting/-/preset-sheets-conditional-formatting-0.7.0.tgz", + "integrity": "sha512-N1sn19/4dRUdNw/TRA2z6YaHFtN/T6BAqVJv1yT4m/C/XEyWfn6dwZOXcK25QqvQD7pPJ1cyYsQktDi2Fj7rwQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-conditional-formatting": "0.7.0", + "@univerjs/sheets-conditional-formatting-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-core/-/preset-sheets-core-0.7.0.tgz", + "integrity": "sha512-CbZ6uIvz8Uw1INuflOg4nD3e08nvr8d4XUoaRtUg9+EJcep+kguGfnKYZejwu+9Cmt9+8VgiZC63seIQ1q9E+Q==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/network": "0.7.0", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-numfmt": "0.7.0", + "@univerjs/sheets-numfmt-ui": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-data-validation": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-data-validation/-/preset-sheets-data-validation-0.7.0.tgz", + "integrity": "sha512-x0Uiyspc2oL5rL0kgXkVZNY7xfNfbBnLop9SqA2q6WPfLCNjbCY9bXf+5LaE2RvfsCKh/XrhrutnXF/2Fa/T8g==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/data-validation": "0.7.0", + "@univerjs/sheets-data-validation": "0.7.0", + "@univerjs/sheets-data-validation-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-drawing": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-drawing/-/preset-sheets-drawing-0.7.0.tgz", + "integrity": "sha512-wMSPVspgxKHSSS+VkYzwC9GPMFl8JgYd5qncnpApRVVGDXbODK5RRM87Z7OsUYf0BkYGXK8UWbrHFsUaLOcOtQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/docs-drawing": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/drawing-ui": "0.7.0", + "@univerjs/sheets-drawing": "0.7.0", + "@univerjs/sheets-drawing-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-filter": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-filter/-/preset-sheets-filter-0.7.0.tgz", + "integrity": "sha512-vUksvZ5P7FJqyzUy+uaJyzE5m7ZqHbMSaPCe7omgYlZlrIx6RyYnGPtA0FWCuHVJRcNeuEkeDGKH4NsFBFdNng==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-filter-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-find-replace": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-find-replace/-/preset-sheets-find-replace-0.7.0.tgz", + "integrity": "sha512-qfTB0aK/U5T38ngKZn+3YT8W+PtBfYt2+MZpHZNhyF3P5xg0gjkKW1U5tH7eqDZb7auFajgR/FBDIyEz4Scj2g==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/find-replace": "0.7.0", + "@univerjs/sheets-find-replace": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-hyper-link": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-hyper-link/-/preset-sheets-hyper-link-0.7.0.tgz", + "integrity": "sha512-pWxIJsjeVLsyPK4FKlIsTbBNzn79EkRdKHqQpEjx4IMG8AkCZ1Fr3t8eWu7o6vX7TvK72OTRUpLDRolKvAO+jA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-hyper-link": "0.7.0", + "@univerjs/sheets-hyper-link-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-node-core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-node-core/-/preset-sheets-node-core-0.7.0.tgz", + "integrity": "sha512-JBdtdnJ2Wyuk7BzTASera326/ybHSKRGT3OIBUsHQDnZyTR5248STrlN1Pi3SxEalAUkIjY0Nbyl9J5kvIPH4g==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/docs": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/rpc-node": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-data-validation": "0.7.0", + "@univerjs/sheets-drawing": "0.7.0", + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-formula": "0.7.0", + "@univerjs/sheets-hyper-link": "0.7.0", + "@univerjs/sheets-numfmt": "0.7.0", + "@univerjs/sheets-sort": "0.7.0", + "@univerjs/sheets-thread-comment": "0.7.0", + "@univerjs/thread-comment": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-note": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-note/-/preset-sheets-note-0.7.0.tgz", + "integrity": "sha512-VHAyFIvy48SBF1OPtfwp55+eURa2pDtVIXorMZo8ObCFjb8D/LEpPMwbLnwByB+seqUzaXBxJI/5CE8ri3N4qw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-note": "0.7.0", + "@univerjs/sheets-note-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-sort": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-sort/-/preset-sheets-sort-0.7.0.tgz", + "integrity": "sha512-8ZWLEsjeuKTzj+ytiSDZ7Qemhi3aY2Xge1ePznT6091yFJwU0j5owaqX7brVpiKgEC18WTs1eA7+3jLc5k26vQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-sort": "0.7.0", + "@univerjs/sheets-sort-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-table": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-table/-/preset-sheets-table-0.7.0.tgz", + "integrity": "sha512-6HtwrdnQwWI6eq0wrPxdsU5I4tK4CYV+ybw3X/wR6ay5NcsG97yoABM9q7uwF66yL+X2OcE9PU+SJYuek5EtJw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-table": "0.7.0", + "@univerjs/sheets-table-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/preset-sheets-thread-comment": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/preset-sheets-thread-comment/-/preset-sheets-thread-comment-0.7.0.tgz", + "integrity": "sha512-oMYKPPOH1ncQRalOyKG+spZXZEOXDff1Kmoze0y7qrPObbaiD0o+XXbRtDhaE60DjhbTvbwMp4g/JgudcmaAxw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/sheets-thread-comment": "0.7.0", + "@univerjs/sheets-thread-comment-ui": "0.7.0", + "@univerjs/thread-comment": "0.7.0", + "@univerjs/thread-comment-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/presets": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/presets/-/presets-0.7.0.tgz", + "integrity": "sha512-zU5IitszyiE6h0wdjxfhWkzk6ZtyR4O7yTCAJf95exQd8P6OMp8QhP6EJG2ovLc/9D5tDW/v7ybGoEM9BI2HbA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/preset-docs-collaboration": "0.7.0", + "@univerjs/preset-docs-core": "0.7.0", + "@univerjs/preset-docs-drawing": "0.7.0", + "@univerjs/preset-docs-hyper-link": "0.7.0", + "@univerjs/preset-docs-thread-comment": "0.7.0", + "@univerjs/preset-sheets-advanced": "0.7.0", + "@univerjs/preset-sheets-collaboration": "0.7.0", + "@univerjs/preset-sheets-conditional-formatting": "0.7.0", + "@univerjs/preset-sheets-core": "0.7.0", + "@univerjs/preset-sheets-data-validation": "0.7.0", + "@univerjs/preset-sheets-drawing": "0.7.0", + "@univerjs/preset-sheets-filter": "0.7.0", + "@univerjs/preset-sheets-find-replace": "0.7.0", + "@univerjs/preset-sheets-hyper-link": "0.7.0", + "@univerjs/preset-sheets-node-core": "0.7.0", + "@univerjs/preset-sheets-note": "0.7.0", + "@univerjs/preset-sheets-sort": "0.7.0", + "@univerjs/preset-sheets-table": "0.7.0", + "@univerjs/preset-sheets-thread-comment": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/protocol": { + "version": "0.1.46", + "resolved": "https://registry.npmjs.org/@univerjs/protocol/-/protocol-0.1.46.tgz", + "integrity": "sha512-nTkNocMt1XItBierjz7J4bz0Ye+SlUz7SDOyfqJB4FPpvDnBVGQH9NXbZbTrKrvskUzOayb7hGOkKNZyHaSQOw==", + "engines": { + "node": ">=18.0.0", + "pnpm": ">=10.0.0" + }, + "peerDependencies": { + "@grpc/grpc-js": ">=1", + "rxjs": ">=7.8" + } + }, + "node_modules/@univerjs/rpc": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/rpc/-/rpc-0.7.0.tgz", + "integrity": "sha512-IT4qZQdsiKy9Lx71UPm1JCUsIowZjZOd6zAT8H92FrJ/6F8ivMGi3R0f+Q+L5QOEpCyPXJtLQCFs+8byNzZr+w==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/rpc-node": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/rpc-node/-/rpc-node-0.7.0.tgz", + "integrity": "sha512-T3ZOVAj94AxNFpivSWS6Xk3U2rlzLYSSGmL8NV+i4/yDzMpKFOagA67up8Yzerj7duuXFneSAZ23VOWEhgptpQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/rpc": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets/-/sheets-0.7.0.tgz", + "integrity": "sha512-bhlU+MdCKHO5/yMX6vcI6WgkfBkZAKWj9LsGhftynwutFFeiWAJN4AMWehq9ynp3Z87wFEPl+KXDu4he01FhaA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/protocol": "0.1.46", + "@univerjs/rpc": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-conditional-formatting": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-conditional-formatting/-/sheets-conditional-formatting-0.7.0.tgz", + "integrity": "sha512-zD/YmpqKjMoj4OreskpkKBntVXENeVWExHrAHGUfzoIu3wvbKK1K2TkAQ2ku84/WEMITNttRyJPnVpe0lg2jaQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-conditional-formatting-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-conditional-formatting-ui/-/sheets-conditional-formatting-ui-0.7.0.tgz", + "integrity": "sha512-UppeQGOFh3azyDPi1kEUWVLw5tR/BRZ8YPGzlR00drP0Ds5vhhSchW1wVX7AJQSKfSQZ3eG11eurPoJyXF9pZg==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-conditional-formatting": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-data-validation": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-data-validation/-/sheets-data-validation-0.7.0.tgz", + "integrity": "sha512-H914aYqIUMI/RsiLHXD8HSzUtuFJ3mW+KnUkrHtnK+HCEONA3yLWEEPi2jbmC3HPksvbi41edhU76ny8L/8nfQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/data-validation": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/protocol": "0.1.46", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-data-validation-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-data-validation-ui/-/sheets-data-validation-ui-0.7.0.tgz", + "integrity": "sha512-JzyrYi+17E0lszi39mgvkLCEtgkWpojIzZCUQ2sLUZFVQ90zYyXU4Hc4Mh1wvc4mobCJdCr3ER81G7tq35cb9g==", + "license": "Apache-2.0", + "dependencies": { + "@flatten-js/interval-tree": "^1.1.3", + "@univerjs/core": "0.7.0", + "@univerjs/data-validation": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-data-validation": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-numfmt": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-drawing": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-drawing/-/sheets-drawing-0.7.0.tgz", + "integrity": "sha512-f4Ghrjz9nUTI1tL8CnU01ejzpJF8s+DwJEJ4YxLfOowKFD57co6isx5znd9lw6wseBq+CFMUPKcQ/+hmgs1I6A==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/drawing": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/sheets-drawing-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-drawing-ui/-/sheets-drawing-ui-0.7.0.tgz", + "integrity": "sha512-n7DulUc6ISM6WxRewB1QTCAGb1leuDiWQco/PADX28SOO5a0fwlEmuqJSikpkxYsMNDryS19IPv1qXVB+NWsDw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs-drawing": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/drawing": "0.7.0", + "@univerjs/drawing-ui": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-drawing": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-filter": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-filter/-/sheets-filter-0.7.0.tgz", + "integrity": "sha512-Dad3wp1n1IggqLAf0jjBWizUrt7WhrKQLC/nkC0F7hmWqicbjHooHZAZmuLZSBQfI4IxsnS4oDkZKNOp8z1NLw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-filter-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-filter-ui/-/sheets-filter-ui-0.7.0.tgz", + "integrity": "sha512-1fevdLBwa9PrjnDprvkGeEQs/WUTiS4plPMTvzbQ16Dpx1utPw8dCkHHp0RW3oxPesyFf/1/QNpK1BaV7finpA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-filter": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-find-replace": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-find-replace/-/sheets-find-replace-0.7.0.tgz", + "integrity": "sha512-P8TDNtuit7uZjl7fO5BwT2jd4UyuvKYXifTPZpOWo34vXG8p7Tdo5vjJQO1Apq4md21hfdh634enH8m5rS9k6A==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/find-replace": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-formula": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-formula/-/sheets-formula-0.7.0.tgz", + "integrity": "sha512-Df2Pps3dKB85siJaYKYMlgWtePXl4SmKQyZ4uGIbt3DDyYn/TjZFxeB2bIUn5q5LZwj54qU8j55OHU/9kCH0IQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/rpc": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-formula-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-formula-ui/-/sheets-formula-ui-0.7.0.tgz", + "integrity": "sha512-2xzaof3H8ZXq6ABR8uOh1KvynmrqKxNKKZpMUnZQCl48z+Ewy74Y2QKxOTmemOpqQ1/g+U7lRHJru1NRgQKsyQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-graphics": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-graphics/-/sheets-graphics-0.7.0.tgz", + "integrity": "sha512-JgIFVePDxpSjfyz9EjcO2Wx7zur8/Sper22xCeLZqpz6Ztx1qDXbDO8efHgIdkC0DPfWfafJLUDYhdu8KZgs8A==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/sheets-ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/sheets-hyper-link": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-hyper-link/-/sheets-hyper-link-0.7.0.tgz", + "integrity": "sha512-hPUU0hRvz0riG06h9Hw2UPeyi3IVqEnRb0asNljVruFFMrEzpK/V1z+c/4zXU+WjCnZEkvRLSDfVRBmFAfllaA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-hyper-link-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-hyper-link-ui/-/sheets-hyper-link-ui-0.7.0.tgz", + "integrity": "sha512-nK1sf35CcZPazeihGeaLDDAo9227rWQ52n0ZJb4fWcaAJlTxfYlgZ06OFIa/vN88GAhsYrCy+4PPObVWz8VCMw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-data-validation": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-hyper-link": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-note": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-note/-/sheets-note-0.7.0.tgz", + "integrity": "sha512-DzRVpvA0qatrclzrZGMCiSIz1zeeRIFU0o0dyrUfNKPqmDbXmy3tBYzI1PwOc6sO+Oe5uIJ49kJi52caSiOSSw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-note-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-note-ui/-/sheets-note-ui-0.7.0.tgz", + "integrity": "sha512-RXkEAVslYafJj4pboB+v/w6nMm3urLZ2Sj7BjThNPtxZpswiE9/VO8OahStG9me0PD6cd/8Igsw4SMovEffHFw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-note": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0", + "rxjs": "^7.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-numfmt": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-numfmt/-/sheets-numfmt-0.7.0.tgz", + "integrity": "sha512-/nGi2JrtNOC3km0/LTD3/vMkNh5piigrMER7C8Q79fLKdSTIZsDi72V9dxbadhFMyo51Wg2UX6+gm+YRjpgu0A==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-numfmt-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-numfmt-ui/-/sheets-numfmt-ui-0.7.0.tgz", + "integrity": "sha512-Ja8SAt9EjCEzBncQK0CE2zBC5RCMBaUemuh/JSGf2hWk+dTbfmSVgSB6nwnXsoXDj4EwU/3GZz332Iuw2s6QqA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-numfmt": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-sort": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-sort/-/sheets-sort-0.7.0.tgz", + "integrity": "sha512-BEow7dsCEVkmzsRvY6+BFDEOQ6GJv0KJiIF8H665PcoJi2ewy94eWMQRZGDtRAsRrCa9EMCM6zLfFg0jQiVDVw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/sheets-sort-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-sort-ui/-/sheets-sort-ui-0.7.0.tgz", + "integrity": "sha512-6VNxM+1+5oHxbIdxLMVKmQ5CF0lDKrAcq4Bt5Ct+aC4BwiSjHxjrwN/ni1ZPktoXJyEdAGVii6c2VHgAqIzaSQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-sort": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-table": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-table/-/sheets-table-0.7.0.tgz", + "integrity": "sha512-yd5YW964LuFAxBTiH3DH+o25FTbsOMMSm8lI3MAUpy49IAUlnJrH8oyYWCVkPCClXQRCTZ3bZSJhDCyZhbcnwA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/sheets": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-table-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-table-ui/-/sheets-table-ui-0.7.0.tgz", + "integrity": "sha512-Lzp0e+O4cOi3SWrLxoJeJIYE6sUShJnRRl3EQtRKautiysfmYpZlExwWxj7htytGhBVaduOOp3QOX03ndqK7Mw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-formula-ui": "0.7.0", + "@univerjs/sheets-sort": "0.7.0", + "@univerjs/sheets-table": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-thread-comment": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-thread-comment/-/sheets-thread-comment-0.7.0.tgz", + "integrity": "sha512-xlDOkIsggmqF423BlggIIZpBVQ7f32C6QMi4BNXkFRVHgdpUp8iQf3ieVUTMnEsP9RbUWPmCOEg7vraXVDCcGw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/sheets": "0.7.0", + "@univerjs/thread-comment": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-thread-comment-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-thread-comment-ui/-/sheets-thread-comment-ui-0.7.0.tgz", + "integrity": "sha512-ksrXs7BhbSIIuTZ0rvvTC6WxAxaSGIdZiqpWhL310mjlVxF4evsHLxogKlb8vWDmLM4mIkZzDuwrCMmvaODlwA==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/sheets": "0.7.0", + "@univerjs/sheets-thread-comment": "0.7.0", + "@univerjs/sheets-ui": "0.7.0", + "@univerjs/thread-comment": "0.7.0", + "@univerjs/thread-comment-ui": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/sheets-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/sheets-ui/-/sheets-ui-0.7.0.tgz", + "integrity": "sha512-Oj5xbFF9nsZVI1RbfVhZS6WZ6pO/BriGcKXGQjqobuZR5lUMZaUtO6eaUql0cqI2/+MMgBNCHOUqMUDG6afZIw==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/engine-formula": "0.7.0", + "@univerjs/engine-numfmt": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/protocol": "0.1.46", + "@univerjs/sheets": "0.7.0", + "@univerjs/telemetry": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/telemetry": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/telemetry/-/telemetry-0.7.0.tgz", + "integrity": "sha512-KOBHrWm3xZBh0eOSL589zENHTUw+l4TakbyxMIkDCBTE7+6jsxd6sl9+LgSdK69cOAY3Ch9CxCD9f+EMRkBSVg==", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/themes": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/themes/-/themes-0.7.0.tgz", + "integrity": "sha512-iVO0VL0rFPfbKlcDKzO6QwpzcDOT0E52xrR9HWOjh0wozZQdgX7mex4VXRTEHs8hJocyAIJL45JLw1H135AziQ==", + "license": "Apache-2.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + } + }, + "node_modules/@univerjs/thread-comment": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/thread-comment/-/thread-comment-0.7.0.tgz", + "integrity": "sha512-rYS4GclqZtnun591M0bDn1HaSwt7/wb4g7d0kznJtiEoEA58ea7UWLFAsvAPz+fpVgfOEFsNf7u09yTLmzFTLQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/thread-comment-ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/thread-comment-ui/-/thread-comment-ui-0.7.0.tgz", + "integrity": "sha512-+RjXm2FdlTmY8axrtWVOqDCbl95AQ4gNxWrbisVhCGvLJPvhe0FRUyi4ZleUHCpYKMLsVsIrgTekVwr5T/hoPQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/docs-ui": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@univerjs/thread-comment": "0.7.0", + "@univerjs/ui": "0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@univerjs/ui": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@univerjs/ui/-/ui-0.7.0.tgz", + "integrity": "sha512-n+q4ecPdMmkBAYRT39bbwXbrDGbRnSOSVkqey6RhPHXtULCdCepxMWkXX5UFpvw5f8xDGUHNYpjuvOqg2RmsoQ==", + "license": "Apache-2.0", + "dependencies": { + "@univerjs/core": "0.7.0", + "@univerjs/design": "0.7.0", + "@univerjs/engine-render": "0.7.0", + "@univerjs/icons": "^0.3.24", + "@wendellhu/redi": "0.18.0", + "localforage": "^1.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "optionalDependencies": { + "vue": ">=3.0.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "rxjs": ">=7.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", + "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.10", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz", + "integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.14", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz", + "integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/compiler-core": "3.5.14", + "@vue/shared": "3.5.14" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz", + "integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.14", + "@vue/compiler-dom": "3.5.14", + "@vue/compiler-ssr": "3.5.14", + "@vue/shared": "3.5.14", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz", + "integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/compiler-dom": "3.5.14", + "@vue/shared": "3.5.14" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz", + "integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/shared": "3.5.14" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz", + "integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/reactivity": "3.5.14", + "@vue/shared": "3.5.14" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz", + "integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/reactivity": "3.5.14", + "@vue/runtime-core": "3.5.14", + "@vue/shared": "3.5.14", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz", + "integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.14", + "@vue/shared": "3.5.14" + }, + "peerDependencies": { + "vue": "3.5.14" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", + "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@wendellhu/redi": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@wendellhu/redi/-/redi-0.18.0.tgz", + "integrity": "sha512-xYpa1d2BPZ/NO9URpS1h+l310mKYaMUQbFMZ4YYguq6M0fLWGR7ZYclnQEE4zpfl8ys5wprx5wro06Sfqnkb/A==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cjk-regex": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cjk-regex/-/cjk-regex-3.3.0.tgz", + "integrity": "sha512-o9QeA4DIiljRGO3mXzkQXBttzE6XRGZG99V9F8uqrdqKo5RHTFe8w+pk1aOMB/wxQ7qQ8J7WoTagabTabPgl8A==", + "license": "MIT", + "dependencies": { + "regexp-util": "^2.0.1", + "unicode-regex": "^4.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "license": "MIT" + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/echarts-wordcloud": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/echarts-wordcloud/-/echarts-wordcloud-2.1.0.tgz", + "integrity": "sha512-Kt1JmbcROgb+3IMI48KZECK2AP5lG6bSsOEs+AsuwaWJxQom31RTNd6NFYI01E/YaI1PFZeueaupjlmzSQasjQ==", + "license": "ISC", + "peerDependencies": { + "echarts": "^5.0.1" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.155", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", + "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "peer": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.26.0", + "@eslint/plugin-kit": "^0.2.8", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "zod": "^3.24.2" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT", + "optional": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.2.tgz", + "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatpickr": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz", + "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==", + "license": "MIT" + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/franc-min": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/franc-min/-/franc-min-6.2.0.tgz", + "integrity": "sha512-1uDIEUSlUZgvJa2AKYR/dmJC66v/PvGQ9mWfI9nOr/kPpMFyvswK0gPXOwpYJYiYD008PpHLkGfG58SPjQJFxw==", + "license": "MIT", + "dependencies": { + "trigram-utils": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", + "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luckysheet": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/luckysheet/-/luckysheet-2.1.13.tgz", + "integrity": "sha512-ZotItRKh3fxEtYz0GrZxkf97jeQSGsJpFNAu1I0NMDQ6rVrHAWKeggFak5pClGQ3DP62Gi8kd+8rzOpyY/UNZw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "dayjs": "^1.9.6", + "flatpickr": "^4.6.6", + "jquery": "^2.2.4", + "numeral": "^2.0.6", + "pako": "^1.0.11" + } + }, + "node_modules/luckysheet/node_modules/jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha512-lBHj60ezci2u1v2FqnZIraShGgEXq35qCzMv4lITyHGppTnA13rwR0MgwyNJh9TnDs3aXUvd1xjAotfraMHX/Q==", + "deprecated": "This version is deprecated. Please upgrade to the latest version or find support at https://www.herodevs.com/support/jquery-nes.", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/n-gram": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/n-gram/-/n-gram-2.0.2.tgz", + "integrity": "sha512-S24aGsn+HLBxUGVAUFOwGpKs7LBcG4RudKU//eWzt/mQ97/NMKQxDWHyHx63UNWk/OOdihgmzoETn1tf5nQDzQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/numfmt": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/numfmt/-/numfmt-2.5.2.tgz", + "integrity": "sha512-VXrB2bpU9Xa0oCHq8IsqE2CcUx5OLupLC3oryFT4DB9e/xe+OnUzBndhXfNHUzxFE4DYI3Sx4OtzS1Sdaf7tEw==", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opentype.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-1.3.4.tgz", + "integrity": "sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==", + "license": "MIT", + "dependencies": { + "string.prototype.codepointat": "^0.2.1", + "tiny-inflate": "^1.0.3" + }, + "bin": { + "ot": "bin/ot" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ot-json1": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ot-json1/-/ot-json1-1.0.2.tgz", + "integrity": "sha512-IhxkqVWQqlkWULoi/Q2AdzKk0N5vQRbUMUwubFXFCPcY4TsOZjmp2YKrk0/z1TeiECPadWEK060sdFdQ3Grokg==", + "license": "ISC", + "dependencies": { + "ot-text-unicode": "4" + } + }, + "node_modules/ot-text-unicode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ot-text-unicode/-/ot-text-unicode-4.0.0.tgz", + "integrity": "sha512-W7ZLU8QXesY2wagYFv47zErXud3E93FGImmSGJsQnBzE+idcPPyo2u2KMilIrTwBh4pbCizy71qRjmmV6aDhcQ==", + "license": "ISC", + "dependencies": { + "unicount": "1.1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rbush": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-4.0.1.tgz", + "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==", + "license": "MIT", + "dependencies": { + "quickselect": "^3.0.0" + } + }, + "node_modules/rc-dropdown": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.1.tgz", + "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-util": "^5.44.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-menu": { + "version": "9.16.1", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.16.1.tgz", + "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.0.0", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.3.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.5.tgz", + "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.44.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.4.1.tgz", + "integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.11.3.tgz", + "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.1", + "rc-overflow": "^1.3.2", + "rc-resize-observer": "^1.4.0", + "rc-util": "^5.43.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/rc-resize-observer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz", + "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.44.1", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.44.4", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-virtual-list": { + "version": "3.18.6", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.18.6.tgz", + "integrity": "sha512-TQ5SsutL3McvWmmxqQtMIbfeoE3dGjJrRSfKekgby7WQMpPIFvv4ghytp5Z0s3D8Nik9i9YNOCqHBfk86AwgAA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-beautiful-dnd": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", + "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", + "deprecated": "react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.9.2", + "css-box-model": "^1.2.0", + "memoize-one": "^5.1.1", + "raf-schd": "^4.0.2", + "react-redux": "^7.2.0", + "redux": "^4.0.4", + "use-memo-one": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.5 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-draggable": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.6.tgz", + "integrity": "sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==", + "license": "MIT", + "dependencies": { + "clsx": "^1.1.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, + "node_modules/react-draggable/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react-flow-renderer": { + "version": "10.3.17", + "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-10.3.17.tgz", + "integrity": "sha512-bywiqVErlh5kCDqw3x0an5Ur3mT9j9CwJsDwmhmz4i1IgYM1a0SPqqEhClvjX+s5pU4nHjmVaGXWK96pwsiGcQ==", + "deprecated": "react-flow-renderer has been renamed to reactflow, please use this package from now on https://reactflow.dev/docs/guides/migrate-to-v11/", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@types/d3": "^7.4.0", + "@types/resize-observer-browser": "^0.1.7", + "classcat": "^5.0.3", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^3.7.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "16 || 17 || 18", + "react-dom": "16 || 17 || 18" + } + }, + "node_modules/react-grid-layout": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/react-grid-layout/-/react-grid-layout-1.5.1.tgz", + "integrity": "sha512-4Fr+kKMk0+m1HL/BWfHxi/lRuaOmDNNKQDcu7m12+NEYcen20wIuZFo789u3qWCyvUsNUxCiyf0eKq4WiJSNYw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "fast-equals": "^4.0.3", + "prop-types": "^15.8.1", + "react-draggable": "^4.4.5", + "react-resizable": "^3.0.5", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, + "node_modules/react-grid-layout/node_modules/fast-equals": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", + "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", + "license": "MIT" + }, + "node_modules/react-icons": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-redux": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.0.tgz", + "integrity": "sha512-sGsQtcjMqdQyijAHytfGEELB8FufGbfXIsvUTe+NLx1GDRJCXtCFLBLUI1eyZCKXXvbEU2C6gai0PZKoIE9Vbg==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "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 + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-resizable": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/react-resizable/-/react-resizable-3.0.5.tgz", + "integrity": "sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==", + "license": "MIT", + "dependencies": { + "prop-types": "15.x", + "react-draggable": "^4.0.3" + }, + "peerDependencies": { + "react": ">= 16.3" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "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 + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/reactflow": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz", + "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==", + "license": "MIT", + "dependencies": { + "@reactflow/background": "11.3.14", + "@reactflow/controls": "11.2.14", + "@reactflow/core": "11.11.4", + "@reactflow/minimap": "11.7.14", + "@reactflow/node-resizer": "2.2.14", + "@reactflow/node-toolbar": "1.3.14" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/recharts": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.3.tgz", + "integrity": "sha512-EdOPzTwcFSuqtvkDoaM5ws/Km1+WTAO2eizL7rqiG0V2UVhTnz0m7J2i0CjVPUCdEkZImaWvXLbZDS2H5t6GFQ==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/regexp-util": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/regexp-util/-/regexp-util-2.0.3.tgz", + "integrity": "sha512-GP6h9OgJmhAZpb3dbNbXTfRWVnGcoMhWRZv/HxgM4/qCVqs1P9ukQdYxaUhjWBSAs9oJ/uPXUUvGT1VMe0Bs0Q==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/rollup": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sonner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.3.tgz", + "integrity": "sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", + "license": "MIT" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-merge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.0.tgz", + "integrity": "sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/trigram-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/trigram-utils/-/trigram-utils-2.0.1.tgz", + "integrity": "sha512-nfWIXHEaB+HdyslAfMxSqWKDdmqY9I32jS7GnqpdWQnLH89r6A5sdk3fDVYqGAZ0CrT8ovAFSAo6HRiWcWNIGQ==", + "license": "MIT", + "dependencies": { + "collapse-white-space": "^2.0.0", + "n-gram": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT", + "peer": true + }, + "node_modules/unicode-regex": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unicode-regex/-/unicode-regex-4.1.2.tgz", + "integrity": "sha512-30Y3tQ8OUxceQjsEJHzNh20lLYZX6ZwQyUOHBUdN1UPKQWH3AvH20aUADWa1gEz2lQPTSQ/l2ZqdM4FjFNMJsQ==", + "license": "MIT", + "dependencies": { + "regexp-util": "^2.0.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/unicount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicount/-/unicount-1.1.0.tgz", + "integrity": "sha512-RlwWt1ywVW4WErPGAVHw/rIuJ2+MxvTME0siJ6lk9zBhpDfExDbspe6SRlWT3qU6AucNjotPl9qAJRVjP7guCQ==", + "license": "ISC" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "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 + } + } + }, + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "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 + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.14.tgz", + "integrity": "sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==", + "license": "MIT", + "optional": true, + "dependencies": { + "@vue/compiler-dom": "3.5.14", + "@vue/compiler-sfc": "3.5.14", + "@vue/runtime-dom": "3.5.14", + "@vue/server-renderer": "3.5.14", + "@vue/shared": "3.5.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/zustand": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", + "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", + "license": "MIT", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bab31ef --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "qbx", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "npm run copy-assets && vite", + "build": "npm run copy-assets && vite build", + "lint": "eslint .", + "preview": "vite preview", + "copy-luckysheet-assets": "if not exist public\\luckysheet\\css mkdir public\\luckysheet\\css && if not exist public\\luckysheet\\plugins\\css mkdir public\\luckysheet\\plugins\\css && copy node_modules\\luckysheet\\dist\\css\\luckysheet.css public\\luckysheet\\css\\ && copy node_modules\\luckysheet\\dist\\plugins\\css\\pluginsCss.css public\\luckysheet\\plugins\\css\\", + "copy-univerjs-assets": "if not exist public\\univerjs\\css mkdir public\\univerjs\\css && copy node_modules\\@univerjs\\presets\\lib\\styles\\preset-sheets-core.css public\\univerjs\\css\\ && copy node_modules\\@univerjs-pro\\sheets-pivot-ui\\lib\\index.css public\\univerjs\\css\\sheets-pivot-ui.css", + "copy-assets": "npm run copy-luckysheet-assets && npm run copy-univerjs-assets" + }, + "dependencies": { + "@univerjs-pro/engine-pivot": "^0.7.0", + "@univerjs-pro/sheets-pivot": "^0.7.0", + "@univerjs-pro/sheets-pivot-ui": "^0.7.0", + "@univerjs/core": "^0.7.0", + "@univerjs/preset-sheets-core": "^0.7.0", + "@univerjs/presets": "^0.7.0", + "d3": "^7.9.0", + "luckysheet": "^2.1.13", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-flow-renderer": "^10.3.17", + "react-icons": "^5.5.0", + "reactflow": "^11.11.4", + "recharts": "^2.15.3" + }, + "devDependencies": { + "@eslint/js": "^9.25.0", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.2", + "@vitejs/plugin-react": "^4.4.1", + "eslint": "^9.25.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^16.0.0", + "vite": "^6.3.5" + } +} diff --git a/public/luckysheet/css/luckysheet.css b/public/luckysheet/css/luckysheet.css new file mode 100644 index 0000000..33349a9 --- /dev/null +++ b/public/luckysheet/css/luckysheet.css @@ -0,0 +1 @@ +.luckysheet-icon-img-container.iconfont,.luckysheet-submenu-arrow .iconfont{font-size:24px}.luckysheet-toolbar-combo-button .luckysheet-iconfont-xiayige,.luckysheet-toolbar-menu-button .luckysheet-iconfont-xiayige{font-size:12px;top:-8px;left:-3px}.luckysheet-toolbar-select .luckysheet-iconfont-xiayige{margin-right:4px}#luckysheet-icon-morebtn{position:absolute;right:15px;transform:translate(0,-50%);top:50%}.toolbar .luckysheet-icon-border-all,.toolbar .luckysheet-icon-cell-color,.toolbar .luckysheet-icon-text-color,.toolbar .luckysheet-icon-textwrap,.toolbar .luckysheet-icon-valign{margin-right:-3px}.toolbar .luckysheet-freezen-btn-horizontal,.toolbar .luckysheet-icon-align,.toolbar .luckysheet-icon-function,.toolbar .luckysheet-icon-merge-button,.toolbar .luckysheet-icon-rotation{margin-right:-4px}#luckysheet-icon-morebtn{padding:2px 13px 0 5px}#luckysheet-icon-morebtn .iconfont{top:-9px}.lucky-button-custom{cursor:pointer;display:flex;align-items:center;justify-content:center}.lucky-button-custom:hover{background-color:#e1e4e8}#luckysheet-icon-morebtn-div{border:1px solid #d4d4d4}.luckysheet-sheets-add .iconfont,.luckysheet-sheets-m .iconfont{font-size:21px}#luckysheet-sheets-leftscroll,#luckysheet-sheets-rightscroll{padding:6px 10px}input.luckysheet-mousedown-cancel{border:1px solid #a1a1a1}input.luckysheet-mousedown-cancel:focus{border:1px solid #0188fb;outline:0}.luckysheet-cellFormat-config{display:none}.luckysheet-cellFormat-config .luckysheet-modal-dialog-content{position:relative;height:550px;width:600px}.luckysheet-cellFormat-menu-c{position:absolute;width:100%;height:30px;border-right:1px solid #fff;border-bottom:1px solid #d4d4d4;font-size:12px}.luckysheet-cellFormat-menu{position:relative;display:inline-block;height:30px;width:80px;text-align:center;line-height:30px;border:1px solid #d4d4d4;border-bottom:none;background:#f0f0f0;cursor:pointer}.luckysheet-cellFormat-menu:hover{background:#e7e7e7}.luckysheet-cellFormat-menu-active{background:#fff;cursor:default}.luckysheet-cellFormat-menu-active:hover{background:#fff}.luckysheet-cellFormat-content{position:absolute;top:30px;bottom:0;width:100%;border:1px solid #d4d4d4;border-top:none}.luckysheet-cellFormat-protection{position:relative;margin-top:30px;margin-left:40px}.luckysheet-cellFormat-protection span{font-size:12px;color:#ff2929;padding-left:12px}::-webkit-scrollbar-track{background-color:transparent}.luckysheet-noselected-text{-moz-user-select:-moz-test;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.chart-moveable{cursor:move}.luckysheet{position:absolute;font-size:12px;font-family:"Helvetica Neue",Helvetica,Arial,"PingFang SC","Hiragino Sans GB","Heiti SC","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;border:1px solid #e5e5e5;background:#fff}.luckysheet *{box-sizing:initial;outline:0}.luckysheet-work-area{height:90px;width:100%;position:relative}.luckysheet_info_detail{position:relative;left:0;top:0;margin:0;padding:0 17px;height:56px;display:flex;align-items:center;background:#fff;box-shadow:0 -1px 0 0 #e6e7e8;border-bottom:1px solid #d4d4d4}.luckysheet_info_detail .sheet-name{margin:auto}.luckysheet_info_detail div.luckysheet_info_detail_back{font-size:14px;padding:0 8px;margin-right:18px;border-radius:3px;cursor:pointer}.luckysheet_info_detail div.luckysheet_info_detail_back:hover{background:#eee}.luckysheet_info_detail .luckysheet_info_detail_input{border:1px solid transparent;border-radius:3px!important;color:#000;font-size:16px;height:26px;line-height:22px;margin:0;min-width:1px;padding:2px 7px;visibility:hidden}.luckysheet_info_detail .luckysheet_info_detail_input:hover{border:1px solid #e5e5e5}.luckysheet_info_detail .luckysheet_info_detail_input:focus{-webkit-appearance:none;-moz-appearance:none;border:1px solid #0188fb!important;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);color:#000;outline:0}.luckysheet_info_detail_update{color:#cbcbcb;font-size:12px;margin-left:15px}.luckysheet_info_detail_user{font-size:12px;cursor:pointer;margin-left:10px}#luckysheet_info_detail_user_img{vertical-align:middle;height:20px;line-height:20px;border-radius:50%;object-fit:cover}.luckysheet_info_detail_save{color:#828282;font-size:12px;margin:0 5px}.luckysheet-share-logo{height:32px;width:152px;z-index:1;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAAAgCAYAAADuW7E5AAAN7ElEQVR4Xu2be5BU1Z3Hv7/Tj2EYkEA0Uj4QTBRBZgofYFAWHzGlVLlqNGg0u6vZVKBqLVmZ7kGcvnf6dt/bDMx0D4RNYiRGd92EcmFZDRrAWl/J6ho3JJAZhELBRQTj+lgfMEhP973frdMzPdMzdM8rTFadOX/N3Ps7557zO5/zO7/f75yWKittYZBFKfXvO+oCLw6y+ki1YaABGQFsGMzy/+MQOwEj5CR4nDCgvijZRshOhczeZmv0wQHVHREeFhroAszDZMA7dyCjpuANgbwF4S9arPJfD6TuiOzw0MCfFbAqi2fQS98AJZeB0DCXtcTKKoeHqofnKIsCRsgUQIJ9qUSAoxQcE3iNLbHytaXkq2xORTa73IN3owCqQO7NlljZpL6+M/L+s6uBEoCpqRD0CRiINoAZAImd8VH/cJwaLPormVkJcDEA//FqkmdbYsGvfXbVN9LzvjQwZICdb3GCQmY9yJIAUZDYaZUZfXVy5P1nVwNDAthki6PGsk07/bN6U40ncskrVvC/+qM+a3lyukecSRfv2XXh3/WnzlDJRJzGaqGcAXCzY9Y8PVTf6a3dT0Mf+jPuIQGsMpr+OYDb++jAtpZYWa8AFtaPOMkHhFgIyFbHDM3vz+CGSsawk9sAXCSCiG2Elw/Vd3pr99PQh8L+WZalsr6x1wLeMceseTb/7oQDNsNK3yTExr6ULvSubo6XP9OXXP79CGDdNfVpA8xwkr8CMU9ElthGaPXQAKadeq9tJwRT+wDn8ZZY2Tf6C5eWGwHsUw6YndoFcNqQAlYVS99GD+t6BUewu/WT1jmvr5zw0VACVpdIft2lTBCqZsdcsrvwW7Wx5HzxyUleFtvrrdCr+XcdZv46gHNFUEHyIEU9lzBCvymsX8p6GPbqqRR3ppbV3/UHfYczmcxl+n9/ZtQvY7G7jnTf9ptmA5wixGHHDG3W75bV14/3Z4PfAvhlQEfy6k1AbXLMe/aU6kPGl7k/4AbvIL1zKXJQebLFrgtt76nfJU1N5RWt3jVCXECRLwLc58tmN8Ziyw4Umwsz3nQ+hfNEMJ1EK4AX/O7hzZZleQU7y1xAThcyBeB0QB6hYLPQ+x/HrHn+hG6RM6LpJwS4rhQ4BA9Q8LVXrFF7BwLXYCxYb1uIUWS11SZWn6o890mAFxfp2/o9zS/fvmHDBle/K9a25TTNztLbCmA8RLb6s4dvTgcnVPjctjd1QlkUvmdHwg/2gETDfQ4g9ztm6O8Mu0n7MBsAjOnRBw+g7Zg1nRcTuvogD5G8pn1yO4ogA6pFjln9cP6RYa+aRvE2Czm5e9s8pqAWx83QTwqfm05qJckwuuctIcDLPhfXWVb4PS1vOslNJP6yp85E8IxthK8+cYDtLvtR5fTMBwDHFoNHhC8CZTc1W/LOQOH6cwBm2KktAK8F+L6IzxLxXnOJWQLUgiinwEwYYacYYBEnOVeIXwI4CZQNPvfjv4rFYm0dstqi36ZXv2OG/6LTWrYD+bL+31O+i4KZj3ZkfWP0pI0H8KTn8cdK+TJCzqfC32s5Qr6aMKpzUXcesJy1FDwl4P0UNZ4eNYRnAXjP7449y7IWHV24cGHg1Enn7iAxHcDvhCpJ4cci+LpH3i26CWJ2PjqPOMlvC/EzgG2AagTkBVGcCJc1lFwbmxwzfEMOsETqTpDTSH4X0FYRz4pgG8m9jlnzE5kZbzfhrscLSDf3t1DNJTC6bxCoV7Q2lwkqbFGU13rWIfG+gAlXyn64KyY5pQ+mDNQHG4gFq0ukrvQ8PqvVLMo3x669Jzfx7RPZFAK8JIB9jhn+Sk/AfORvMpBNAlRQ8GAge2RR4RZyX7zhcp+o5wlQ4J3jmEv3ta/81PfJXAJ6u2OGL4w2NEx00+qPOZCE1yeMmifyfTCdpnrS06cr6xwztKmwDyT2v3vq2HPXLlqkE96IOKlLhXox63bcWQnj3m2GnbwbwBqA72Zbs1NXrLjvg662U40dlioHzd1r1pSN+zD9OkROI2Em6toXlS7RaMNE16+01R3jKe/i5ZGlv+/SUwkfLC8ww8pcIXRzpo6Q68HilqgEHAlRvj+A3q/a68MTyA5R8uiRo/61r6+UAflbxb4xpIDZKcsDowB2OGb4gsLva7+l/BP3HP0smGndqeHphBd42gMuE6AcQMoxw3pLOa4YduMuQKYJEbfrwtH169f7mve8eQjgqRTclTDCP8pBF0++0m4h5CiFjwqxxT/G97S1ZMmHPRst2CLX2EYoZ+F0WbBggW9q1SXHtNtHjzclojWPmfHU4xTeoLct0tctrSLizSD5fQKZV5snlU+feajS9dyc/yaUOyiqxy0ZrxHghRREE0Y43m/AqqyjZxBydq4CcR4pZSVgOu6xUurFTCDwx0DWvdQVvq2O+ne1rJDOVdLfdnqTG0rADDv1c4A6b/dvjhm+ua/+Fm5PeVkRNNhG+N7igCU1AKsp2J+IhM42nFXXAN4WDVImkDlt5bJluQUYcVJnAvypEFfr+e1oKwvgeaVkeTwSeq5rQttzcYAYjhlKFH7XsJMayHEU+VbCCP1LxEnuFuK8vsblC/jPymbdOUI+2pcsgIcdM/y3/QasHw12F1lA3/nnp6co+E7LBvyv8QjafP7M2VkVOLQnJm8NuL0+KgwlYJF48gERncTlVses6TOJWwCYJyKPkbw5t70K/saOhH7WcygdkeFBgKMB35WAqyfmrwXyiG2G7ugpH3GaTqfHa5R4VwKY3+HbuErktrgR0kFA0UCjAL5ugBl2UvttOqn9a0A9WUrVvmz2nzNKLlJKcjIiyiSRLiavhK/HjVBnvrNY4JRrY0AgWPRXeW0LPMHtArk879CL8n3TzXoHlGL+2GcvBY9lmF29J1ZxQmAbBGB6tV8BoNExw0vz47Ss5MlZH3RkNyqfs4k4qbCQjQIcrJw6afItt9ySixZ1MePJWRT5Jwg+eeeUMV/Vvk4BYKscM1xtOKkHkXNyeYziuzzviBfqNuKkHhbyTh0EQKghHiNU8+y66v/Qcpa1arKrvLkUHnHM8ONd/X1gdMZ/+EkhrhTgJdsMXzoIwB7RQJN4KlEXvrawXzXRhonlAf8cjx797pFNWd/oKYDKRfkUmXN8iqbxCiW+8Rnl7amvDe86YRZsRiz7DXHd+mJJVM9Tc7PK/99BtB3qDqy0ClnfHA8u1zv6gGDuITwIwB4C8B0Ar/jdIxdblnXMsix/1jdWR0e3tq/Q9qyzYTdqB1oraxSAascMr2qfdEtl/WPXgbxVRH5hG6Ebi03umjVryt75KP0CIDrF8RZFzU4Y1d10YcYbL6FIYT5tj2OGO7ctM95USfGa24Mmd4Zj3tuZuzMSqR/A410AfuuY4dkDByylc3s6aPCE6iq7rjrnK3fo4wkdPVPwXMIIX0VSTCelg5xZItiiModvzEfE5vKmyz3Xe0YAn0vvivq6pbl2cv1xkttBzATEcsxQLP+8TwvWcXD901JnizmHPh08WftcldG0jiJzkVa3Iuqxw/Dfvt8S7XwOqnQB1nv1AmiuAiR/FPUGgJdJVInk+qfNfkVh1tmwU3GAZi5gJ7VV2QfBLBAzALQK1Ry7rrql1ORGV6ye5GbcbQBPEeC3PveL8yzrO93Ga9iN2wFpT8SK1NhGSEennXNh2I3PIbcz4H8BPKWTm0pkKsG5ud1GieFE2v2t3qPk7j6Yljfjjf9KkZu1M68EWz3gfQDzhNB+9xG/4mVWpEYDjlqr4ULlUy/puEZEdNT4n3pcJHS+zV9sazec5D+CuAMiLgi9uBocM/TDXgHLXblhm04e9nIoLb9viQUv0h2bYaUbhKgpgcC6lljZtwdFV7ejov4BpqUiTnKZkLH85UkB3iZkEYAVxY41DDv1PYANAL7QNe3YIUrdY9e2r/reJtewG68mZKte4R0phW7j7UoXoM3v8kzLqumWE7xv+ZpTfG5mNcFb29voLB8A8mO/e9jIp0AGCtjChQ8EvnTmxxGILNV5vYK2nxfKPXZd6A+Fmq2NNsxUfqUTw7m57Sg6d5ZQmcOr81Yt/0L7jUI+BFCnuiryFwFKA6bPFZHZ2tt9rtxKVGppczTQqP+eGm09LYjAqwArimMgi1piwZI3XwcLX2/1lq5cOTaQCUzTMu8eqNi+dm17vqiXIobdOJkipwcCwf3WvYv1avyTtvcCMHPbtpAb7bqab5bqg2Wt+kJbAJN9bmYchW9/aVz5/sWLFxd1tgeqM50i2bX3wDlu1jc+6//k1fraWm3JShbLapoAP8/L0ve+3/1wn2VZOqrtdykJWGW0LQWwureWdBL1aDr45cI8V1VdOkJBZ3KuR/23ZUzwK801os+1hlVpt07pA4CMAtR8x6zWO8PnvhQFTN+hZ7ZtZ/FrzgU6Iatb4qNyDnFXoVRa2Y2gV/S2BEW+u9MK6pU8rErESRpC2AAP+N3WKYXZ/s+zIooDFs1sJLybehu4PlvMsuyqYsc/fQQGm1piZblzrOFSdLTmqjG7qY9fhPX5M83hMP7jANM/LfPY9kaPX//0sFF4QyE4u6+D68pom05e6pB1YmcDgkMtVtkZw0G5I2MskmitrDt2F0R+UFI5gt0eeH1/r9xUNbLCa83cKuQNkFxEcnILgqNhSeedopGJ+Pxq4DgLVmml14G56yXFyuOtx1rvHOhlwW4NWVQjcH1+geo5suMBi6Y7DlG7iW4TessGcod++KhwZKS9+uo9X1ZG0zpbPQ6Q1yh8iZBN/f1p2YiqRzTQUwP/ByH3mYpBTz2UAAAAAElFTkSuQmCC)}.luckysheet-wa-editor{height:32px;background:#fafafc;position:relative;padding:5px 0 3px 15px;border-bottom:1px solid #d4d4d4;white-space:nowrap;transition:all .2s}.luckysheet-toolbar-left-theme{width:15px;position:absolute;left:0;top:1px;bottom:1px}.luckysheet-inline-block{position:relative;display:-moz-inline-box;display:inline-block}.luckysheet-toolbar-separator{line-height:normal;list-style:none;outline:0;overflow:hidden;padding:0;text-decoration:none;width:0;height:20px;vertical-align:top;border-left:1px solid #e0e0e0;margin:5px 1px}.luckysheet-toolbar-combo-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background:0;border-color:transparent;border-style:solid;border-width:1px;outline:0;padding:0;color:#333;list-style:none;font-size:11px;font-weight:700;text-decoration:none;cursor:default;height:26px;line-height:26px;vertical-align:inherit;margin:0 1px}.luckysheet-toolbar-combo-button:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);background-color:#f8f8f8;background-image:-webkit-linear-gradient(to bottom,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(to bottom,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(to bottom,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(to bottom,#f8f8f8,#f1f1f1);background-image:linear-gradient(to bottom,#f8f8f8,#f1f1f1);border-color:#c6c6c6!important;color:#222;border-width:1px;border-color:transparent!important;background-color:rgba(0,0,0,.06);background-image:none;cursor:pointer;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;cursor:pointer}.luckysheet-toolbar-combo-button:hover .luckysheet-toolbar-combo-button-input{border-right-color:rgba(0,0,0,.12)}.luckysheet-toolbar-combo-button-open{color:#222;border-width:1px;border-color:transparent!important;background-color:rgba(0,0,0,.12);background-image:none;cursor:pointer}.luckysheet-toolbar-combo-button-open .luckysheet-toolbar-combo-button-input{background:0 0;border-right:1px solid transparent!important}.luckysheet-toolbar-combo-button-inner-box,.luckysheet-toolbar-combo-button-outer-box{border:0;vertical-align:top;margin:0;padding:0}.luckysheet-toolbar-zoom-combobox .luckysheet-toolbar-combo-button-caption{width:36px!important}.luckysheet-toolbar-combo-button-caption{padding:0;margin:0 0 0 -3px}.luckysheet-toolbar-combo-button-input{background:0 0;border:1px solid transparent!important;color:#333;font-family:Arial,sans-serif!important;font-size:11px!important;font-weight:700!important;height:20px!important;overflow:hidden!important;color:rgba(0,0,0,.7);height:22px!important;width:22px}.luckysheet-toolbar-combo-button-input:focus{box-shadow:inset 0 1px 2px rgba(0,0,0,.3);background:#fff;outline:0;border:1px solid #0188fb!important}.luckysheet-toolbar-textinput{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid silver;font-size:13px;height:25px;padding:1px 0 1px 8px}.luckysheet-toolbar-combo-button-dropdown{float:right;margin:9px 0 0 0;padding:0 0 0 1px;min-width:7px;opacity:.8;vertical-align:middle;width:5px;height:7px;margin-top:10px}.luckysheet-toolbar-color-menu-button .luckysheet-toolbar-menu-button-caption{top:-2px}.luckysheet-color-menu-button-indicator{position:relative;height:20px}.luckysheet-color-menu-button-indicator .text-color-bar{position:absolute;bottom:0;background-color:#0081f9;height:3px;width:55%;left:30%}.luckysheet-toolbar-button-inner-box .luckysheet-icon,.luckysheet-toolbar-menu-button-caption .luckysheet-color-menu-button-indicator .luckysheet-icon,.luckysheet-toolbar-menu-button-caption .luckysheet-icon{margin-top:0}.luckysheet-toolbar-menu-button-caption{padding:0;margin:0}.luckysheet-toolbar-menu-button-inner-box{margin:0 2px}.luckysheet-toolbar-menu-button-dropdown{float:right;margin:10px 2px 0 3px;padding:0;opacity:.8;vertical-align:middle;width:5px;height:7px;margin-left:4px;margin-right:0;margin-top:10px}.luckysheet-toolbar-button-split-right .luckysheet-toolbar-menu-button-dropdown{padding:0 3px}.luckysheet-toolbar-button-split-left,.luckysheet-toolbar-button-split-left *{border-top-right-radius:0!important;border-bottom-right-radius:0!important;margin-right:0}.luckysheet-toolbar-button-split-right,.luckysheet-toolbar-button-split-right *{border-top-left-radius:0!important;border-bottom-left-radius:0!important;min-width:5px!important;margin-left:0}#luckysheet-icon-merge-menu{margin-right:1px}.luckysheet-toolbar-button,.luckysheet-toolbar-menu-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;background:0;border:1px solid transparent;outline:0;padding:0;list-style:none;font-size:11px;text-decoration:none;vertical-align:middle;cursor:default;height:26px;line-height:26px;color:#333}.luckysheet-toolbar-button-hover,.luckysheet-toolbar-button:hover,.luckysheet-toolbar-menu-button:hover{border:1px solid transparent;background-color:rgba(0,0,0,.06);background-image:none;box-shadow:none;cursor:pointer}.luckysheet-toolbar-button-split-right.luckysheet-toolbar-menu-button:hover{border-left-color:rgba(0,0,0,.12)!important}.luckysheet-toolbar-button-split-right-hover{border-width:1px;border-color:transparent!important;background-color:rgba(0,0,0,.06);cursor:pointer;box-shadow:none;border-left-color:rgba(0,0,0,.12)!important}.luckysheet-toolbar-button:active,.luckysheet-toolbar-menu-button:active{border:1px solid transparent;background-color:rgba(0,0,0,.12);background-image:none;box-shadow:none;cursor:pointer}.luckysheet-toolbar-button-outer-box,.luckysheet-toolbar-menu-button-outer-box{border:0;vertical-align:top;margin:0;padding:0}.luckysheet-toolbar-button-inner-box,.luckysheet-toolbar-menu-button-inner-box{padding:0 2px;padding:0;text-align:center;height:26px;min-width:26px}.luckysheet-icon{direction:ltr;text-align:center;overflow:hidden;vertical-align:middle;height:26px;width:26px;margin:2px}#luckysheet-icon-fmt-other .luckysheet-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:55px;margin-left:1px;text-align:center}#luckysheet-icon-font-family .luckysheet-toolbar-menu-button-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:55px;margin-left:1px;text-align:center}#luckysheet-icon-function .luckysheet-toolbar-menu-button-caption{margin-right:5px;margin-left:-5px}#luckysheet-icon-function .luckysheet-icon{margin-right:0}#luckysheet-icon-pivotTable .luckysheet-toolbar-menu-button-caption{color:#0188fb}#luckysheet-icon-chart .luckysheet-toolbar-menu-button-caption{color:#0188fb}.luckysheet-rightgclick-menu-sub .sp-container{background-color:#fff;border:solid 1px #fff}#luckysheet-icon-cell-color-menu-menuButton .sp-palette-container,#luckysheet-icon-text-color-menu-menuButton .sp-palette-container{margin-bottom:-300px}#luckysheet-icon-cell-color-menu-menuButton .sp-palette,#luckysheet-icon-text-color-menu-menuButton .sp-palette{margin-top:-10px}.luckysheet-wa-calculate{height:28px;background:#fff;position:relative;padding-right:44px;border-bottom:1px solid #d4d4d4}.luckysheet-wa-calculate-help{height:100%;width:99px;border-right:1px solid #d4d4d4}.luckysheet-wa-calculate-help-box{height:100%;width:85px;position:absolute;top:0;left:0}#luckysheet-helpbox{left:0;position:absolute;right:0;top:6px;resize:none;font-family:arial,sans,sans-serif;font-size:14px;line-height:14px;background-color:#fff;padding:2px 5px}.luckysheet-helpbox-cell-input{width:100%;height:100%;margin:0;outline:0;cursor:text;-webkit-user-modify:read-write-plaintext-only;white-space:nowrap;overflow:hidden;-webkit-transform:translateZ(0);background-color:#fff;word-wrap:break-word;-webkit-nbsp-mode:space;-webkit-line-break:after-white-space}.luckysheet-wa-calculate-help-tool{position:absolute;left:85px;text-align:center;height:100%;width:13px;border-left:1px solid transparent;border-right:1px solid transparent}.luckysheet-wa-calculate-help-tool:hover{background:#efefef;cursor:pointer;border-left:1px solid #e5e5e5;border-right:1px solid #e5e5e5}.luckysheet-wa-calculate-size{position:absolute;height:3px;width:100%;left:0;bottom:0;z-index:1000}.luckysheet-wa-calculate-size:hover{background:#5e5e5e;cursor:ns-resize}#luckysheet-wa-functionbox-cancel{left:104px}#luckysheet-wa-functionbox-confirm{left:130px}.luckysheet-wa-functionbox{position:absolute;top:50%;transform:translateY(-50%);text-align:center;left:156px;color:#d6d6d6}.luckysheet-wa-functionbox span{vertical-align:middle;width:30px;height:30px}.luckysheet-wa-functionbox i{font-size:24px}.luckysheet-wa-calculate-active{color:#585858;cursor:pointer}.luckysheet-wa-calculate-active:hover{color:#0188fb}.luckysheet-grid-container{width:100%;position:absolute;top:90px;bottom:0}.luckysheet-stat-area{position:absolute;height:23px;bottom:0;background:#ff00dc;width:100%}.luckysheet-sta-c{height:22px;background-color:#fff;border-top:1px solid #e1e1e1;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.luckysheet-stat-area:hover .luckysheet-sta-c{-moz-user-select:-moz-all;-khtml-user-select:initial;-webkit-user-select:initial;-ms-user-select:initial;user-select:initial}.luckysheet-sta-c .luckysheet-sta-content{height:22px;line-height:22px;text-align:right;white-space:nowrap;overflow:hidden}.luckysheet-sta-c .luckysheet-sta-content span{margin-right:10px}.luckysheet-grid-window{position:absolute;top:0;bottom:23px;left:0;right:0;overflow:hidden;background:#0ff}.luckysheet-sheet-area{position:absolute;right:0;bottom:0;left:0;background-color:#fafafc;color:#444;height:31px;padding:0 0 0 44px;margin:0;-webkit-touch-callout:none;cursor:default;transition:.3s ease all}.luckysheet-sheet-area .luckysheet-sheets-item,.luckysheet-sheet-area>div{display:inline-block}div.luckysheet-sheets-scroll{display:none}div.luckysheet-sheets-add:hover,div.luckysheet-sheets-m:hover{color:#2a2a2a}.docs-sheet-fade{position:absolute;display:block;top:0;width:6px;height:100%;z-index:1}.docs-sheet-fade div{background-color:#d7d7d7;width:2px;float:right;position:relative;height:100%}.docs-sheet-fade-left{left:0}.docs-sheet-fade-right{right:0}.docs-sheet-fade1{opacity:.82}.docs-sheet-fade2{opacity:.62}.docs-sheet-fade3{opacity:.4}.luckysheet-sheet-area div.luckysheet-sheet-container{padding:0 0;margin-left:0;position:relative;max-width:50%;vertical-align:bottom}.luckysheet-sheet-area div.luckysheet-sheet-container div.luckysheet-sheet-container-c{padding:0 0;margin-left:0;overflow:hidden;white-space:nowrap;position:relative;max-width:100%;vertical-align:bottom;display:inline-block}.luckysheet-sheet-container-menu-hide .luckysheet-sheets-item{padding-right:5px!important}.luckysheet-sheet-container-menu-hide .luckysheet-sheets-item-menu{display:none!important}.luckysheet-sheet-area div.luckysheet-sheets-item{padding:2px 6px;height:29px;line-height:29px;background-color:#fafafc;color:#676464;min-width:30px;top:0;position:relative;margin-right:-1px;cursor:pointer;transition:all .1s;font-size:13px;padding:2px 19px 0 5px;box-sizing:border-box;border-left:1px solid #e0e0e0;border-bottom:1px solid #e0e0e0;border-right:1px solid #e0e0e0}.luckysheet-sheet-area div.luckysheet-sheets-item:last-child{margin-right:1px}.luckysheet-sheet-area div.luckysheet-sheets-item:hover{background-color:#efefef;color:#490500}.luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-menu{margin-left:2px;display:inline-block;top:-2px;position:relative;color:#a1a1a1;position:absolute;height:100%;width:15px;right:0;text-align:center}.luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-menu:hover{color:#2a2a2a;cursor:pointer}.luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-name{padding:0 3px}.luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-name[contenteditable=true]{border:1px solid #d9d9d9;display:inline-block;height:18px;line-height:18px;min-width:8px;margin:-4px -1px;-moz-user-modify:read-write-plaintext-only;-webkit-user-modify:read-write-plaintext-only;-moz-user-select:text!important;-ms-user-select:text!important;-webkit-user-select:text!important}.luckysheet-sheet-area div.luckysheet-sheets-item .luckysheet-sheets-item-name[contenteditable=true]:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3);border:1px solid #4d90fe;outline:0}.luckysheet-sheet-area div.luckysheet-sheets-item-active{height:29px;line-height:29px;background-color:#efefef;border-top-color:#fff;color:#222;cursor:default}.luckysheet-sheet-area div.luckysheet-sheets-item-active:hover{background-color:#ececec;color:#222}.luckysheet-grid-window-1{position:absolute;top:0;right:0;bottom:27px;left:0;min-width:200px;background-color:#fff!important;overflow:hidden;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.luckysheetTableContent{position:absolute;z-index:2;left:0;top:0;width:100%;height:100%;pointer-events:none;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.luckysheet-grid-window-2{height:100%;width:100%;outline:0;border-collapse:collapse;display:table}.luckysheet-paneswrapper{overflow:hidden;height:1px}.luckysheet-left-top{width:44.5px;height:18.5px;border:solid 0 #dfdfdf;position:relative;padding-top:0;border-width:0 1px 1px 0;margin:-1px 0 0 -1px;padding-left:0;cursor:pointer}.luckysheet-cols-h-c{color:#5e5e5e;overflow:hidden;padding:0;cursor:default;height:19px;outline-style:none;position:relative;-webkit-user-select:none;background:#f3f3f2}.luckysheet-rows-h{position:relative;outline-style:none;color:#5e5e5e;overflow:hidden;padding:0;margin-top:-2px;padding-top:2px;cursor:default;width:38px;background:#f3f3f2}.luckysheet-cols-menu-btn{color:#5e5e5e;cursor:pointer;position:absolute;z-index:12;border:1px solid #5e5e5e;border-radius:1px;top:3px;margin-left:0;display:none;padding:0 2px;font-size:12px;height:12px;opacity:.5}.luckysheet-cols-menu-btn:hover{opacity:1}.luckysheet-cols-h-hover{color:#5e5e5e;cursor:default;position:absolute;z-index:11;border:0 none;bottom:0;height:100%;margin-left:0;display:none;background-color:rgba(194,194,194,.4)}.luckysheet-cols-h-selected{color:#5e5e5e;cursor:default;position:absolute;z-index:10;border-bottom:1px solid #0188fb;bottom:0;height:100%;margin-left:0;display:none;transition:all .1s;background-color:rgba(76,76,76,.1)}.luckysheet-cols-h-cells{margin:0;padding:0;border:none 0;position:relative;height:inherit}.luckysheet-cols-h-cells-c{color:#5e5e5e;cursor:default;width:5000000px;height:inherit}.luckysheet-cols-h-cells-clip{color:#5e5e5e;cursor:default;margin:0;padding:0;border:none 0;position:relative;float:left;direction:ltr;height:inherit;width:2561px;color:#5e5e5e;border-bottom:solid 1px #bbb;position:relative;top:-1px}.luckysheet-cols-h-cell-nosel{position:absolute;cursor:pointer;border:0 solid;border-color:#dfdfdf;display:inline-block;min-height:19px;touch-action:manipulation;border-right-width:1px;height:inherit}.luckysheet-cols-h-cell-sel{direction:ltr;height:inherit;position:absolute;cursor:pointer;border:0 solid;border-color:#bfbfbf;background-color:#e1e1e1;display:inline-block;min-height:19px;color:#0188fb;font-weight:700;touch-action:manipulation;border-right-width:1px}.luckysheet-col-flow-h{float:left;direction:ltr;position:relative;margin:0;padding:0;border:none 0;height:inherit;overflow:hidden}.luckysheet-col-flow-h-sheet{width:inherit;height:inherit;position:relative;float:left;direction:ltr}body:not(.ewa-ipad) .luckysheet-cols-h-cell-nosel:hover,body:not(.ewa-ipad) .luckysheet-cols-h-cell-sel:hover,body:not(.ewa-ipad) .luckysheet-rows-h-cell-nosel:hover,body:not(.ewa-ipad) .luckysheet-rows-h-cell-sel:hover{background-color:#fcc3c3}.luckysheet-cols-h-cell-txt{cursor:pointer;height:inherit;position:relative;text-align:center;overflow:hidden;touch-action:manipulation;font-size:14px;padding-top:2px}.luckysheet-rows-h{position:relative;outline-style:none;color:#5e5e5e;overflow:hidden;padding:0;margin-top:-2px;padding-top:2px;cursor:default;width:45px}.luckysheet-rows-h-hover{position:absolute;z-index:11;border:0 none;right:0;width:100%;margin-top:2px;display:none;background-color:rgba(194,194,194,.4)}.luckysheet-rows-h-selected{position:absolute;z-index:10;border-right:1px solid #0188fb;right:0;width:100%;margin-top:2px;display:none;transition:all .1s;background-color:rgba(76,76,76,.1)}.luckysheet-rows-h-cells{margin:0;padding:0;border:none 0;position:relative;width:100%}.luckysheet-rows-h-cells-c{margin:0;padding:0;border:none 0;position:relative;float:left;direction:ltr;width:100%}.luckysheet-rows-h-cells-clip{cursor:default;color:#5e5e5e;direction:ltr;border-right:solid 1px #bbb;width:inherit;height:inherit;position:relative;left:-1px;height:inherit}.luckysheet-rows-h-cell-nosel{direction:ltr;width:100%;position:absolute;cursor:pointer;border:0 solid;border-color:#dfdfdf;border-bottom-width:1px;touch-action:manipulation}.luckysheet-rows-h-cell-sel{direction:ltr;width:100%;position:absolute;cursor:pointer;border:0 solid;border-color:#bfbfbf;background-color:#e1e1e1;border-bottom-width:1px;color:#0188fb;font-weight:700;touch-action:manipulation}.luckysheet-rows-h-cell-txt{width:100%;position:absolute;bottom:0;text-align:center;padding-bottom:1px;max-height:100%;overflow:hidden;font-size:14px}.luckysheet-cell-loading{width:100%;height:100%;background-color:rgba(255,255,255,.3);position:absolute;overflow:hidden;outline-style:none;cursor:not-allowed;font-size:28px;z-index:2;display:none}.luckysheet-cell-loading-inner{position:relative;top:40%;width:100%;margin:0 auto;text-align:center}.luckysheet-cell-loading-inner span{margin-left:10px}.luckysheet-cell-main{background-color:#fff;width:15px;height:15px;background-color:#f3f3f2;border-collapse:collapse;position:relative;overflow:hidden;outline-style:none;cursor:default}.luckysheet-menu,.luckysheet-scrollbars{scrollbar-base-color:#fff;scrollbar-track-color:#e7e7e7;scrollbar-darkshadow-color:#fff;scrollbar-3dlight-color:#fff;scrollbar-arrow-color:#757778;scrollbar-shadow-color:#bec1c4;scrollbar-highlight-color:#bec1c4;-ms-scroll-chaining:none;overflow:auto}.luckysheet-scrollbar-ltr{position:absolute;overflow:hidden;z-index:1003}.luckysheet-scrollbar-ltr div{height:1px;width:1px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button{height:0;width:0}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:start{display:none}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:end{display:block}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button{border:1px solid #d9d9d9}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal{border-width:1px 0 0 0}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical{border-width:0 0 0 1px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical{border-width:0 1px 0 0}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:increment{background:no-repeat url(waffle_sprite.png) -663px -13px;width:15px;padding-left:1px;background-clip:border-box;border:1px solid #d9d9d9;border-width:1px 0 0 0;box-shadow:none;background-color:#f8f8f8;border-bottom:1px solid #d9d9d9}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:increment:hover{background:no-repeat url(waffle_sprite.png) -395px -62px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:increment:active{background:no-repeat url(waffle_sprite.png) -679px -13px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:decrement{border-left:1px solid #d9d9d9;border-right:1px solid #d9d9d9;background:no-repeat url(waffle_sprite.png) -283px -62px;width:17px;border-bottom:1px solid #d9d9d9}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:hover{background:no-repeat url(waffle_sprite.png) -145px -70px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:horizontal:active{background:no-repeat url(waffle_sprite.png) -552px 0}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:increment{padding-top:1px;background:no-repeat url(waffle_sprite.png) -531px -24px;border-left:1px solid #d9d9d9;height:15px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:increment:hover{background:no-repeat url(waffle_sprite.png) -570px -42px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:increment:active{background:no-repeat url(waffle_sprite.png) -83px -46px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:decrement{border-top:1px solid #d9d9d9;border-bottom:1px solid #d9d9d9;border-left:1px solid #d9d9d9;background:no-repeat url(waffle_sprite.png) -631px -27px;height:17px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:decrement:hover{background:no-repeat url(waffle_sprite.png) -180px -58px}.luckysheet-scrollbar-ltr::-webkit-scrollbar-button:vertical:decrement:active{background:no-repeat url(waffle_sprite.png) -776px -28px}.luckysheet-scrollbar-x{bottom:0;left:44px;overflow-x:scroll}.luckysheet-scrollbar-y{right:0;top:0;overflow-y:scroll}.luckysheet-cell-flow{margin:0;padding:0;border:none 0;position:relative;touch-action:manipulation;overflow:hidden}.luckysheet-cell-flow-clip{border-collapse:collapse;cursor:default;width:5000000px;touch-action:manipulation;overflow:hidden}.luckysheet-cell-flow-col{margin:0;padding:0;border:none 0;position:relative;touch-action:manipulation;overflow:hidden;float:left;direction:ltr}.luckysheet-cell-sheettable{position:relative;text-align:left;font-size:11pt;color:#000;text-decoration:none}.luckysheet-bottom-controll-row{position:absolute;height:30px;bottom:38px;left:0;z-index:1000}#luckysheet-bottom-add-row{padding:5px 20px;margin-right:5px;margin-top:-2px}#luckysheet-bottom-add-row-input{width:40px;min-width:40px}#luckysheet-bottom-return-top{padding:5px 6px;margin-left:10px;margin-top:-2px}.luckysheet-cell-flow-column{position:absolute;height:inherit;width:inherit;top:0;left:0;z-index:1;touch-action:manipulation}.luckysheet-cell-flow-column-line{position:absolute;border-right:1px solid #d4d4d4;height:inherit}.luckysheet-cell-flow-row{text-align:left;position:absolute;height:inherit;width:inherit;top:0;left:0;z-index:1;touch-action:manipulation}.luckysheet-cell-flow-row-line{position:absolute;border-bottom:1px solid #d4d4d4;width:inherit}.luckysheet-cell-selected-focus{position:absolute;pointer-events:none;z-index:14;margin:0;background:rgba(0,80,208,.15);display:none}.luckysheet-selection-copy{position:absolute;pointer-events:none;z-index:18;border:none;margin:0;display:none}.luckysheet-selection-copy .luckysheet-copy{position:absolute;z-index:18;background-color:transparent}.luckysheet-selection-copy-top{left:0;right:0;height:2px;top:0;background-position:bottom;background-image:url(EwaAntH.gif)}.luckysheet-selection-copy-right{top:0;bottom:0;width:2px;right:0;background-image:url(EwaAntV.gif)}.luckysheet-selection-copy-bottom{left:0;right:0;height:2px;bottom:0;background-image:url(EwaAntH.gif)}.luckysheet-selection-copy-left{top:0;bottom:0;width:2px;left:0;background-position:right;background-image:url(EwaAntV.gif)}.luckysheet-selection-copy-hc{position:absolute;top:0;right:0;bottom:0;left:0;border:2px dashed #12a5ff;z-index:8}.luckysheet-selection-highlight{position:absolute;z-index:14;border:none;margin:0;display:none}.luckysheet-formula-functionrange-highlight .luckysheet-copy{background-image:none;background:#0188fb;position:absolute;z-index:18;cursor:move;opacity:.9}.luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-top{top:-2px;border-top:2px solid #fff;border-bottom:2px solid #fff}.luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-right{right:-2px;border-left:2px solid #fff;border-right:2px solid #fff}.luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-bottom{bottom:-2px;border-top:2px solid #fff;border-bottom:2px solid #fff}.luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-left{left:-2px;border-left:2px solid #fff;border-right:2px solid #fff}.luckysheet-formula-functionrange-highlight .luckysheet-selection-copy-hc{border:2px solid #5e5e5e;opacity:.03;z-index:initial}.luckysheet-selection-highlight-topleft{left:-3px;top:-3px;cursor:se-resize}.luckysheet-selection-highlight-topright{right:-3px;top:-3px;cursor:ne-resize}.luckysheet-selection-highlight-bottomleft{left:-3px;bottom:-3px;cursor:ne-resize}.luckysheet-selection-highlight-bottomright{right:-3px;bottom:-3px;cursor:se-resize}.luckysheet-formula-functionrange-highlight .luckysheet-highlight{position:absolute;z-index:19;border:1px solid #fff;background:#0188fb;width:6px;height:6px}.luckysheet-cell-selected-extend{position:absolute;pointer-events:none;z-index:16;border:1px dashed #0188fb;margin:-1px 0 0 -1px;display:none}.luckysheet-cell-selected-move{position:absolute;pointer-events:none;z-index:16;border:2px solid #0188fb;margin:-1px 0 0 -1px;display:none}.luckysheet-cell-selected{position:absolute;pointer-events:none;z-index:15;border:1px solid #0188fb;margin:-1px 0 0 -1px;background:rgba(1,136,251,.15);display:none}.luckysheet-cs-inner-border{pointer-events:none;border:1px solid #fff;position:absolute;top:0;bottom:0;left:0;right:0}.luckysheet-cs-fillhandle{position:absolute;width:6px;height:6px;bottom:-5px;cursor:crosshair;background-color:#0188fb;border:solid 1px #fff;z-index:16;pointer-events:auto;right:-5px}.luckysheet-cs-draghandle{position:absolute;cursor:move;background-color:#fff;opacity:.01;z-index:15;pointer-events:auto;border:2px solid #fff}.luckysheet-cs-draghandle-top{top:-4px;left:-2px;right:-2px;height:2px}.luckysheet-cs-draghandle-bottom{right:0;left:-2px;bottom:-4px;height:2px}.luckysheet-cs-draghandle-left{top:0;left:-4px;bottom:0;width:2px}.luckysheet-cs-draghandle-right{top:0;right:-4px;bottom:0;width:2px}.luckysheet-cs-touchhandle{display:none;position:absolute;width:16px;height:16px;padding:5px;z-index:100;pointer-events:auto;touch-action:auto}.luckysheet-cs-touchhandle:before{content:'';display:block;width:16px;height:16px;border:.5px solid rgba(0,0,0,.15);background-color:#fff;box-sizing:border-box;border-radius:50%}.luckysheet-cs-touchhandle-lt{left:-13px;top:-13px}.luckysheet-cs-touchhandle-lb{left:-13px;bottom:-13px}.luckysheet-cs-touchhandle-rt{right:-13px;top:-13px}.luckysheet-cs-touchhandle-rb{right:-13px;bottom:-13px}.luckysheet-cs-touchhandle .luckysheet-cs-touchhandle-btn{position:absolute;width:10px;height:10px;left:8px;top:8px;background-color:#018ffb;background-position:center;box-sizing:border-box;border-radius:50%;z-index:11}#luckysheet-dynamicArray-hightShow{position:absolute;pointer-events:none;z-index:15;border:1px solid #00f;margin:-1px 0 0 -1px;display:none}.luckysheet-scrollbars::-webkit-scrollbar-track{background-color:#fff;border:1px solid #d9d9d9}.luckysheet-scrollbar-x::-webkit-scrollbar-track{border-left:1px solid #d9d9d9;border-right:none}.luckysheet-scrollbar-y::-webkit-scrollbar-track{border-top:none;border-bottom:none}.luckysheet-scrollbars::-webkit-scrollbar{width:12px;height:12px;background-color:#fff}.luckysheet-scrollbars::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;border-radius:12px;border-width:2px 1px 1px 2px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.luckysheet-scrollbars::-webkit-scrollbar-thumb:hover{background-color:#969696;border:1px solid #a0a0a0;border-radius:12px}.luckysheet-grdusedrange{position:absolute;visibility:hidden;width:1px;height:1px}.luckysheet-grdblkflowpush{margin:0;padding:0;border:none 0;width:1px}.luckysheet-grdblkpush{margin:0;padding:0;border:none 0;height:1px;float:left;direction:ltr}.luckysheet-cell-flow-data{position:absolute;height:inherit;width:inherit;top:0;left:0;z-index:1}.luckysheet-cell-flow-data-row{position:absolute;width:inherit}.luckysheet-cell-flow-data-cell{position:absolute;height:inherit}.luckysheet-cell-flow-data-value{position:absolute!important;bottom:0;letter-spacing:-.02em;white-space:nowrap;padding-left:2px;overflow:hidden}.luckysheet canvas{position:absolute}.luckysheetcolumeHeader{margin-left:-1px}.luckysheetrowHeader{margin-top:1px}.luckysheetsheettable{margin-left:-1px;margin-top:-1px}.luckysheet-cols-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);-webkit-transition:opacity 218ms;-moz-transition:opacity 218ms;-o-transition:opacity 218ms;transition:opacity 218ms;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);cursor:default;font-size:13px;margin:0;outline:0;padding:6px 0;position:absolute;z-index:1004;box-sizing:border-box;user-select:none;display:none}.luckysheet-cols-menu .luckysheet-cols-menuitem{position:relative;color:#333;cursor:pointer;list-style:none;margin:0;padding:1px 6em 1px 20px;white-space:nowrap;padding-left:8px;vertical-align:middle;padding-right:24px;user-select:none}.luckysheet-cols-menu .luckysheet-cols-menuitem-hover,.luckysheet-cols-menu .luckysheet-cols-menuitem:hover{background:#efefef}.luckysheet-cols-menu .luckysheet-cols-menuitem .luckysheet-cols-menuitem-content{position:relative;color:#333;cursor:pointer;list-style:none;margin:0;padding:6px 7em 6px 30px;white-space:nowrap;user-select:none}.luckysheet-rightgclick-menu .luckysheet-cols-menuitem .luckysheet-cols-menuitem-content{position:relative;color:#333;cursor:pointer;list-style:none;margin:0;padding:6px 15px 6px 20px;white-space:nowrap;user-select:none}#luckysheet-cols-menu .luckysheet-cols-menuitem,#luckysheet-pivotTable-config-option .luckysheet-cols-menuitem,.luckysheet-filter-menu .luckysheet-cols-menuitem{padding-right:10px;padding-left:12px}#luckysheet-pivotTable-config-option-sumtype .luckysheet-cols-menuitem{padding-right:15px;padding-left:12px;padding-top:1px;padding-bottom:1px}#luckysheet-cols-menu .luckysheet-cols-menuitem-content,.luckysheet-filter-menu .luckysheet-cols-menuitem .luckysheet-cols-menuitem-content{padding-right:10px;padding-left:12px}#luckysheet-sheet-list .luckysheet-cols-menuitem .luckysheet-cols-menuitem-content{padding-right:0;max-width:430px;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.luckysheet-filter-menu div.luckysheet-cols-menuitem{padding-top:0;padding-bottom:0}.luckysheet-filter-submenu div.luckysheet-cols-menuitem{padding-top:1px;padding-bottom:1px}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem{padding-top:2px;padding-bottom:0;cursor:default}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem-content,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem-content{padding-top:2px;padding-bottom:0;cursor:default}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem-content input,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem-content input{height:24px;width:191px;padding-right:25px;padding-left:3px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid silver;font-size:13px}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem-content input:focus,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem-content input:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);box-shadow:inset 0 1px 2px rgba(0,0,0,.3);border:1px solid #4d90fe;outline:0}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem-content .luckysheet-filter-byvalue-input-icon,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem-content .luckysheet-pivotTableFilter-byvalue-input-icon{position:absolute;right:17px;top:7px}.luckysheet-filter-menu .luckysheet-filter-byvalue .luckysheet-cols-menuitem:hover,.luckysheet-filter-menu .luckysheet-pivotTableFilter-byvalue .luckysheet-cols-menuitem:hover{background:#fff}.luckysheet-filter-menu .luckysheet-cols-menuitem:last-child:hover{background:#fff}.luckysheet-filter-menu .luckysheet-cols-menuitem:last-child,.luckysheet-filter-menu .luckysheet-cols-menuitem:last-child .luckysheet-cols-menuitem-content{cursor:default}#luckysheet-filter-byvalue-select,#luckysheet-pivotTableFilter-byvalue-select{min-height:100px;width:200px}.luckysheet-filter-menu .luckysheet-mousedown-filter-byvalue-btn span,.luckysheet-filter-menu .luckysheet-mousedown-pivotTableFilter-byvalue-btn span{color:#00f;cursor:pointer;text-decoration:underline}.luckysheet-filter-menu .luckysheet-mousedown-filter-byvalue-btn div,.luckysheet-filter-menu .luckysheet-mousedown-pivotTableFilter-byvalue-btn div{position:absolute;right:14px;top:0;font-size:18px}.luckysheet-filter-menu .luckysheet-filter-bycondition .luckysheet-filter-selected-input,.luckysheet-filter-menu .luckysheet-pivotTableFilter-bycondition .luckysheet-pivotTableFilter-selected-input{padding-left:8px;padding-right:8px;margin-top:3px;display:none}.luckysheet-filter-menu .luckysheet-filter-bycondition .luckysheet-filter-selected-input input,.luckysheet-filter-menu .luckysheet-pivotTableFilter-bycondition .luckysheet-pivotTableFilter-selected-input input{height:24px;width:100%;padding-right:3px;padding-left:3px;margin-left:-3px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid silver;font-size:13px}.luckysheet-filter-menu .luckysheet-filter-bycondition .luckysheet-filter-selected-input2 input,.luckysheet-filter-menu .luckysheet-pivotTableFilter-bycondition .luckysheet-pivotTableFilter-selected-input2 input{height:24px;width:92px;padding-right:3px;padding-left:3px;margin-left:-3px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid silver;font-size:13px}.luckysheet-filter-menu .luckysheet-filter-bycondition .luckysheet-filter-selected-input2 span,.luckysheet-filter-menu .luckysheet-pivotTableFilter-bycondition .luckysheet-pivotTableFilter-selected-input2 span{margin-left:2px;margin-right:5px}.luckysheet-menuseparator{border-top:1px solid #ebebeb;margin-top:6px;margin-bottom:6px}.luckysheet-submenu-arrow{-webkit-transition:all 218ms;-moz-transition:all 218ms;-o-transition:all 218ms;transition:all 218ms;font-size:12px;left:auto;right:-15px;padding-top:1px;padding-right:0;position:absolute;text-align:right;opacity:.5;color:#000;user-select:none;font-family:Arial;line-height:100%}#luckysheet-pivotTable-config-option-sumtype .luckysheet-submenu-arrow{right:-5px;font-size:16px;padding-top:0;color:#00f}#luckysheet-filter-byvalue-select table,#luckysheet-pivotTableFilter-byvalue-select table{table-layout:fixed}#luckysheet-filter-byvalue-select tr td,#luckysheet-pivotTableFilter-byvalue-select tr td{padding:2px 3px}#luckysheet-filter-byvalue-select tr:hover td,#luckysheet-pivotTableFilter-byvalue-select tr:hover td{background:#e1e1e1}.luckysheet-cols-menu .cf:after,.luckysheet-cols-menu .cf:before{content:"";display:table}.luckysheet-cols-menu .cf:after{clear:both}#luckysheet-filter-byvalue-select .yearBox .monthList,#luckysheet-pivotTableFilter-byvalue-select .yearBox .monthList{padding-left:20px}#luckysheet-filter-byvalue-select .yearBox .dayList,#luckysheet-pivotTableFilter-byvalue-select .yearBox .dayList{padding-left:20px}#luckysheet-filter-byvalue-select .yearBox .fa-caret-right,#luckysheet-pivotTableFilter-byvalue-select .yearBox .fa-caret-right{padding:0 2px;float:left;margin-top:3px;cursor:pointer}#luckysheet-filter-byvalue-select .count,#luckysheet-pivotTableFilter-byvalue-select .count{color:gray;margin-left:5px}#luckysheet-filter-byvalue-select input[type=checkbox],#luckysheet-pivotTableFilter-byvalue-select input[type=checkbox]{width:auto;height:auto;float:left}#luckysheet-filter-orderby-color-submenu{font-size:12px}#luckysheet-filter-orderby-color-submenu .title{padding:10px;font-weight:600;color:#333;background-color:#f4f4f4;text-align:center}#luckysheet-filter-orderby-color-submenu .item{padding:5px 40px 5px 20px;cursor:pointer;position:relative}#luckysheet-filter-orderby-color-submenu .item:hover{background-color:#d3d3d3}#luckysheet-filter-orderby-color-submenu .item label{display:block;width:70px;height:20px;border:1px solid #d1d1d1}#luckysheet-filter-orderby-color-submenu .item input[type=checkbox]{position:absolute;right:10px;top:6px}#luckysheet-copy-content{position:fixed;height:0;width:0;left:-100px;padding-left:999999px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:4px 8px;font-size:14px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#2d7ff9;border-color:transparent}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:transparent}.btn-primary:hover{color:#fff;background-color:#5391ff;border-color:transparent}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#5391ff}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:transparent}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:transparent}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-primary,.label-default,.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{background:#0188fb;border-color:transparent}.btn-primary:focus,.btn-primary:hover{background:#5391ff;border-color:transparent}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.luckysheet-change-size-line,.luckysheet-cols-change-size,.luckysheet-rows-change-size{position:absolute;z-index:12}.luckysheet-cols-change-size{width:5px;height:100%;background:#0188fb;cursor:ew-resize;opacity:0}.luckysheet-rows-change-size{width:100%;height:5px;background:#0188fb;cursor:ns-resize;opacity:0}.luckysheet-change-size-line{border-color:#0188fb;border-style:solid;z-index:15;display:none}.luckysheet-count-show{position:absolute;z-index:15;background:rgba(76,76,76,.8);color:#fff;padding:2px 3px;border-radius:3px;transition:all .3s;display:none;white-space:nowrap}.luckysheet-row-count-show{text-align:center}.luckysheet-row-count-show div{writing-mode:vertical-rl;writing-mode:vertical-rl;-ms-writing-mode:initial}.luckysheet-row-count-show div:last-child{writing-mode:initial}#luckysheet-sheet-list{max-height:60%;overflow:auto}#luckysheet-sheet-list .luckysheet-cols-menuitem{padding-left:0;padding-right:10px}#luckysheet-sheet-list .luckysheet-cols-menuitem .luckysheet-cols-menuitem-content{padding-left:5px}#luckysheet-sheet-list .icon{width:15px;margin-left:4px;display:inline-block}.luckysheet-input-box{position:absolute;font:normal normal 400 13px arial,sans,sans-serif;text-align:left;top:-10000px;max-height:9900px;max-width:9900px;border:2px #5292f7 solid;padding:0 2px;margin:0;z-index:15;resize:none;overflow:auto;overflow:initial;white-space:pre-wrap;outline:0;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.4);-moz-box-shadow:0 2px 5px rgba(0,0,0,.4);box-shadow:0 2px 5px rgba(0,0,0,.4);word-wrap:break-word}.luckysheet-cell-input{width:100%;height:100%;margin:0;outline:0;cursor:text;-webkit-user-modify:read-write-plaintext-only;white-space:pre-wrap;-webkit-transform:translateZ(0)}#luckysheet-rich-text-editor{-webkit-user-modify:read-write}.luckysheet-input-box-index{display:none;position:absolute;height:14px;line-height:16px;font-size:12px;padding:1px 6px;background-color:#5292f7;border-radius:2px;box-shadow:0 1px 2px rgba(0,0,0,.5);color:#fff}.luckysheet-modal-dialog{-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2);-moz-box-shadow:0 4px 16px rgba(0,0,0,.2);box-shadow:0 4px 16px rgba(0,0,0,.2);background:#fff;background-clip:padding-box;border:1px solid #acacac;border:1px solid rgba(0,0,0,.333);outline:0;position:absolute;color:#000;padding:30px 42px;z-index:100002}.luckysheet-modal-dialog-mask{position:absolute;height:100%;width:100%;background:#fff;opacity:.6;display:none;left:0;top:0;z-index:1010}.luckysheet-modal-dialog-title{background-color:#fff;color:#000;cursor:default;font-size:16px;font-weight:400;line-height:24px;margin:0 0 16px}.luckysheet-modal-dialog-title-close{height:11px;opacity:.7;padding:17px;position:absolute;right:0;top:0;width:11px;color:#d4d4d4;outline:0}.luckysheet-modal-dialog-chart{padding:20px 10px;webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.luckysheet-modal-dialog-resize{position:absolute;border:2px solid #0188fb;margin:0;padding:0;top:-2px;left:-2px;bottom:-2px;right:-2px;pointer-events:none}.luckysheet-modal-dialog-resize-item{position:absolute;height:6px;width:6px;background:#fff;border:2px solid #0188fb;pointer-events:all;border-radius:6px}.luckysheet-modal-dialog-resize-item-lt{left:-6px;top:-6px;cursor:se-resize}.luckysheet-modal-dialog-resize-item-mt{left:50%;top:-6px;margin-left:-4px;cursor:s-resize}.luckysheet-modal-dialog-resize-item-rt{right:-6px;top:-6px;cursor:ne-resize}.luckysheet-modal-dialog-resize-item-lm{top:50%;left:-6px;margin-top:-4px;cursor:w-resize}.luckysheet-modal-dialog-resize-item-rm{top:50%;right:-6px;margin-top:-4px;cursor:w-resize}.luckysheet-modal-dialog-resize-item-lb{left:-6px;bottom:-6px;cursor:ne-resize}.luckysheet-modal-dialog-resize-item-mb{left:50%;bottom:-6px;margin-left:-4px;cursor:s-resize}.luckysheet-modal-dialog-resize-item-rb{right:-6px;bottom:-6px;cursor:se-resize}.luckysheet-modal-dialog-controll{position:absolute;margin:0;padding:0;right:-35px;font-size:14px;top:0}.luckysheet-modal-controll-btn{height:13px;padding:8px;width:13px;color:#d4d4d4;outline:0;border:1px solid #b6b6b6;display:block;background:#fff;margin-bottom:3px;cursor:pointer;transition:all .2s;-moz-transition:all .2s;-webkit-transition:all .2s;-o-transition:all .2s}.luckysheet-modal-controll-btn:hover{border:1px solid #a1a1a1;color:#0188fb}.luckysheet-modal-controll-btn:active{border:1px solid #bbb;background:#efefef;color:#0188fb}.luckysheet-modal-controll-del{font-size:16px}.luckysheet-modal-controll-max-close{font-size:22px;width:42px;height:42px;line-height:42px;background:#383838;opacity:.7;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;color:#fff;position:absolute;right:0;top:0;z-index:100000;text-align:center}.luckysheet-modal-controll-max-close:hover{background:#0188fb;cursor:pointer}.luckysheet-sort-item-close{margin-right:3px;font-size:14px;color:#bbb;cursor:pointer}.luckysheet-sort-item-close:hover{color:#494949}.luckysheet-modal-dialog-title-close:hover{color:#5e5e5e;cursor:pointer}.luckysheet-modal-dialog-content{background-color:#fff;line-height:1.4em;word-wrap:break-word}.luckysheet-modal-dialog-buttons{margin-top:10px}.luckysheet-modal-dialog-buttons button{margin-right:10px}.luckysheet-modal-dialog-title-text span{font-family:Arial}.luckysheet-sort-modal{font-size:12px}.luckysheet-sort-modal label input,.luckysheet-sort-modal label span{vertical-align:middle}.luckysheet-sort-modal table,.luckysheet-sort-modal>div{margin-bottom:10px}.luckysheet-sort-modal table tr{margin-bottom:10px}.luckysheet-sort-modal table tr td{padding:5px;white-space:nowrap;border-top:1px solid #ffc6c6}.luckysheet-sort-modal table tr td>div:first-child{margin-bottom:8px}.luckysheet-sort-modal table tr td select{max-width:180px;min-width:50px}.luckysheet-sort-modal table tr:first-child td{border-top:none}.luckysheet-filter-options{color:#897bff;cursor:pointer;position:absolute;z-index:20;border:1px solid #897bff;border-radius:3px;top:3px;margin-left:0;display:none;padding:0 4px;font-size:12px;height:15px;background:#fff}.luckysheet-filter-options:hover{color:#fff;border:1px solid #fff;background:#897bff}.luckysheet-filter-options-active{color:#fff;border:1px solid #897bff;background:#897bff}.luckysheet-flat-menu-button{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(to bottom,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(to bottom,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(to bottom,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(to bottom,#f5f5f5,#f1f1f1);background-image:linear-gradient(to bottom,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;color:#333;cursor:default;font-size:11px;font-weight:700;line-height:27px;list-style:none;margin:0 2px;min-width:46px;outline:0;padding:0 18px 0 6px;text-align:left;text-decoration:none;position:relative;padding-left:15px}.luckysheet-flat-menu-button:hover{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(to bottom,#f1f1f1,#f5f5f5);background-image:-moz-linear-gradient(to bottom,#f1f1f1,#f5f5f5);background-image:-ms-linear-gradient(to bottom,#f1f1f1,#f5f5f5);background-image:-o-linear-gradient(to bottom,#f1f1f1,#f5f5f5);background-image:linear-gradient(to bottom,#f1f1f1,#f5f5f5);border:1px solid #d0d0d0;color:#000}.luckysheet-flat-menu-button div{display:inline-block;vertical-align:middle;position:absolute;right:15px}.luckysheet-data-visualization{width:60%;min-width:860px}.luckysheet-data-pivotTable-selection,.luckysheet-data-visualization-selection{width:30%;min-width:200px;display:none}.luckysheet-data-visualization-chart{width:50%;height:50%}.luckysheet-data-visualization-chart .luckysheet-modal-dialog-content{width:100%;height:100%;overflow:hidden}.luckysheet-datavisual-modal{font-size:12px;height:100%;width:100%}.luckysheet-datavisual-left{display:inline-block;width:100%;height:100%;position:relative;overflow:hidden}.luckysheet-datavisual-tabs{border-bottom:1px solid #dedede;width:80%;height:26px;padding-left:20px}.luckysheet-datavisual-tabs .luckysheet-datavisual-tab{padding:0 5px;text-align:center;display:inline-block;cursor:pointer;border:1px solid #fff;border-bottom:none;height:24px;line-height:24px;background:#fff;color:#777}.luckysheet-datavisual-tabs .luckysheet-datavisual-tab:hover{color:#000}.luckysheet-datavisual-tabs .luckysheet-datavisual-tab-active{border:1px solid #dedede;border-bottom:none;cursor:default;height:26px;color:#000}.luckysheet-datavisual-tab-content{position:absolute;top:28px;bottom:0;width:100%;display:none}.luckysheet-datavisual-quick-menu{width:90px;overflow:auto;margin-top:5px}.luckysheet-datavisual-quick-menu::-webkit-scrollbar{display:none}.luckysheet-datavisual-quick-menu>div{text-align:left;padding:4px 4px;border-right:3px solid #fff;color:#777;cursor:pointer;line-height:1.4em;word-wrap:break-word}.luckysheet-datavisual-quick-menu>div:hover{color:#000}.luckysheet-datavisual-quick-menu>div i{width:15px}.luckysheet-datavisual-quick-menu>div:hover i{color:#ff7e7e}.luckysheet-datavisual-quick-menu>div.luckysheet-datavisual-quick-menu-active{border-right:3px solid #ff7e7e;color:#000;font-weight:700}.luckysheet-datavisual-quick-menu>div.luckysheet-datavisual-quick-menu-active:hover i{color:#000}.luckysheet-datavisual-quick-range{padding:5px 0}.luckysheet-datavisual-range-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid silver;min-width:20px;width:100%;max-width:200px;display:inline-block}.luckysheet-datavisual-range-container-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,.3);outline:0}.luckysheet-datavisual-range-input,.luckysheet-datavisual-range-input:focus{background:0 0!important;border:none!important;box-sizing:border-box;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;height:25px;margin:0;outline:0!important;padding:1px 8px!important;width:100%}.luckysheet-datavisual-range-button-container{overflow:hidden;padding:0 0 0 8px;text-align:right;width:21px}.luckysheet-datavisual-range-button-container div{padding:2px 10px 0 10px;font-size:18px;cursor:pointer;color:#6598f3}.luckysheet-datavisual-range-button-container div:hover{color:#ff7e7e}.luckysheet-datavisual-quick-m{margin-top:5px}.luckysheet-datavisual-quick-list{left:90px;right:0;bottom:0;top:110px;position:absolute;overflow:auto;border-top:1px solid #e5e5e5;padding:5px 3px 35px 3px}.luckysheet-datavisual-quick-list-title{padding:4px 6px;background:#e5e5e5;margin-top:10px}.luckysheet-datavisual-quick-list-ul{overflow:hidden}.luckysheet-datavisual-quick-list-item{display:inline-block;margin:5px 8px;border:1px solid #dadada;width:100px;height:80px}.luckysheet-datavisual-quick-list-item:hover{border:1px solid #ff7e7e;box-shadow:0 0 20px #ff7e7e}.luckysheet-datavisual-quick-list-item img{display:inline-block;width:100px;height:80px}.luckysheet-datavisual-quick-list-item-active{border:1px solid #6598f3;box-shadow:0 0 20px #6598f3}.jfk-tooltip{z-index:300000}.jfk-tooltip-hide{-webkit-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;-moz-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;-o-transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;transition:visibility .13s,opacity .13s ease-out,left 0 linear .13s,top 0 linear .13s;opacity:0;left:20px!important;top:20px!important;visibility:hidden!important}.jfk-tooltip{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:visibility 0,opacity .13s ease-in;-moz-transition:visibility 0,opacity .13s ease-in;-o-transition:visibility 0,opacity .13s ease-in;transition:visibility 0,opacity .13s ease-in;background-color:#2a2a2a;border:1px solid #fff;color:#fff;cursor:default;display:block;font-size:11px;font-weight:700;margin-left:-1px;opacity:1;padding:7px 9px;position:absolute;visibility:visible;white-space:pre-wrap;word-break:break-all;word-break:break-word}.jfk-tooltip-arrowup{top:-6px}.jfk-tooltip-arrow{pointer-events:none;position:absolute}.jfk-tooltip-arrow .jfk-tooltip-arrowimplafter{border:5px solid}.jfk-tooltip-arrow .jfk-tooltip-arrowimplbefore{border:6px solid}.jfk-tooltip-arrow .jfk-tooltip-arrowimplafter,.jfk-tooltip-arrow .jfk-tooltip-arrowimplbefore{content:'';display:block;height:0;position:absolute;width:0}.jfk-tooltip-arrowup .jfk-tooltip-arrowimplafter{border-top-width:0;top:1px}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplafter,.jfk-tooltip-arrowup .jfk-tooltip-arrowimplafter{border-color:#2a2a2a transparent;left:-5px}.jfk-tooltip-arrowup .jfk-tooltip-arrowimplbefore{border-top-width:0}.jfk-tooltip-arrowdown .jfk-tooltip-arrowimplbefore,.jfk-tooltip-arrowup .jfk-tooltip-arrowimplbefore{border-color:#fff transparent;left:-6px}.luckysheet-datavisual-config{position:relative;width:100%;height:97%;overflow:auto;top:0}.luckysheet-datavisual-config input{outline:0}.luckysheet-datavisual-config .luckysheet-datavisual-accordion-title{position:relative;width:97%;height:33px;background:#f5f5f5;border:1px solid #e5e5e5;margin-top:30px;line-height:30px;font-weight:700;color:#d14836;cursor:pointer}.luckysheet-datavisual-config .luckysheet-datavisual-accordion-title:hover{background:#efefef;border:1px solid #e0e0e0}.luckysheet-datavisual-config .luckysheet-datavisual-accordion-content{position:relative;width:97%;border:1px solid #e5e5e5;border-top:1px solid #fff;display:none;color:#505050;padding-bottom:20px}.luckysheet-datavisual-config-input,.luckysheet-datavisual-config-input-no{background:#fff;border:1px solid #d9d9d9;border-top:1px solid silver;min-width:50px;width:90%;display:inline-block;height:24px;line-height:24px;padding:3px}.luckysheet-datavisual-config-input-no:focus,.luckysheet-datavisual-config-input:focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,.3);outline:0}.luckysheet-datavisual-content-row{margin-left:15px;margin-bottom:5px;margin-top:15px;height:30px;line-height:30px}.luckysheet-datavisual-content-column{display:inline-block;position:relative}.luckysheet-datavisual-content-column-title{text-align:left;font-size:14px}.luckysheet-datavisual-content-column-right{text-align:right}.luckysheet-datavisual-content-rowsplit{height:5px;border-top:1px solid #e5e5e5;width:100%;margin-top:25px}.luckysheet-datavisual-content-rowsplit-sub{height:2px;border-top:1px dashed #e5e5e5;width:90%;margin:0 auto;margin-top:18px;text-align:center}.sp-replacer{padding:2px;border:solid 1px #e5e5e5;background:#f5f5f5}.ui-visual-focus{box-shadow:none}.luckysheet-datavisual-config-slider,.luckysheet-datavisual-config-slider-range{width:70%;display:inline-block}.luckysheet-datavisual-config-slider-range .luckysheet-slider-handle{width:45px;height:26px;top:50%;margin-top:-13px;text-align:center;line-height:26px}.luckysheet-datavisual-content-row-subtitle{display:none}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:48%}.luckysheet-datavisual-content-column-italic{font-style:italic;font-weight:700;font-family:'Times New Roman',Times,serif}.luckysheetChartAxisShow{display:none}.luckysheet-datavisual-chart-axistitle-show{display:none}.luckysheetChartseriesShow{display:none}#luckysheetswichxy-button,#piecutselect-button{width:70%}.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper{padding:.5em 0 .5em 3em}.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item .ui-icon{height:26px;width:26px;top:.1em;background-image:none}#luckysheetscatterselectshow-menu .ui-state-active,#luckysheetswichseries-menu .ui-state-active,#pie0cutselect-menu .ui-state-active,#pie1cutselect-menu .ui-state-active,#pie2cutselect-menu .ui-state-active{border:1px solid #f5f5f5;background:#f5f5f5;color:#333}.ui-front{z-index:100003}.luckysheet-datavisual-skin-menu{top:5px;position:absolute;left:0;width:90%;height:30px}#luckysheet-chart-theme-content{height:21px;width:120px}.luckysheet-datavisual-skin-c{position:absolute;left:0;top:38px;bottom:0;width:100%;overflow:auto}.luckysheet-datavisual-skin-c .luckysheet-datavisual-skin-item{display:inline-block;width:46%;height:152px;margin-right:5px;border:4px solid #efefef;border-radius:4px;position:relative;cursor:pointer}.luckysheet-datavisual-skin-c .luckysheet-datavisual-skin-item-more{display:inline-block;width:94%;height:32px;position:relative;cursor:pointer;font-size:20px;line-height:32px;margin-bottom:20px;text-align:center}.luckysheet-datavisual-skin-item .luckysheet-datavisual-skin-canvas,.luckysheet-datavisual-skin-item .luckysheet-datavisual-skin-cover{position:absolute;width:100%;height:100%;bottom:0}.luckysheet-datavisual-skin-item .luckysheet-datavisual-skin-cover{background-color:rgba(0,0,0,.4);color:#fff;font-size:14px;height:30%;transition:opacity .15s ease;-moz-transition:opacity .15s ease;-webkit-transition:opacity .15s ease;-o-transition:opacity .15s ease}.luckysheet-datavisual-skin-item:hover .luckysheet-datavisual-skin-cover{opacity:1;z-index:2}.luckysheet-datavisual-skin-cover .luckysheet-datavisual-skin-cover-txt{position:absolute;width:80%;height:80%;top:10%;left:10%;text-align:center}.luckysheet-chart-point-config{position:relative;width:100%;height:100%;margin:0;font-size:12px}.luckysheet-chart-point-config-set{position:absolute;width:60%;height:100%;left:0;top:0}.luckysheet-chart-point-config-left{position:absolute;height:100%;width:50%;left:0;top:0}.luckysheet-chart-point-config-left-top{position:absolute;top:0;height:120px;width:100%}.luckysheet-chart-point-searchcondition{position:absolute;top:10px;bottom:10px;left:10px;right:10px}.luckysheet-chart-point-config-left-mid{position:absolute;top:120px;height:25px;width:100%;text-align:left;margin-left:20px;line-height:35px}.luckysheet-chart-point-config-left-mid span{color:#00f;cursor:pointer;text-decoration:underline;font-size:12px}.luckysheet-chart-point-config-left-bottom{position:absolute;top:0;bottom:0;margin-top:145px;width:100%}.luckysheet-chart-point-searchitem-c{position:absolute;width:100%;height:100%;overflow:hidden;overflow-y:auto;cursor:default}.luckysheet-chart-point-searchitem{display:inline-block;margin-left:5px;margin-top:5px;width:90px;border:2px solid #f5f5f5;background:#fff;text-align:center;padding:5px 0;user-select:none;cursor:default;position:relative}.luckysheet-chart-point-searchitem-selected{position:absolute;color:#616161;left:-6px;top:-10px;font-size:20px;display:none;font-weight:400}.luckysheet-chart-point-searchitem-active{box-shadow:0 0 4px #656565}.luckysheet-chart-point-searchitem-active .luckysheet-chart-point-searchitem-selected{display:block}.luckysheet-chart-point-searchitem-name{font-size:12px;cursor:default;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.luckysheet-chart-point-searchitem-dim{font-size:12px;opacity:.7;cursor:default;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#luckysheet-chart-point-selectedhelp{pointer-events:none;position:absolute;border:1px dotted #535353}.luckysheet-chart-point-config-right{position:absolute;height:100%;width:50%;top:0;right:0}.luckysheet-chart-point-itemconfig{position:absolute;top:10px;bottom:10px;left:10px;right:10px;overflow:auto}.luckysheet-chart-point-config-chart{position:absolute;width:40%;height:100%;right:0;top:0}.luckysheet-chart-point-config-chart-c{width:100%;height:80%;top:10%;position:relative}@media (max-width:776px){.luckysheet-chart-point-config-set{width:90%}.luckysheet-chart-point-config-chart{width:10%}}@media (min-width:768px){.luckysheet-chart-point-config-set{width:80%}.luckysheet-chart-point-config-chart{width:20%}}@media (min-width:1024px){.luckysheet-chart-point-config-set{width:70%}.luckysheet-chart-point-config-chart{width:30%}}@media (min-width:1280px){.luckysheet-chart-point-config-set{width:60%}.luckysheet-chart-point-config-chart{width:40%}}@media (min-width:1680px){.luckysheet-chart-point-config-set{width:50%}.luckysheet-chart-point-config-chart{width:50%}}.luckysheet-modal-dialog-slider{top:1px;bottom:1px;position:absolute;right:0;width:260px;border:1px solid #e5e5e5;z-index:1004;box-shadow:0 2px 4px rgba(0,0,0,.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.luckysheet-modal-dialog-slider .luckysheet-modal-dialog-slider-title{background:#333;color:#fff;height:39px;width:100%;position:absolute;top:0;left:0;line-height:39px;font-size:13px}.luckysheet-modal-dialog-slider .luckysheet-modal-dialog-slider-title>span:first-child{margin-left:5px;font-weight:700}.luckysheet-modal-dialog-slider .luckysheet-modal-dialog-slider-title>span:last-child{position:relative;float:right;margin-right:20px;cursor:pointer}.luckysheet-modal-dialog-slider-content{background:#efefef;margin-top:39px;width:100%;position:absolute;top:0;bottom:0;font-size:12px}.luckysheet-modal-dialog-slider-range{background:#e1e1de;color:#1b1b19;height:40px;font-size:13px;line-height:40px}.luckysheet-modal-dialog-slider-range>div:first-child{font-weight:700;overflow:hidden;text-overflow:ellipsis;float:left;max-width:170px;margin-right:10px;margin-left:5px;white-space:nowrap}.luckysheet-modal-dialog-slider-range>div:last-child{color:#00f;cursor:pointer;float:left}.luckysheet-modal-dialog-slider-list{width:250px;height:320px;overflow-y:scroll;margin:5px 0;margin-left:5px;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;background:#fff}.luckysheet-modal-dialog-slider-list-title{height:20px;line-height:25px;padding:0 5px}.luckysheet-modal-dialog-slider-list .luckysheet-modal-dialog-slider-list-item{padding:0 4px;position:relative;width:228px;height:25px;user-select:none;border:1px solid #fff}.luckysheet-modal-dialog-slider-list .luckysheet-modal-dialog-slider-list-item:hover{background:#fff6cb;border:1px solid #ffe463}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-name{cursor:pointer;height:25px;line-height:25px;cursor:move;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:absolute;left:22px;right:40px;top:0}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-selected{width:20px;cursor:pointer;text-align:center;position:absolute;left:0;top:0;height:25px}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-selected i{margin-top:4px;font-size:16px}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-selected div{border:1px solid #9c9c9c;top:4px;left:1px;position:absolute;height:14px;width:14px;-moz-box-shadow:1px 1px 1px #dbdbdb inset;-webkit-box-shadow:1px 1px 1px #dbdbdb inset;box-shadow:1px 1px 1px #dbdbdb inset}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-selected div:hover{border:1px solid #5e5e5e}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filtered{width:20px;cursor:pointer;text-align:center;position:absolute;right:20px;top:2px;height:25px;display:none}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filtered i{margin-top:2px;font-size:16px}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filtered:hover i{color:#fb8686}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filtered i.fa-times{right:0;bottom:3px;color:red;font-size:9px;position:absolute}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filter{width:20px;cursor:pointer;text-align:center;position:absolute;right:0;top:0;height:25px}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filter i{margin-top:2px;font-size:16px}.luckysheet-modal-dialog-slider-list .luckysheet-slider-list-item-filter:hover i{color:#fb8686}.luckysheet-modal-dialog-slider-config-c{width:100%;position:absolute;margin-top:390px;top:0;bottom:3px}.luckysheet-modal-dialog-slider-config{height:50%;width:50%;position:absolute}.luckysheet-modal-dialog-slider-config>div:first-child{color:#1b1b19;font-size:13px;height:20px;line-height:20px;padding-left:5px}.luckysheet-modal-dialog-slider-config>div:first-child span{font-weight:700;font-weight:700;overflow:hidden}.luckysheet-modal-dialog-slider-config .luckysheet-modal-dialog-slider-config-list{position:absolute;margin-top:22px;margin-left:5px;left:0;right:5px;top:0;bottom:3px;border:1px solid #e5e5e5;user-select:none;overflow-y:auto;background:#fff}.luckysheet-modal-dialog-slider-config-list .luckysheet-modal-dialog-slider-config-item{position:relative;height:19px;line-height:19px;font-size:12px;border:1px solid #88adfd;background:#aac1fe;margin:2px}.luckysheet-modal-dialog-slider-config-list .luckysheet-modal-dialog-slider-config-item:hover{border:1px solid #0188fb;background:#5f9afc}.luckysheet-modal-dialog-slider-config-item-txt{position:absolute;height:100%;left:5px;right:25px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:move}.luckysheet-modal-dialog-slider-config-item-icon{position:absolute;height:100%;width:15px;right:0;top:-4px;cursor:pointer;font-size:14px}.luckysheet-modal-dialog-slider-config-item-icon:hover{color:#fa7272}.luckysheet-modal-dialog-config-filter{top:0;left:0}.luckysheet-modal-dialog-config-column{top:0;left:50%}.luckysheet-modal-dialog-config-row{top:50%;left:0}.luckysheet-modal-dialog-config-value{top:50%;left:50%}#luckysheet-modal-dialog-slider-pivot-move{position:absolute;max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background:#fff;border:1px dotted #000;color:#000;font-size:14px;opacity:.6;z-index:1005;padding:3px 8px;pointer-events:none;user-select:none}.luckysheet-modal-dialog-slider-chart{width:445px}.luckysheet-modal-dialog-slider-chart .luckysheet-modal-dialog-slider-title{background:#b94045}.luckysheet-modal-dialog-slider-chart .luckysheet-modal-dialog-slider-content{background:#fff}#luckysheet-dialog-pivotTable-clearitem{color:#00f;cursor:pointer;float:right;margin-right:30px}.luckysheet-freezebar-drop,.luckysheet-freezebar-handle{position:absolute;z-index:999}.luckysheet-freezebar-vertical-handle{width:4px;display:none}.luckysheet-freezebar-vertical-drop{width:4px}.luckysheet-freezebar-active .luckysheet-freezebar-vertical-handle{display:block;z-index:1003}.luckysheet-freezebar-vertical-handle-bar{width:2px;background:#dbe5f7;border-color:#a5c6fe;border-style:solid;border-width:0 1px;opacity:.45;margin-top:19px;top:0;bottom:0}.luckysheet-freezebar-vertical-handle-title{width:4px;background:#9dbefb;opacity:.8;height:19px;top:0}.luckysheet-freezebar-drop-bar,.luckysheet-freezebar-handle-bar{position:absolute;z-index:7}.luckysheet-freezebar-vertical-drop-bar{width:2px;background:rgba(0,0,0,.45);border-width:2px 1px 2px 2px;margin-top:19px;top:0;bottom:0}.luckysheet-freezebar-vertical-drop-title{width:2px;background:#bcbdbc;height:19px;top:0}.luckysheet-freezebar-active .luckysheet-freezebar-vertical-drop-bar,.luckysheet-freezebar-hover .luckysheet-freezebar-vertical-drop-bar{background:#c1c1c1;width:4px}.luckysheet-freezebar-active .luckysheet-freezebar-vertical-drop-title,.luckysheet-freezebar-hover .luckysheet-freezebar-vertical-drop-title{background:#5d88db;width:4px}.luckysheet-freezebar-horizontal-handle{height:4px;display:none}.luckysheet-freezebar-horizontal-drop{height:4px}.luckysheet-freezebar-active .luckysheet-freezebar-horizontal-handle{display:block;z-index:1003}.luckysheet-freezebar-horizontal-handle-bar{height:2px;background:#dbe5f7;border-color:#a5c6fe;border-style:solid;border-width:1px 0;opacity:.45;margin-left:45px;left:0;right:0}.luckysheet-freezebar-horizontal-handle-title{height:4px;background:#9dbefb;opacity:.8;width:45px;left:0}.luckysheet-freezebar-horizontal-drop-bar{height:2px;overflow:hidden;background:rgba(0,0,0,.45);border-width:2px 2px 1px 2px;margin-left:45px;left:0;right:0}.luckysheet-freezebar-horizontal-drop-title{height:2px;background:#bcbdbc;width:45px;left:0}.luckysheet-freezebar-active .luckysheet-freezebar-horizontal-drop-bar,.luckysheet-freezebar-hover .luckysheet-freezebar-horizontal-drop-bar{background:#c1c1c1;height:4px}.luckysheet-freezebar-active .luckysheet-freezebar-horizontal-drop-title,.luckysheet-freezebar-hover .luckysheet-freezebar-horizontal-drop-title{background:#5d88db;height:4px}#luckysheet-functionbox-container{height:100%;padding-left:10px;overflow:hidden;position:absolute;padding:0;top:0;left:185px;right:10px;border-left:1px solid #e5e5e5}#luckysheet-functionbox-container>div{height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#luckysheet-functionbox{bottom:6px;left:0;position:absolute;right:0;top:6px;resize:none;font-family:arial,sans,sans-serif;font-size:14px;line-height:14px;background-color:#fff;padding:0 5px}#luckysheet-functionbox .luckysheet-functionbox-cell-input{word-wrap:break-word;-webkit-nbsp-mode:space;-webkit-line-break:after-white-space}.luckysheet-functionbox-cell-input{width:100%;height:100%;margin:0;outline:0;cursor:text;-webkit-user-modify:read-write-plaintext-only;white-space:pre-wrap;-webkit-transform:translateZ(0);background-color:#fff}.luckysheet-formula-text-color{color:#000}.luckysheet-formula-text-string{color:#228b22}.luckysheet-formula-search-c{position:absolute;left:50%;top:50%;border:1px solid rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);color:#535353;font-size:12px;background:#fff;z-index:1003;width:300px;display:none}.luckysheet-formula-search-c .luckysheet-formula-search-item{background:#fff;padding:5px 10px;cursor:pointer}.luckysheet-formula-search-c .luckysheet-formula-search-item .luckysheet-formula-search-detail{display:none;color:#444}.luckysheet-formula-search-c .luckysheet-formula-search-item .luckysheet-formula-search-func{color:#222;font-size:14px}.luckysheet-formula-search-c .luckysheet-formula-search-item-active{display:block;border-top:1px solid #ebebeb;border-bottom:1px solid #ebebeb;background:#f5f5f5}.luckysheet-formula-search-c .luckysheet-formula-search-item-active .luckysheet-formula-search-detail{display:block}.luckysheet-formula-help-c{display:none;position:absolute;left:20%;top:20%;border:1px solid rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);color:#535353;font-size:12px;background:#fff;z-index:1003;width:300px}.luckysheet-formula-help-c .luckysheet-formula-help-content{max-height:300px;overflow-y:scroll}.luckysheet-formula-help-content-example{margin-top:5px}.luckysheet-formula-help-title{display:block;border-top:1px solid #ebebeb;border-bottom:1px solid #ebebeb;background:#f5f5f5;padding:2px 10px;font-size:14px}.luckysheet-formula-help-title-formula{width:250px;word-break:break-word}.luckysheet-arguments-help-section{margin-top:5px;margin-bottom:5px;color:#222}.luckysheet-arguments-help-section-title{padding:1px 10px;color:#666}.luckysheet-arguments-help-parameter-content{padding:1px 10px;display:inline-block;word-wrap:break-word}.luckysheet-arguments-help-formula{padding:1px 10px;font-size:14px}.luckysheet-arguments-help-parameter-active{background-color:#fff9b2}.luckysheet-formula-help-collapse{position:absolute;top:0;right:25px;font-size:16px;cursor:pointer;color:#bbb}.luckysheet-formula-help-close{position:absolute;top:0;right:5px;font-size:16px;cursor:pointer;color:#bbb}.luckysheet-formula-help-close:hover,.luckysheet-formula-help-collapse:hover{color:#555}.luckysheetLoader{font-size:20px;width:1em;height:1em;border-radius:50%;text-indent:-9999em;position:absolute;top:50%;left:50%;animation:load-effect 1s infinite linear}.luckysheetLoaderGif{width:8em;height:8em;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-100%);-moz-transform:translate(-50%,-100%);-o-transform:translate(-50%,-100%);transform:translate(-50%,-100%);background-image:url(loading.gif);background-repeat:no-repeat;background-position:center;background-size:100% 100%}@keyframes load-effect{0%{box-shadow:0 -3em 0 .2em #0188fb,2em -2em 0 0 #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 -.5em #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 0 #0188fb}12.5%{box-shadow:0 -3em 0 0 #0188fb,2em -2em 0 .2em #0188fb,3em 0 0 0 #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 -.5em #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 -.5em #0188fb}25%{box-shadow:0 -3em 0 -.5em #0188fb,2em -2em 0 0 #0188fb,3em 0 0 .2em #0188fb,2em 2em 0 0 #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 -.5em #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 -.5em #0188fb}37.5%{box-shadow:0 -3em 0 -.5em #0188fb,2em -2em 0 -.5em #0188fb,3em 0 0 0 #0188fb,2em 2em 0 .2em #0188fb,0 3em 0 0 #0188fb,-2em 2em 0 -.5em #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 -.5em #0188fb}50%{box-shadow:0 -3em 0 -.5em #0188fb,2em -2em 0 -.5em #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 0 #0188fb,0 3em 0 .2em #0188fb,-2em 2em 0 0 #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 -.5em #0188fb}62.5%{box-shadow:0 -3em 0 -.5em #0188fb,2em -2em 0 -.5em #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 0 #0188fb,-2em 2em 0 .2em #0188fb,-3em 0 0 0 #0188fb,-2em -2em 0 -.5em #0188fb}75%{box-shadow:0 -3em 0 -.5em #0188fb,2em -2em 0 -.5em #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 0 #0188fb,-3em 0 0 .2em #0188fb,-2em -2em 0 0 #0188fb}87.5%{box-shadow:0 -3em 0 0 #0188fb,2em -2em 0 -.5em #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 0 #0188fb,-3em 0 0 0 #0188fb,-2em -2em 0 .2em #0188fb}100%{box-shadow:0 -3em 0 .2em #0188fb,2em -2em 0 0 #0188fb,3em 0 0 -.5em #0188fb,2em 2em 0 -.5em #0188fb,0 3em 0 -.5em #0188fb,-2em 2em 0 -.5em #0188fb,-3em 0 0 -.5em #0188fb,-2em -2em 0 0 #0188fb}}.luckysheetpopover{position:absolute;background:rgba(0,0,0,.65);color:#fff;font-size:18px;padding:20px 100px;text-align:center;z-index:10000;border-radius:4px;user-select:none;display:none}.luckysheetpopover .luckysheetpopover-btn{position:absolute;right:10px;top:50%;margin-top:-12px;border:1px solid #fff;border-radius:4px;padding:2px 4px;cursor:pointer;font-size:14px}.luckysheetpopover .luckysheetpopover-btn:hover{border:1px solid #fea2a2;color:#fea2a2}.luckysheetPaintCursor{cursor:url(paint_24px.ico),auto}#luckysheet-search-replace .tabBox{margin-top:20px;font-size:0}#luckysheet-search-replace .tabBox span{display:inline-block;text-align:center;width:100px;border:1px solid #d4d4d4;font-size:14px;line-height:2}#luckysheet-search-replace .tabBox span.on{background-color:#8c89fe;border-color:#726efe;color:#fff}#luckysheet-search-replace .ctBox{padding:5px 10px;border:solid 1px #d4d4d4;font-size:14px}#luckysheet-search-replace .inputBox{height:90px;position:relative}#luckysheet-search-replace .inputBox .textboxs{height:30px;line-height:30px}#luckysheet-search-replace .inputBox .checkboxs{height:90px;position:absolute;right:0;top:0}#luckysheet-search-replace .inputBox .checkboxs div{height:30px;line-height:30px}#luckysheet-search-replace .inputBox .checkboxs input[type=checkbox]{float:left;margin-top:9px}#luckysheet-search-replace .btnBox{margin-top:10px}#luckysheet-search-replace .btnBox button{margin:0 2.5px}#luckysheet-search-replace #searchAllbox{height:210px;border:1px solid #d4d4d4;margin-top:10px;overflow-y:auto;position:relative}#luckysheet-search-replace #searchAllbox .boxTitle{width:100%;height:30px;line-height:29px;padding:0 5px;background-color:#fff;border-bottom:1px solid #d4d4d4;box-sizing:border-box;position:sticky;left:0;top:0}#luckysheet-search-replace #searchAllbox .boxTitle span{display:inline-block;text-align:center}#luckysheet-search-replace #searchAllbox .boxTitle span:nth-of-type(1){width:25%}#luckysheet-search-replace #searchAllbox .boxTitle span:nth-of-type(2){width:25%}#luckysheet-search-replace #searchAllbox .boxTitle span:nth-of-type(3){width:50%}#luckysheet-search-replace #searchAllbox .boxMain .boxItem{height:30px;line-height:29px;border-bottom:1px solid #d4d4d4;padding:0 5px;box-sizing:border-box}#luckysheet-search-replace #searchAllbox .boxMain .boxItem.on{background-color:#8c89fe;color:#fff}#luckysheet-search-replace #searchAllbox .boxMain .boxItem span{display:block;text-align:center;float:left}#luckysheet-search-replace #searchAllbox .boxMain .boxItem span:nth-of-type(1){width:25%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#luckysheet-search-replace #searchAllbox .boxMain .boxItem span:nth-of-type(2){width:25%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#luckysheet-search-replace #searchAllbox .boxMain .boxItem span:nth-of-type(3){width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#luckysheet-search-formula{font-size:12px}#luckysheet-search-formula .inpbox{margin-bottom:5px}#luckysheet-search-formula .inpbox label{display:block;margin-bottom:5px}#luckysheet-search-formula .inpbox input{width:100%;height:24px;line-height:24px;border:1px solid #d4d4d4;padding:0 10px;box-sizing:border-box;font-size:12px}#luckysheet-search-formula .selbox{margin-bottom:5px}#luckysheet-search-formula .selbox select{width:50%;height:24px;line-height:24px;border:1px solid #d4d4d4;box-sizing:border-box;font-size:12px}#luckysheet-search-formula .listbox label{display:block;margin-bottom:5px}#formulaTypeList{width:300px;height:170px;border:1px solid #d4d4d4;overflow-y:scroll}#formulaTypeList .listBox{padding:5px;border-bottom:1px solid #d4d4d4}#formulaTypeList .listBox.on{background-color:#8c89fe;color:#fff}#formulaTypeList .listBox span:nth-of-type(1){display:block}#formulaTypeList .listBox span:nth-of-type(2){display:block}#luckysheet-search-formula-parm{width:502px;font-size:12px}#luckysheet-search-formula-parm .parmListBox{width:500px;padding:5px 0;border:1px solid #d4d4d4}#luckysheet-search-formula-parm .parmBox{height:30px;line-height:30px;margin-bottom:5px}#luckysheet-search-formula-parm .parmBox:last-child{margin-bottom:0}#luckysheet-search-formula-parm .parmBox .name{width:90px;height:30px;padding:0 5px;float:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#luckysheet-search-formula-parm .parmBox .txt{width:198px;height:28px;border:1px solid #d4d4d4;float:left}#luckysheet-search-formula-parm .parmBox .txt input{width:150px;height:28px;padding:0 10px;border:none;outline-style:none;float:left}#luckysheet-search-formula-parm .parmBox .txt i{float:right;margin-top:8px;margin-right:5px}#luckysheet-search-formula-parm .fa-table{cursor:pointer;color:#6598f3}#luckysheet-search-formula-parm .fa-table:hover{color:#ff7e7e}#luckysheet-search-formula-parm .parmBox .val{width:190px;height:30px;line-height:30px;padding:0 5px;float:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#luckysheet-search-formula-parm .formulaDetails{padding:5px}#luckysheet-search-formula-parm .parmDetailsBox{max-height:100px;padding:5px 0 5px 20px;overflow-y:scroll}#luckysheet-search-formula-parm .parmDetailsBox span{display:inline-block}#luckysheet-search-formula-parm .result{padding:5px;border-top:1px solid #d4d4d4}#textCellColor{border:1px solid #d4d4d4;padding:5px 10px}#textCellColor .colorbox{height:30px;line-height:30px;margin-bottom:10px}#textCellColor .colorbox input[type=checkbox]{float:left;margin-top:10px}#textCellColor .colorbox label{display:inline-block;width:80px}#luckysheet-multiRange-dialog input,#luckysheet-singleRange-dialog input{border:1px solid #d4d4d4;padding:0 10px;height:30px}#luckysheet-conditionformat-dialog{font-size:12px}#luckysheet-conditionformat-dialog .box .boxTitleOne{margin:5px 0;font-weight:600}#luckysheet-conditionformat-dialog .box .inpbox{width:198px;height:28px;border:1px solid #d4d4d4}#luckysheet-conditionformat-dialog .box .inpbox input{width:150px;height:28px;padding:0 10px;border:none;outline-style:none;float:left}#luckysheet-conditionformat-dialog .box .inpbox2{float:left;width:108px;height:28px;border:1px solid #d4d4d4}#luckysheet-conditionformat-dialog .box .inpbox2 input{width:60px;height:28px;padding:0 10px;border:none;outline-style:none;float:left}#luckysheet-conditionformat-dialog .box i.fa-table{float:right;margin-top:8px;margin-right:5px}#luckysheet-conditionformat-dialog .box .fa-table{cursor:pointer;color:#6598f3}#luckysheet-conditionformat-dialog .box .fa-table:hover{color:#ff7e7e}#luckysheet-conditionformat-dialog .box #daterange-btn{width:188px;height:28px;padding:0 5px;line-height:28px;border:1px solid #d4d4d4;cursor:pointer}#luckysheet-conditionformat-dialog .box .selectbox{width:150px;height:30px}#luckysheet-icon-dataBar-menuButton .bgImgBox{width:28px;height:26px;background:url(../plugins/images/CFdataBar.png) no-repeat}#luckysheet-icon-colorGradation-menuButton .bgImgBox{width:28px;height:26px;background:url(../plugins/images/CFcolorGradation.png) no-repeat}#luckysheet-administerRule-dialog{font-size:12px}#luckysheet-administerRule-dialog .chooseSheet{height:24px;line-height:24px;margin-bottom:5px}#luckysheet-administerRule-dialog .chooseSheet select{height:24px;padding:0 5px;box-sizing:border-box;font-size:12px}#luckysheet-administerRule-dialog .ruleBox{border:1px solid #d4d4d4}#luckysheet-administerRule-dialog .ruleBox .ruleBtn{padding:2.5px 5px;border-bottom:1px solid #d4d4d4}#luckysheet-administerRule-dialog .ruleBox .ruleBtn button{margin-right:10px;font-size:12px}#luckysheet-administerRule-dialog .ruleBox .ruleList .listTitle{height:30px;padding:0 10px;border-bottom:1px solid #d4d4d4}#luckysheet-administerRule-dialog .ruleBox .ruleList .listTitle span{display:block;height:100%;line-height:29px;float:left}#luckysheet-administerRule-dialog .ruleBox .ruleList .listTitle span:nth-of-type(1){width:30%}#luckysheet-administerRule-dialog .ruleBox .ruleList .listTitle span:nth-of-type(2){width:20%}#luckysheet-administerRule-dialog .ruleBox .ruleList .listTitle span:nth-of-type(3){width:45%}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox{height:150px;overflow-y:scroll}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item{height:24px;padding:2.5px 10px;border-bottom:1px solid #d4d4d4}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item.on{background-color:#8c89fe}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .ruleName{width:30%;height:100%;line-height:24px;padding-right:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;float:left;box-sizing:border-box}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item.on .ruleName{color:#fff}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .format{width:20%;height:100%;line-height:24px;float:left;position:relative}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .format .colorbox{display:inline-block;width:16px;height:16px;border:solid 1px #d0d0d0;margin:3px 5px;cursor:pointer}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .ruleRange{width:45%;height:100%;border:1px solid #d4d4d4;float:left;margin-left:10px;box-sizing:border-box;background-color:#fff}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .ruleRange input{width:130px;height:22px;padding:0 5px;border:none;outline-style:none;float:left}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .ruleRange i.fa-table{float:right;cursor:pointer;color:#6598f3;margin-top:6px;margin-right:5px}#luckysheet-administerRule-dialog .ruleBox .ruleList .listBox .item .ruleRange i.fa-table:hover{color:#ff7e7e}.luckysheet-newEditorRule-dialog{font-size:12px}.luckysheet-newEditorRule-dialog .boxTitle{margin-bottom:5px}.luckysheet-newEditorRule-dialog .ruleTypeBox{border:1px solid #d4d4d4;margin-bottom:10px}.luckysheet-newEditorRule-dialog .ruleTypeBox .ruleTypeItem{padding:3px 5px;cursor:pointer}.luckysheet-newEditorRule-dialog .ruleTypeBox .ruleTypeItem.on{background-color:#7c79fe;color:#fff}.luckysheet-newEditorRule-dialog .ruleTypeBox .ruleTypeItem .icon{font-family:Arial,Helvetica,sans-serif}.luckysheet-newEditorRule-dialog .ruleExplainBox{border:1px solid #d4d4d4;padding:10px}.luckysheet-newEditorRule-dialog .ruleExplainBox .title{display:block;font-weight:600;margin-bottom:5px}.luckysheet-newEditorRule-dialog .ruleExplainBox select{height:30px;font-size:12px;float:left;margin-right:5px}.luckysheet-newEditorRule-dialog .ruleExplainBox .inpbox{width:100px;height:30px;border:1px solid #d4d4d4;box-sizing:border-box;font-size:12px;float:left}.luckysheet-newEditorRule-dialog .ruleExplainBox .inpbox input{width:70px;height:100%;border:none;outline-style:none;padding:0 5px}.luckysheet-newEditorRule-dialog .ruleExplainBox .txt{display:block;height:100%;line-height:30px;float:left;margin:0 5px}.luckysheet-newEditorRule-dialog .ruleExplainBox #isPercent{float:left;margin:9px 0 8px 10px}.luckysheet-newEditorRule-dialog i.fa-table{float:right;margin-top:8px;margin-right:5px}.luckysheet-newEditorRule-dialog .fa-table{cursor:pointer;color:#6598f3}.luckysheet-newEditorRule-dialog .fa-table:hover{color:#ff7e7e}.luckysheet-newEditorRule-dialog .iconsBox{height:30px;margin-bottom:5px;position:relative}.luckysheet-newEditorRule-dialog .iconsBox label{display:block;width:80px;height:30px;line-height:30px;float:left}.luckysheet-newEditorRule-dialog .iconsBox .showbox{width:150px;height:20px;padding:4px 4px 4px 10px;border:1px solid #e5e5e5;background-color:#f5f5f5;float:left;cursor:pointer}.luckysheet-newEditorRule-dialog .iconsBox .showbox .model{width:125px;height:20px;background:url(../plugins/images/CFicons.png) no-repeat;background-size:256px;float:left}.luckysheet-newEditorRule-dialog .iconsBox ul{display:none;width:164px;max-height:150px;overflow-y:auto;background-color:#fff;border:1px solid #e5e5e5;position:absolute;left:80px;top:30px;list-style:none;margin:0;padding:0}.luckysheet-newEditorRule-dialog .iconsBox ul li{padding:5px 10px;background-color:#fff;cursor:pointer}.luckysheet-newEditorRule-dialog .iconsBox ul li:hover{background-color:#dfdfdf}.luckysheet-newEditorRule-dialog .iconsBox ul li div{width:125px;height:20px;background:url(../plugins/images/CFicons.png) no-repeat;background-size:256px}#luckysheet-CFicons-dialog .box{padding:10px;border:1px solid #dfdfdf;font-size:14px}#luckysheet-CFicons-dialog .box .title{height:20px;line-height:20px;padding:0 10px;background-color:#ebebeb}#luckysheet-CFicons-dialog .box .list{width:300px;padding:5px 0}#luckysheet-CFicons-dialog .box .list .left{width:50%;float:left}#luckysheet-CFicons-dialog .box .list .right{width:50%;float:right}#luckysheet-CFicons-dialog .box .list .item{width:125px;height:20px;padding:2.5px 10px;background-color:#fff;cursor:pointer}#luckysheet-CFicons-dialog .box .list .item:hover{background-color:#dfdfdf}#luckysheet-CFicons-dialog .box .list .item div{width:125px;height:20px;background:url(../plugins/images/CFicons.png) no-repeat;background-size:256px}#luckysheet-modal-dialog-slider-alternateformat{width:280px;font-size:12px}#luckysheet-modal-dialog-slider-alternateformat .luckysheet-modal-dialog-slider-content{background-color:#fff;overflow-y:scroll}#luckysheet-modal-dialog-slider-alternateformat .textTitle{padding:5px 10px;font-weight:600}#luckysheet-alternateformat-range{width:198px;height:28px;border:1px solid #d4d4d4;margin-left:10px}#luckysheet-alternateformat-range input{width:150px;height:28px;padding:0 10px;border:none;outline-style:none;float:left}#luckysheet-alternateformat-range .fa-table{float:right;margin-top:8px;margin-right:5px;cursor:pointer;color:#6598f3}#luckysheet-alternateformat-range .fa-table:hover{color:#ff7e7e}#luckysheet-alternateformat-checkbox{padding:5px 10px;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4;margin:10px 0}#luckysheet-alternateformat-checkbox div{height:20px;line-height:20px}#luckysheet-alternateformat-checkbox div:first-child{margin-bottom:5px}#luckysheet-alternateformat-checkbox input[type=checkbox]{float:left;cursor:pointer;margin-top:4px}#luckysheet-alternateformat-modelList{padding:0 10px;margin-bottom:10px}#luckysheet-alternateformat-modelCustom{padding:0 10px;margin-bottom:10px}#luckysheet-modal-dialog-slider-alternateformat .modelbox{display:inline-block;width:36px;padding:2px;border:2px solid #fff;box-sizing:border-box;margin-right:4px;margin-bottom:4px;cursor:pointer}#luckysheet-modal-dialog-slider-alternateformat .modelbox.on{border-color:#726efe}#luckysheet-modal-dialog-slider-alternateformat .modelbox .box{width:100%;border:1px solid #d4d4d4;box-sizing:border-box}#luckysheet-modal-dialog-slider-alternateformat .modelbox .box span{display:block;width:100%;height:10px;line-height:9px;text-align:center;border-bottom:1px solid #d4d4d4;box-sizing:border-box}#luckysheet-modal-dialog-slider-alternateformat .modelbox .box span:last-child{line-height:10px;border-bottom:none}#luckysheet-alternateformat-modelToning{padding:10px}#luckysheet-alternateformat-modelToning .toningbox{height:25px;margin-bottom:5px}#luckysheet-alternateformat-modelToning .toningbox .toningShow{width:150px;height:100%;line-height:23px;text-align:center;border:1px solid #d4d4d4;float:left;margin-right:10px}#luckysheet-alternateformat-modelToning .toningbox .luckysheet-color-menu-button-indicator{width:20px;float:left;user-select:none;cursor:pointer}#luckysheet-alternateformat-modelToning .toningbox .luckysheet-color-menu-button-indicator .luckysheet-icon{user-select:none;margin-bottom:-6px}#luckysheet-alternateformat-colorSelect-dialog .currenColor{font-size:12px;margin-bottom:5px}#luckysheet-alternateformat-colorSelect-dialog .currenColor span{display:inline-block;width:16px;height:16px;border:solid 1px #d0d0d0;margin-left:5px;margin-bottom:-5px;cursor:pointer}#luckysheet-alternateformat-rangeDialog input{border:1px solid #d4d4d4;padding:0 10px;height:30px}#luckysheet-ifFormulaGenerator-dialog{font-size:12px}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox{height:30px;margin-bottom:10px}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox label{display:block;width:100px;height:100%;line-height:30px;padding:0 5px;text-align:right;float:left}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox .inpBox{width:150px;height:100%;padding:0 10px;border:1px solid #d4d4d4;box-sizing:border-box;float:left}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox .inpBox input{width:100px;height:100%;padding:0;border:none;outline-style:none;background:0 0;float:left}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox .inpBox i.fa-table{font-size:14px;color:#6598f3;float:right;margin-right:0;margin-top:8px;cursor:pointer}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox .inpBox i.fa-table:hover{color:#ff7e7e}#luckysheet-ifFormulaGenerator-dialog .ifAttr .attrBox span.text{height:100%;line-height:30px;padding:0 5px;float:left}#luckysheet-ifFormulaGenerator-dialog #largeRange,#luckysheet-ifFormulaGenerator-dialog #smallRange{width:100px;height:100%;padding:0 10px;border:1px solid #d4d4d4;box-sizing:border-box;float:left}#luckysheet-ifFormulaGenerator-dialog #rangeAssess{height:100%;line-height:30px;float:left;margin-left:20px}#luckysheet-ifFormulaGenerator-dialog #rangeAssess i.fa-table{color:#6598f3;cursor:pointer}#luckysheet-ifFormulaGenerator-dialog #rangeAssess i.fa-table:hover{color:#ff7e7e}#luckysheet-ifFormulaGenerator-dialog #DivisionMethod{width:100px;height:100%;border:1px solid #d4d4d4;box-sizing:border-box;float:left}#luckysheet-ifFormulaGenerator-dialog #DivisionMethodVal{width:120px;height:100%;border:1px solid #d4d4d4;padding:0 10px;box-sizing:border-box;float:left;margin-left:10px}#luckysheet-ifFormulaGenerator-dialog #createBtn{width:100px;height:100%;line-height:30px;border-radius:5px;text-align:center;font-size:14px;color:#fff;background-color:#8c89fe;float:right;cursor:pointer}#luckysheet-ifFormulaGenerator-dialog .ifList{border-top:1px solid #d4d4d4;height:180px;padding:10px;overflow-y:scroll}#luckysheet-ifFormulaGenerator-dialog .ifList .item{height:30px;margin-bottom:10px}#luckysheet-ifFormulaGenerator-dialog .ifList .item input{width:80px;height:100%;border:1px solid #d4d4d4;padding:0 5px;background:0 0;box-sizing:border-box;float:left}#luckysheet-ifFormulaGenerator-dialog .ifList .item input.markText{width:140px}#luckysheet-ifFormulaGenerator-dialog .ifList .item select{width:50px;height:100%;padding:0 5px;border:1px solid #d4d4d4;box-sizing:border-box;float:left;margin:0 10px}#luckysheet-ifFormulaGenerator-dialog .ifList .item span{height:100%;line-height:30px;float:left;margin:0 10px}#luckysheet-ifFormulaGenerator-dialog .ifList .item i.fa-remove{font-size:16px;float:left;margin-left:15px;margin-top:7px;color:#d6d6d6;cursor:pointer}#luckysheet-ifFormulaGenerator-dialog .ifList .item i.fa-remove:hover{color:#333}#luckysheet-ifFormulaGenerator-multiRange-dialog input,#luckysheet-ifFormulaGenerator-singleRange-dialog input{border:1px solid #d4d4d4;padding:0 10px;height:30px}.pictorialBarUploadImg:hover{border:1px solid #ccc!important;background:#efefef}#luckysheet-dropCell-icon #icon_dropCell{width:25px;height:15px;background-image:url(../plugins/images/icon_dropCell.png);background-repeat:no-repeat;background-position:center;background-size:100% 100%}#luckysheet-locationCell-dialog .listbox{border:1px solid #dfdfdf;padding:10px;font-size:14px;color:#000}#luckysheet-locationCell-dialog .listbox .listItem{padding:5px 0}#luckysheet-locationCell-dialog .listbox .listItem input[type=radio]{float:left;margin-top:5px}#luckysheet-locationCell-dialog .listbox .listItem .subbox{height:30px;padding:0 10px}#luckysheet-locationCell-dialog .listbox .listItem .subbox .subItem{float:left;margin-right:5px}#luckysheet-moreFormat-dialog{font-size:14px;color:#000}#luckysheet-moreFormat-dialog .decimal{margin-bottom:5px;height:30px;line-height:30px}#luckysheet-moreFormat-dialog .decimal input{width:80px;height:24px;padding:0 5px}#luckysheet-moreFormat-dialog .listbox{border:1px solid #666;height:240px;overflow-y:auto}#luckysheet-moreFormat-dialog .listbox .listItem{height:30px;padding:0 20px 0 10px;border-bottom:1px solid #dfdfdf}#luckysheet-moreFormat-dialog .listbox .listItem.on{background-color:#7c79fe;color:#fff}#luckysheet-moreFormat-dialog .listbox .listItem .name{line-height:29px;float:left}#luckysheet-moreFormat-dialog .listbox .listItem .value{line-height:30px;float:right;color:gray}#luckysheet-moreFormat-dialog .listbox .listItem.on .value{color:#fff}#luckysheet-splitColumn-dialog{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#luckysheet-splitColumn-dialog .box{font-size:14px}#luckysheet-splitColumn-dialog .box .boxTitle{padding:5px}#luckysheet-splitColumn-dialog .box .boxMain{padding:5px;border:1px solid #dfdfdf}#luckysheet-splitColumn-dialog .box input[type=checkbox]{float:left;margin-top:5px}#luckysheet-splitColumn-dialog .box .boxMain input[type=text]{margin-left:5px;width:50px;padding:0 5px}#luckysheet-splitColumn-dialog .box #splitColumnData{height:100px;overflow-y:auto}#luckysheet-splitColumn-dialog .box #splitColumnData table{border-collapse:collapse}#luckysheet-splitColumn-dialog .box #splitColumnData td{border:1px solid #333}.luckysheet-datavisual-config .luckysheet-datavisual-accordion-content:last-child{padding-bottom:100px}.luckysheet-postil-dialog-move{position:absolute;margin:0;padding:0;top:0;left:0;bottom:0;right:0;pointer-events:none}.luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item{position:absolute;pointer-events:all;cursor:move}.luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item-t{width:100%;height:3px;border-bottom:1px solid #000;left:0;top:-4px}.luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item-r{width:3px;height:100%;border-left:1px solid #000;right:-4px;top:0}.luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item-b{width:100%;height:3px;border-top:1px solid #000;left:0;bottom:-4px}.luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item-l{width:3px;height:100%;border-right:1px solid #000;left:-4px;top:0}.luckysheet-postil-show-active .luckysheet-postil-dialog-move .luckysheet-postil-dialog-move-item{border-color:#0188fb}.luckysheet-postil-dialog-resize{position:absolute;margin:0;padding:0;top:-2px;left:-2px;bottom:-2px;right:-2px;pointer-events:none}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item{position:absolute;height:6px;width:6px;border:1px solid #0188fb;pointer-events:all}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-lt{left:-6px;top:-6px;cursor:se-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-mt{left:50%;top:-6px;margin-left:-4px;cursor:s-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-lm{top:50%;left:-6px;margin-top:-4px;cursor:w-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-rm{top:50%;right:-6px;margin-top:-4px;cursor:w-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-rt{right:-6px;top:-6px;cursor:ne-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-lb{left:-6px;bottom:-6px;cursor:ne-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-mb{left:50%;bottom:-6px;margin-left:-4px;cursor:s-resize}.luckysheet-postil-dialog-resize .luckysheet-postil-dialog-resize-item-rb{right:-6px;bottom:-6px;cursor:se-resize}.luckysheet-datavisual-config .luckysheet-datavisual-accordion-content:last-child{padding-bottom:100px}.luckysheet-datavisual-left .el-tabs__content{overflow:auto}#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content{width:100%;height:100%;position:absolute;left:0;top:0;cursor:move;image-rendering:-moz-crisp-edges;image-rendering:-o-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}#luckysheet-modal-dialog-cropping::before{content:"";outline:1px solid #fff;position:absolute;left:33.3%;right:33.3%;top:0;bottom:0;z-index:1;pointer-events:none}#luckysheet-modal-dialog-cropping::after{content:"";outline:1px solid #fff;position:absolute;left:0;right:0;top:33.3%;bottom:33.3%;z-index:1;pointer-events:none}#luckysheet-modal-dialog-cropping .cropping-mask{filter:brightness(.5);position:absolute;background-size:100% 100%;left:0;top:0}#luckysheet-modal-dialog-cropping .cropping-content{position:absolute;overflow:hidden;background-position:0 0;left:0;top:0;width:100%;height:100%}#luckysheet-modal-dialog-cropping .luckysheet-modal-dialog-resize{border:none;position:absolute;margin:0;padding:0;top:0;left:0;bottom:0;right:0;pointer-events:all}#luckysheet-modal-dialog-cropping .resize-item{width:0;height:0;background:0 0;border:none;position:absolute;z-index:3}#luckysheet-modal-dialog-cropping .resize-item::before{content:"";display:block;position:absolute;background:#000}#luckysheet-modal-dialog-cropping .resize-item::after{content:"";display:block;position:absolute;background:#000}#luckysheet-modal-dialog-cropping .lt{left:0;top:0;cursor:nwse-resize}#luckysheet-modal-dialog-cropping .lt::before{width:18px;height:4px;left:0;top:0;border-right:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .lt::after{width:4px;height:14px;left:0;top:4px;border-right:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .mt{left:50%;top:0;cursor:ns-resize}#luckysheet-modal-dialog-cropping .mt::before{width:18px;height:4px;left:-11px;top:0;border-left:2px solid #fff;border-right:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .rt{right:0;top:0;cursor:nesw-resize}#luckysheet-modal-dialog-cropping .rt::before{width:18px;height:4px;right:0;top:0;border-left:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .rt::after{width:4px;height:14px;right:0;top:4px;border-left:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .lm{left:0;top:50%;cursor:ew-resize}#luckysheet-modal-dialog-cropping .lm::before{width:4px;height:18px;left:0;top:-11px;border-right:2px solid #fff;border-top:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .rm{right:0;top:50%;cursor:ew-resize}#luckysheet-modal-dialog-cropping .rm::before{width:4px;height:18px;right:0;top:-11px;border-left:2px solid #fff;border-top:2px solid #fff;border-bottom:2px solid #fff}#luckysheet-modal-dialog-cropping .lb{left:0;bottom:0;cursor:nesw-resize}#luckysheet-modal-dialog-cropping .lb::before{width:18px;height:4px;left:0;bottom:0;border-right:2px solid #fff;border-top:2px solid #fff}#luckysheet-modal-dialog-cropping .lb::after{width:4px;height:14px;left:0;bottom:4px;border-right:2px solid #fff;border-top:2px solid #fff}#luckysheet-modal-dialog-cropping .rb{right:0;bottom:0;cursor:nwse-resize}#luckysheet-modal-dialog-cropping .rb::before{width:18px;height:4px;right:0;bottom:0;border-left:2px solid #fff;border-top:2px solid #fff}#luckysheet-modal-dialog-cropping .rb::after{width:4px;height:14px;right:0;bottom:4px;border-left:2px solid #fff;border-top:2px solid #fff}#luckysheet-modal-dialog-cropping .mb{left:50%;bottom:0;cursor:ns-resize}#luckysheet-modal-dialog-cropping .mb::before{width:18px;height:4px;left:-11px;bottom:0;border-left:2px solid #fff;border-right:2px solid #fff;border-top:2px solid #fff}#luckysheet-modal-dialog-slider-imageCtrl .luckysheet-modal-dialog-slider-content{background-color:#fff}#luckysheet-modal-dialog-slider-imageCtrl .slider-box{border-bottom:1px solid #e1e4e8}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .slider-box-title{padding:10px 20px;font-weight:600}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .slider-box-radios{padding:10px 30px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .radio-item{margin-bottom:10px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .radio-item:last-child{margin-bottom:0}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .radio-item input{vertical-align:sub}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .slider-box-checkbox{padding:10px 30px;border-top:1px solid #e1e4e8}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .slider-box-checkbox input{vertical-align:middle}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .slider-box-borderConfig{padding:10px 30px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item{margin-bottom:10px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item:last-child{margin-bottom:0}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item label{display:inline-block;width:40px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item input{width:130px;padding:5px}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item .imgItemBorderColor{display:inline-block;width:20px;height:20px;padding:2px;border:1px solid #e1e4e8;vertical-align:middle;cursor:pointer}#luckysheet-modal-dialog-slider-imageCtrl .slider-box .border-item .imgItemBorderColor span{display:block;width:100%;height:100%}#luckysheet-imageCtrl-colorSelect-dialog .currenColor{font-size:12px;margin-bottom:5px}#luckysheet-imageCtrl-colorSelect-dialog .currenColor span{display:inline-block;width:16px;height:16px;border:solid 1px #d0d0d0;margin-left:5px;margin-bottom:-5px;cursor:pointer}#luckysheet-modal-dialog-activeImage,#luckysheet-modal-dialog-cropping{background:0 0;box-shadow:none}.luckysheet-modal-dialog-image{border:none;box-shadow:none;background:0 0;box-shadow:none;image-rendering:-moz-crisp-edges;image-rendering:-o-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}#luckysheet-modal-dialog-activeImage .luckysheet-modal-dialog-content,.luckysheet-modal-dialog-image .luckysheet-modal-dialog-content{background:0 0}.cell-date-picker{position:absolute;display:none}#luckysheet-insertLink-dialog{user-select:none}#luckysheet-insertLink-dialog .box{font-size:12px}#luckysheet-insertLink-dialog .box-item{height:30px;line-height:30px;margin-bottom:10px}#luckysheet-insertLink-dialog .box-item label{display:inline-block;width:80px;text-align:right;margin-right:10px}#luckysheet-insertLink-dialog .box-item input{width:200px;height:30px;padding:0 10px;border:1px solid #d4d4d4;outline-style:none;box-sizing:border-box}#luckysheet-insertLink-dialog .box-item select{width:200px;height:30px;padding:0 5px;border:1px solid #d4d4d4;outline-style:none;box-sizing:border-box}#luckysheet-dataVerification-dialog{user-select:none}#luckysheet-dataVerification-dialog .box{font-size:12px}#luckysheet-dataVerification-dialog .box select{width:100%;height:30px;border-color:#d4d4d4;outline-style:none}#luckysheet-dataVerification-dialog .box input::-webkit-input-placeholder{color:#d4d4d4}#luckysheet-dataVerification-dialog .box input:-moz-placeholder{color:#d4d4d4}#luckysheet-dataVerification-dialog .box input::-moz-placeholder{color:#d4d4d4}#luckysheet-dataVerification-dialog .box input:-ms-input-placeholder{color:#d4d4d4}#luckysheet-dataVerification-dialog .box-item{padding:10px;border-bottom:1px solid #e1e4e8}#luckysheet-dataVerification-dialog .box-item .box-item-title{font-size:14px;font-weight:600;margin-bottom:10px}#luckysheet-dataVerification-dialog .box-item .range{width:100%;height:30px;border:1px solid #d4d4d4}#luckysheet-dataVerification-dialog .box-item .range input{width:calc(100% - 30px);height:30px;padding:0 10px;float:left;border:none;outline-style:none;box-sizing:border-box}#luckysheet-dataVerification-dialog .box-item .range i.fa-table{float:right;margin-top:9px;margin-right:5px;cursor:pointer;color:#6598f3}#luckysheet-dataVerification-dialog .box-item .show-box{margin-top:10px}#luckysheet-dataVerification-dialog .box-item .check-box{height:30px;line-height:30px;margin-bottom:10px}#luckysheet-dataVerification-dialog .box-item .check-box:last-child{margin-bottom:0}#luckysheet-dataVerification-dialog .box-item .check-box input{height:30px;padding:0 10px;border:1px solid #d4d4d4;box-sizing:border-box}#luckysheet-dataVerification-dialog .box-item .check{line-height:30px}#luckysheet-dataVerification-dialog .box-item .check input{vertical-align:text-top}#luckysheet-dataVerification-dialog .box-item .input{height:30px;line-height:30px;margin-top:10px}#luckysheet-dataVerification-dialog .box-item .input input{height:30px;padding:4px 10px 4px 10px;border:1px solid #d4d4d4;box-sizing:border-box}#luckysheet-dataVerification-dialog .box-item .input1 input{width:150px}#luckysheet-dataVerification-dialog .box-item .input2 input{width:100%}#luckysheet-dataVerification-dialog .box-item .input span{display:inline-block;width:30px;text-align:center}#luckysheet-dataVerification-dialog .data-verification-hint-text{width:100%;height:30px;border:1px solid #d4d4d4;margin-top:10px}#luckysheet-dataVerification-dialog .data-verification-hint-text input{display:block;width:100%;height:100%;padding:0 10px;border:none;outline-style:none;box-sizing:border-box}#luckysheet-dataVerification-dialog .show-box .show-box-item{display:none}#luckysheet-dataVerificationRange-dialog input{height:30px;padding:0 10px;border:1px solid #d4d4d4;outline-style:none}#luckysheet-dataVerification-dropdown-btn{display:none;width:20px;height:20px;background-color:#fff;position:absolute;z-index:10;overflow:hidden}#luckysheet-dataVerification-dropdown-btn::after{content:'';width:10px;height:10px;background:url(arrow-down.png) center no-repeat;position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}#luckysheet-dataVerification-dropdown-List{display:none;background-color:#fff;border:1px solid #ccc;box-shadow:0 2px 4px rgba(0,0,0,.2);position:absolute;z-index:10000;box-sizing:border-box}#luckysheet-dataVerification-dropdown-List .dropdown-List-item{padding:5px 10px;box-sizing:border-box;cursor:pointer}#luckysheet-dataVerification-dropdown-List .dropdown-List-item:hover{background-color:#e1e1e1}#luckysheet-dataVerification-showHintBox{display:none;padding:10px;background-color:#fff;border:1px solid #ccc;box-shadow:0 2px 4px rgba(0,0,0,.2);position:absolute;z-index:1000;user-select:none;cursor:default;white-space:nowrap}.luckysheet-print-viewList{position:relative;float:right;width:126px;height:22px;line-height:22px;text-align:center;white-space:nowrap;overflow:hidden;display:flex;align-items:center;user-select:none}.luckysheet-print-viewBtn{position:absolute;top:0;left:0;width:42px;height:22px;align-items:center;justify-content:center;cursor:pointer}.luckysheet-print-viewBtn .iconfont{font-size:22px}.luckysheet-print-viewBtn:hover{background:#e1e4e8}.luckysheet-print-viewBtn-active{background:#dcdcdc;cursor:default}.luckysheet-print-viewBtn-active:hover{background:#dcdcdc}.luckysheet-print-viewNormal{left:0}.luckysheet-print-viewLayout{left:42px}.luckysheet-print-viewPage{left:84px}#luckysheet-modal-dialog-slider-protection .luckysheet-modal-dialog-slider-content{background:#fff}.luckysheet-slider-protection-config{position:absolute;width:100%}.luckysheet-slider-protection-row{position:relative;width:98%;height:35px;left:1%}.luckysheet-slider-protection-column{position:absolute;height:100%}.luckysheet-protection-rangeItem-dialog input,.luckysheet-protection-rangeItem-dialog textarea,.luckysheet-protection-sheet-validation input,.luckysheet-slider-protection-config input,.luckysheet-slider-protection-config textarea{border:1px solid #d4d4d4;outline:0}.luckysheet-protection-rangeItem-dialog input:focus,.luckysheet-protection-rangeItem-dialog textarea:focus,.luckysheet-protection-sheet-validation input:focus,.luckysheet-slider-protection-config input:focus,.luckysheet-slider-protection-config textarea:focus{border:1px solid #0389fb;outline:0}.luckysheet-protection-input{width:100%;height:19px;position:relative}.luckysheet-protection-textarea{width:100%;height:47px;position:relative;resize:none}.luckysheet-protection-column-2x{width:20%}.luckysheet-protection-column-3x{width:30%}.luckysheet-protection-column-4x{width:40%}.luckysheet-protection-column-5x{width:50%}.luckysheet-protection-column-6x{width:60%}.luckysheet-protection-column-7x{width:70%}.luckysheet-protection-column-8x{width:80%}.luckysheet-protection-column-9x{width:90%}.luckysheet-protection-column-10x{width:100%}.luckysheet-protection-column-left{text-align:left}.luckysheet-protection-column-center{text-align:center}.luckysheet-protection-column-right{text-align:right}.luckysheet-slider-protection-ok{position:absolute;width:100%;height:100%;background:#0188fb;color:#fff;text-align:center;line-height:45px;font-size:16px;cursor:pointer}.luckysheet-slider-protection-ok:hover{background:#0181ee}.luckysheet-slider-protection-ok:active{background:#0074da}.luckysheet-slider-protection-cancel{position:absolute;width:100%;height:100%;background:#e6e6e6;color:#353535;text-align:center;line-height:45px;font-size:16px;cursor:pointer}.luckysheet-slider-protection-cancel:hover{background:#d6d6d6}.luckysheet-slider-protection-cancel:active{background:#c7c7c7}.luckysheet-slider-protection-addRange{line-height:23px;font-size:12px;top:2px;height:23px}.luckysheet-protection-rangeItem{position:relative;width:100%;height:30px;line-height:30px;font-size:12px;overflow:hidden}.luckysheet-protection-rangeItem:hover{background:#d5d5d5}.luckysheet-protection-rangeItem>div{position:absolute;height:100%;text-align:center;overflow:hidden}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-del{left:5px;top:5px;height:20px;width:20px;font-size:14px;line-height:20px;cursor:pointer}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-name{left:30px;width:80px;text-align:left}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-range{left:110px;width:120px}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-update{left:230px;width:30px;font-size:14px;top:5px;height:20px;width:20px;line-height:20px;cursor:pointer}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-del:hover,.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-update:hover{background:#0181ee;color:#fff}.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-del:active,.luckysheet-protection-rangeItem .luckysheet-protection-rangeItem-update:active{background:#0074da;color:#fff}.luckysheet-protection-rangeItem-content{position:relative;width:350px;height:270px}#luckysheet-protection-rangeItem-dialog .luckysheet-slider-protection-column .range{width:100%;height:30px;border:1px solid #d4d4d4}#luckysheet-protection-rangeItem-dialog .luckysheet-slider-protection-column .range input{width:calc(100% - 30px);height:30px;padding:0 10px;float:left;border:none;outline-style:none;box-sizing:border-box}#luckysheet-protection-rangeItem-dialog .luckysheet-slider-protection-column .range i.fa-table{float:right;margin-top:9px;margin-right:5px;cursor:pointer;color:#6598f3}.luckysheet-protection-rangeItemTextarea{width:100%;height:120px;position:relative;resize:none}.luckysheet-protection-rangeItemiInput{width:100%;height:23px;position:relative}.luckysheet-protection-sheet-validation{width:390px;height:180px;display:none}.luckysheet-zoom-content{position:relative;float:right;width:210px;height:22px;line-height:22px;text-align:right;padding-right:10px;white-space:nowrap;overflow:hidden;display:flex;align-items:center;user-select:none}.luckysheet-zoom-content .luckysheet-zoom-minus{position:absolute;top:0;left:0;width:20px;height:20px;cursor:pointer;display:flex;align-items:center;justify-content:center}.luckysheet-zoom-content .luckysheet-zoom-minus-icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTRweCIgaGVpZ2h0PSIycHgiIHZpZXdCb3g9IjAgMCAxNCAyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA2MyAoOTI0NDUpIC0gaHR0cHM6Ly9za2V0Y2guY29tIC0tPgogICAgPHRpdGxlPnJpcWlxdWppYW7lpIfku70gNDU8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZyBpZD0iMjAyMC8wOC8xNCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IueUu+adv+Wkh+S7vS0yIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcwNC4wMDAwMDAsIC0xMDY0LjAwMDAwMCkiIGZpbGw9IiM0NDRENUEiPgogICAgICAgICAgICA8ZyBpZD0icmlxaXF1amlhbuWkh+S7vS0xMjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OTkuMDAwMDAwLCAxMDUzLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9Iue8lue7hCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNS4wMDAwMDAsIDExLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);width:14px;height:2px}.luckysheet-zoom-content .luckysheet-zoom-minus:hover{background-color:#e1e4e8}.luckysheet-zoom-content .luckysheet-zoom-slider{position:absolute;top:0;left:25px;width:100px;height:100%;display:flex;align-items:center}.luckysheet-zoom-content .luckysheet-zoom-slider .luckysheet-zoom-line{position:absolute;top:10px;width:100px;height:2px;background:#e1e4e8}.luckysheet-zoom-content .luckysheet-zoom-slider .luckysheet-zoom-cursor{position:absolute;top:7px;width:8px;height:8px;border-radius:8px;background:#b5bdb8;cursor:pointer;z-index:2;transition:all .3s}.luckysheet-zoom-content .luckysheet-zoom-slider .luckysheet-zoom-cursor:hover{transform:scale(1.2);transform-origin:center center;background:#a0a0a0}.luckysheet-zoom-content .luckysheet-zoom-slider .luckysheet-zoom-hundred{position:absolute;top:9px;width:2px;height:4px;left:49px;background:#1e1e1f}.luckysheet-zoom-content .luckysheet-zoom-plus{position:absolute;top:0;left:130px;width:20px;height:20px;cursor:pointer;display:flex;align-items:center;justify-content:center}.luckysheet-zoom-content .luckysheet-zoom-plus .luckysheet-zoom-plus-icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTRweCIgaGVpZ2h0PSIxNHB4IiB2aWV3Qm94PSIwIDAgMTQgMTQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYzICg5MjQ0NSkgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+cmlxaXF1amlhbuWkh+S7vSA0NjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxnIGlkPSIyMDIwLzA4LzE0IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0i55S75p2/5aSH5Lu9LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xODQ4LjAwMDAwMCwgLTEwNTguMDAwMDAwKSIgZmlsbD0iIzQ0NEQ1QSI+CiAgICAgICAgICAgIDxnIGlkPSJyaXFpcXVqaWFu5aSH5Lu9LTExOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTg0My4wMDAwMDAsIDEwNTMuMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0i57yW57uEIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1LjAwMDAwMCwgNS4wMDAwMDApIj4KICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0i55+p5b2iIiB4PSIwIiB5PSI2IiB3aWR0aD0iMTQiIGhlaWdodD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcuMDAwMDAwLCA3LjAwMDAwMCkgcm90YXRlKC0yNzAuMDAwMDAwKSB0cmFuc2xhdGUoLTcuMDAwMDAwLCAtNy4wMDAwMDApICIgeD0iMCIgeT0iNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+);width:14px;height:14px}.luckysheet-zoom-content .luckysheet-zoom-plus:hover{background-color:#e1e4e8}.luckysheet-zoom-content .luckysheet-zoom-ratioText{position:absolute;top:0;left:155px;width:60px;color:#1e1e1f;font-size:12px;text-align:left;cursor:pointer}.luckysheet-zoom-content .luckysheet-zoom-ratioText:hover{background-color:#e1e4e8}.flatpickr-calendar{background:0 0;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-box-shadow:0 3px 13px rgba(0,0,0,.08);box-shadow:0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #eceef1}.flatpickr-calendar.hasTime .flatpickr-innerContainer{border-bottom:0}.flatpickr-calendar.hasTime .flatpickr-time{border:1px solid #eceef1}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.arrowRight:after,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar.arrowCenter:after,.flatpickr-calendar.arrowCenter:before{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#eceef1}.flatpickr-calendar.arrowTop:after{border-bottom-color:#eceef1}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#eceef1}.flatpickr-calendar.arrowBottom:after{border-top-color:#eceef1}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{border-radius:5px 5px 0 0;background:#eceef1;color:#5a6171;fill:#5a6171;height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:#5a6171;fill:#5a6171}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#bbb}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(72,72,72,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(72,72,72,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(72,72,72,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(90,97,113,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:#5a6171}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:#5a6171}.flatpickr-current-month input.cur-year{background:0 0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(90,97,113,.5);background:0 0;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:#eceef1;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:0;padding:0 0 0 .5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:0}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:#eceef1;outline:0;padding:0}.flatpickr-weekdays{background:#eceef1;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:#eceef1;color:#5a6171;line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px;border-left:1px solid #eceef1;border-right:1px solid #eceef1}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #eceef1;box-shadow:-1px 0 0 #eceef1}.flatpickr-day{background:0 0;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#484848;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e2e2e2;border-color:#e2e2e2}.flatpickr-day.today{border-color:#bbb}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#bbb;background:#bbb;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#ff5a5f;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#ff5a5f}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #ff5a5f;box-shadow:-10px 0 0 #ff5a5f}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e2e2e2,5px 0 0 #e2e2e2;box-shadow:-5px 0 0 #e2e2e2,5px 0 0 #e2e2e2}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(72,72,72,.3);background:0 0;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(72,72,72,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #ff5a5f,5px 0 0 #ff5a5f;box-shadow:-5px 0 0 #ff5a5f,5px 0 0 #ff5a5f}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;border-left:1px solid #eceef1}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(72,72,72,.3);background:0 0;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;background:#fff;border-bottom:1px solid #eceef1}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background:#fff;border-radius:0 0 5px 5px}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#484848}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#484848}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:0 0;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#484848;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;float:left;line-height:inherit;color:#484848;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eaeaea}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}span.flatpickr-day.selected{font-weight:700} \ No newline at end of file diff --git a/public/luckysheet/plugins/css/pluginsCss.css b/public/luckysheet/plugins/css/pluginsCss.css new file mode 100644 index 0000000..7d55f1e --- /dev/null +++ b/public/luckysheet/plugins/css/pluginsCss.css @@ -0,0 +1 @@ +@font-face{font-family:iconfont;src:url(//at.alicdn.com/t/font_1109445_3uhchn0iu1o.eot?t=1573095457319);src:url(//at.alicdn.com/t/font_1109445_3uhchn0iu1o.eot?t=1573095457319#iefix) format('embedded-opentype'),url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAALYAAsAAAAABnAAAAKLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAp8gQgBNgIkAwgLBgAEIAWEbQcwG64FEdWTCWR/Sm4OkS3AzL8KYg4aSemU4GqI3mB6P9n7k+2ut5hEQy2TwEw6Jnj+G/fdNzOfTFqrA4xW6ExSSNs2tP0h7emOUEjc/7WdKSEPXj+LJBJ0Tfhn/8R3w0pl8CbO3gca9TS2Pm4BBXSFwhB+R7yoMeuFnFxjrdBQiQocctB2llgyjyil+oEV+FgAZBR4eiLSpPrEvdM/gT5I6wHluBeNNWlSF1AXB1KAe2G0hUso44axC1zCeQjgJEER0tDUMYCDwZomgCzOzYzh5PwYDEvZEaw1aw2yh4ld7ahhN/y+fFSIHRQWjVXRM904yeqZnaH+PyefIKAgoM0WQANFgAEZqI13oSOM0zjjBhmwr1KBZ79vQ/ZqRthfZxW7AYhByT1JXdmtphTAbfUlByge9QaQnIp42a/CP45oR+Fg+HTYIt/f+0PjPsijc8rpF9fZv0Ic8fcbSMDqdxvswkyfxTnpZBvc/8yEW6zwz/S4OgQQKDqiEV952TEA3P48NBn6OcG+X4fA/5H2bDG63LIqo0prOxU5561y4gT+sTvI01hD5GbSgp3ICKeNeAqNnSzSsEWw4KIKVuxUw0khzZtdhFhHR4wDKGADQPBzBYWXFDR+bkjDPsJClC9Y8YuGkyFhe7rIEa30THhnfMLjB6XoO+nY2YtKt5i/mjtl5SHviDSVIUijpJjaYIc0x4LpnWfMEiT1LazBZdg0PQzUVyg4KpiHZRzLuhtFom8VTzHhnfEJjx+Uou+k35290ue3mL+aO7U01cSPSFM5OKRR0oPcaLpeTfdyzfTOM2YJkvoW1mAUNk0PQ/2oCgVHxYjosIztdrKvJlpf137dHsCpWEal2sM0FK9SFKgoAAA=') format('woff2'),url(//at.alicdn.com/t/font_1109445_3uhchn0iu1o.woff?t=1573095457319) format('woff'),url(//at.alicdn.com/t/font_1109445_3uhchn0iu1o.ttf?t=1573095457319) format('truetype'),url(//at.alicdn.com/t/font_1109445_3uhchn0iu1o.svg?t=1573095457319#iconfont) format('svg');src:url(//at.alicdn.com/t/font_934335_kaqqxgj7xqf.eot?t=1544334973484);src:url(//at.alicdn.com/t/font_934335_kaqqxgj7xqf.eot?t=1544334973484#iefix) format('embedded-opentype'),url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAACoYAAsAAAAAQKwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8d02RY21hcAAAAYAAAAGvAAAEuOPAIVlnbHlmAAADMAAAIvAAADM8XaPCvWhlYWQAACYgAAAAMQAAADYUOOL3aGhlYQAAJlQAAAAeAAAAJAiTBINobXR4AAAmdAAAAB8AAADIyfb//2xvY2EAACaUAAAAZgAAAGYg+RKabWF4cAAAJvwAAAAfAAAAIAFtA1FuYW1lAAAnHAAAAUUAAAJtPlT+fXBvc3QAAChkAAABtAAAA0NPUNOieJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk4WKcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMbyewtzwv4EhhrmRoREozAiSAwDr1wyIeJzd1LlOG2EYheHXYMxm9sVOMJCFbNgJ4RKQqClTRVEUpUei4w6oqKDh4qA7FqKgpYKcj9NEEQ1t5tfjZfR7PN82wBgwagNrwsh3Gv5E45vPNh7PjzL1eL7Z2Pb3L7zyvll1taYNbWmgHe1pXwc61JGOdaJTnetKt7ofXgzvrns3Zw8PILx/3fv7T+6//Hf/M46G7+mH10+vX0+u338tWKPHOhtsOpLXvOEtW7zjPR/4yCeW2KbvqD/7qiuOdIJlXjLOpP+nxQhzTNNl1znZoc0qMywyzwIvmHUuvzpbHd9S61kR/J9Hu17cNzl2qwfCFUCNcC3QSLgqaDRcH9QMVwqNhWuGWuHqofFwHdFEuKJoMlxbNBWuMpoO1xu1w5VHM+EeQLPhbkBz4b5A8+EOQQvhXkGLUTOkpXD/oOVwJ6GVoN5Xo+ZNnaDuvRvU79bCvYfWg4p1I6j4tqLmVP2gcjMIKq87QcWxF1QO9oP6z4N4rNFh1MzrKKhrHEdVVSdBxXEaVP7Og8rHZVA5uwoqZ7fheUH34clheBH1PBrehaeJ617UM+rmLOj8AQ2Uw28AeJyNegmAHFWZcH3v1V3dVV3VXV3d0z19TnfPkbm6prtzzUECCTlIMgkhgQQyCCEBghuQLEEkmSEiIEjEILdLOAJKQLmCcRUcQIEFUX/wX/+ARPxFf91dBRbZXTFd2e9V9yRBo/vPdL3ze9/73vFd7z1O4LjDr9B9dIALcgnuHO4W7laOAx2kFDhDUOuBUr+JASaxAIv7C5grVoehJOlQwnQlb2OxWOwFyUkBFhpgY8KJigY4tSFgadutIIJqNA01bIKFw1CR+v12jtSDoZQvloqiVKr6GBlsCfurVWtu1IlWa47oY+mH/xrdRMim0UY4axnAslmNEPaEZgYV2whutfTBuKXDM6Bb8UHd2ho0bCU4w3Qcc8bfAJgZctz4sBXrnu0sLJTVtWq5sNCZ3R2zhuN/pZjMPkIIht4+WDp71lJCls6avRR+DZGY7drmNl1LyKrbEo+3uKqc0PRtJhbHIkD2kv8Z5JR+PpOrLhgJRY3YihUxIxoaWVDNZfjR4xdnOMLhH32K/A5TlONqWQUW0Qu8Rd4ii7xZL3ASrvWv6R20BWslTuMMLsyluEGOC5tZU7KzlThkTXDtfAE/trwSkuKaeUeUam4lL7m4cm6KiFKuiMuOS+JvkA20nKtb5Pf1dwcGgBsYeJPPtEon5lP/FLeDm69PpImcCLVkoDUZT0MbQP9oBaBM44d+iO1uvx1buvVXybdd1/1RSgdofRoCp0FwOPtFGjAg6xagNSZKxR4YKHW5ODzwx/gMWc2JHKeABDUF6NPeWKs3JwW7YTeZ4a1Mw8tpbyXs9UFxzJP0OTYd3Ai3gOM6wKxFy7il7BSUq7WBElQHijkJ8CtVKz2QE6WII5lYJkqm6JgpcLNlBIFyNCLmigNVeiRxz6Hd37K6rAkFaqNVkGFQtZOa95xZMndIUB2tgXytlbAA/6wgHdcty7sEg4RlfdCIIPQtRZkI2x3VaocdhkEtaavec5K0IxRhRZHQtbAJIXVvkSR6z2EqacEIBizmGjGn4vjGeY6ONFe0nZvGVbml3ApuFbeGraxrupWsXajkW8FP5+08rmokRdxauVaR8rniILiVGtY5+SHqlqOO5FZ7SD6nEwaEU5TXAaGErH3k/9KVW7zn4K5TTvn8Kb29eixjxQKKFogEp4dP+dU2EPW41ZoQt71CjHylLTNQtCOFSrbvxNCJfDaWyR86wHOHOPZRrs6Rj7xXwZ03Tx4a6vTeBXP58vI9dlwXgMwkwfA15Y3eNXD563LECqSSfZmZ3YlosTKMKDv7A072wMg4/nP84cOHt/P76DiX50pcF9fLcUKWjWugOgtM3KRuhaUwqLkpsE0cZCtERMib7tTHP/Cn80VFEc+HXMv7jV9L7gIsOfTR++9Dd+MbV8SUJJNUSw62tuQuj+cAcvFDW2UpJSrkjPr/Ja/Xu+m1h7ZyR/bpDrKOczCDsg2lZk6MOAIKwWh5GKo13Hd0q9qieCt/q7aEVQDKUzEg8pSHZxVymgKqN/PXSiSu1ilQQgmh8HM1ztCqPu7dZPIYPnZQeqf98Te4OV9xoeK2knylhMlaxbUdZGqw8xUT4yzmx+jIyOSkh5//Y+lJ/CPcJJmsj5PxyXFvchznl00xCwBDbxz/OKYzvkufp8NcFPts5/q5mThGkTiixaS1ry7c6BCpVQkg41YZw9QYx7CEO5VwpqoI98GPKX3lXWGeQNMECoZ55cZP8vTH9UPZadPmTJt2SSP6P43oU42IDge9n3z2au+1ILUH+q1cqY1Afss550HcWwoMYM60yUbU+D3bLDwqEyaRZzScN/fj+o4eo+2oVCrqJI0KKkWGUaUNkV5USj2EcM/UBaH+TCO87wDPH7jPD8sXX6zGw6BiBOG4+rEcHTnS4pn6oe9PNcGQtBwPvplDemM+0QPkSS7CdXAzUIqdzp3PXc5dx32Z28M9xj3Lvcq9xf0WFJgGJ8Nq2AiXwmfhZtjNcQXkg4rJdn85apvZxsaXjlcIKO6iTrZaqxRLWbNYEpDtsTyKQFXkpCJKCvHYfKmZd9wh+PP6WoXlm6ocWY7hL4mSjcA+fic/xZ2Nvo+tk/5G3bHtHDQfjq2rlSQxh0YIC4oDyGBlZm00WJ7BCn9ZWTnaSxcqO7HkMM50cHhsdJKDq58zQGQMW3PcRpdsWIwERgob3vHIrLlTSBvkOs02x5sKGq//UNY0OSJrRGOJ+g81w9AimkF4TNSf1wA0UmZh/fegwcNhRdOUMEKujDTbafcdSZ3GKuSwokJADmsGgKGFA4aRZs3DLPhtpIm9URZhwZ3HKfsNaxZooEhphDRaX1B4UQyJixdhEBTFDQKmHy5qyhj2h9Kqrsnz58lROSjLG6SoPP/evBEYY2ho7jl5/Siv8j9oV0AbU0n7U6NUoxskSacqf33Yb+6PKXFcov/3kfGx+mNqfVJP1WRS9mfuQx9IMth8IVj9UGMeV+PU/bAJTiwN3gdNvpvN4t2ytklTVrG2qxQtpslrG5SslbXpmjzMyjG4COkZbpCF0XrAEPzgLENbxYa3SjOuBG0VK8XgAiOwlvW+NmDsAG0tK8XgEiNwN4PF4AXQ7malGGwtvCQIixcLgi6GhI2YfLjYoGBM0R6V58/HCcL5xHnCuaSsOU5n9jn5nFFKXy0RdUwDpeOpZTy/QVaCPH+NphRlhlkuyoGVRqDIWmCwhGhFVlzUyC3/H8PimGXVlI9Mv6SbWhV1qpllSgSVecVFHeOiKZDHOF9pxAIqmjAqFmC6Zxy4wxxqDBj33maKBEPgRgg3Alwdi3dPQgaVChaNo85hsJOTh1Fpjo+zcHKcYKqOqobJagzS5C1ORjmYRVmdbbgl2VIWGRuFWcMvyZrhqQqogdY9BDDU7X2Ygo5lm0imtbMf6OZTvZ3LIF2eA2ROv/cLeAKGenoGYRm5cLRzfqLl9MqpmwnZX78D5vb1z2Vyl83DL3AeUqglMmhVnMtdwO1AClDHMQcnDTbaiyUUQ6jebeywT5TQ36lIQlEsRauoCodRqIrFku/J4D96Pb6rhPBMdDgNPPirlIqlI5jyJvN5wMQprdCj+BFhquk6oTiBvQPr5i04OxrPFZQXRuetczd9TdAeJGOJSCQB4G3qu/vmy77lzn0+L+pq7ok5c57IqXpLMhLU9dEk5ssP3Sc8tMkdOwlRRAe1Qi4ePXvBvHUDGx7UwAjefLd3dYGOfxrLThpzNz0k3PdQGTEkR3UUBIPwy45LgvwKS7ciWkZ/PhC6bsZlt0Qi1hzvOduSASowf972zj2/X3Z9y+KgZQ0kL7ggOWBZmbilajYtpLLW3K7N7e+K4VktJyt0ICBpyJmIbQUfvKRj9RzL+6Usdm73/kStQ9/rhNsCA1Q5uWVWWHy3fXPXXCubKlDYBhrbFjyuz3t0jGa4OFfgysyTwb3HLPfWozHOOHo2qNeZqZHPMuvDlfDLTuXR58ElYJvHpJlxtKkn8RtPtAGZhLZvM/v7MMfCDDqN3FQW3q6PQVuCjDC490KsONQIoZg888xk0bunYaBP+ma7BUu8fLIIWAlvNW3DEbTfkqihy9WK6XsY+azvdaBGRkMx6mbNSJSwrpqdIpoGIWj7j/hh8s/rmrbNv9Jn6QWYDqB3h/xyxJNH9wrd9B5029IAzPSS0Ggj3gnCoWeeOST4IawPaS8HiJMOfgPOCGQczft8AB56us7z9ad9GO8ToO4PpOMov2CVFksHvJ2BqbWYQD9kHO3QaWijnITyosgxS6qaQi44YmANgX9IgJqR8Q4zAd0oh2wMbOCRKJsM9LWaM+D7XW++5H0o0G/eHmpRdGP77VQ4+ODVP2gXkhlD6PsQ1pkO/+F+Mxo1D0BWdDwHk7loFF7ySqwQDoQcZ7sA2j/t/o8+aqQTYvurVz/4cx5u3RYy1GTo1n3wz05o/4c8RLOO6P38gBklJSd0tLFXYuhy0aM2fRu5G8fI4cAGmHngm/XMRIz4xgOOYKBEFr8YykwLvfhiaFom9OILoUyX+cILZlcmBJ95MdSVZRXZLqxgRd9/wcBqLofz9yp9grq+PW9xNkq7BK5flmtD6dvJdaOVXcF5HeROwLldwJ3CjXIr0Q48kzubW4/W4EXcxdwWtAk/w23nrkLqSrSUlWjYydbCpXypJjhSL7hSqebka2jXOEdSfhlatY6UL7k4mpoB+RoOp8S+muvkcUzSMDZlMDWJmVn5EjON8ENH0pGcGvtcp4Z48HO7IUzD3QACfZwuO+D94cCKFQcgcGCZPdF3vvdW94Jwcnrvgm5zjbVggXVesnvtMdnA9MKlD59YuPEz08++NBW9rHthdKz7tuOUzTl/W7vVcWe71b7tfO38vgnErP1ZUf1TMPcf7r3JOwlc714iw7gK5IE93gfeHx54AEjkrqXb89OlNZ+Ynt80ffH06eaafP+RzGmdW0+PXbatc8HpT5y0876TFu7EgtXxrds7F65uFhxaNjYhXXWVNDG2zFx6FyIzWcHERLPAet87H67xrru97tWfZFumcS7zVXJB41ymkFWAfvXQ1+Fr8LVd8FOvg1XLTZ/u7b/w6Xx/bsqXax7OhFGkHePH1T+cnPxw3z748JVXXqmP+Anydh0FjLd59+6RRx99e/fu3bBs82Zv86OPPtrcxzwHB7AflA86s+JR/g0U6YOHHi+Wy0W6BEM4AOXFZWDB1N4nj5M/cn2YqfoKq1KsVVAnueVa1DdqRYmKThTVlB2VfAu6WCtWXab6CCcGo3FJAciekJyRS4EqJWIGPV8MxhIS6oxc7jIUUwCymIiZlDxoGSgiFJHnFUpBkA003PSgXX/e0nUCiqQoPGHeukqDwYhPG/r/QCd8vsya/iGO2RyX6R/zmI3xPeHdAV1zusC7I9vVlYXz/Aychxl41Y+yxwFors2V5PBx1sY181MfOzmr+elGzBZoYteuH+3a9equXd65U6kf7MI/2Ow9Tf5XfS3c4M0nff/299488P7tAW8eUf91ai9sP15/gAsvND/mzDt+uhGjFVaB9/4qXnJ4igK462O0+HbOu/SLNIR9BbgW7CmPUocDfyEddihWsptucaUhyCs1plYxXyL5iz4J5rY8+d4DC1ZOUDqx8safCsJPb3w3tby64i73M+QzxvXnlKctXHLGPQfNXZ4Yuv4T51xv7DIP3nPPW9audcV+eZdy+vwFTH/gmPeTPUfGzIWZvZm1s7ii+G9nT4e3vDywgFBY7X0V1nh7yB5vR+4AXOntIFsPNH17DDbQVt+3z/ujOKr+jkkLx5Zvp9dt3HgdxXDD573/JOtOnj8GMDb/5HXwKzLc1zcMwELSMQVDyOe9+VMwhKwbPwJChpFwnM/H6D/SpUfGEkLPPYbavhXleQF9eCbNy1yVm8kNcdhgaucw9mbpinP8jNn8sLDQlATsq8Dk9u1uPO5u3+49um1bOR4vb9tG7tm2jZVt21avvPYaLMNv9LXX6uuOpunSTvvQLVonXdjZKddX653kno4Otf6a3QkXek/BhGfBN3/2s/vvf3NP7aKLuIY9jHO7l7yH4+JxlypckNNxuKhksmG3lnXQDC9l3y/Dv5frD/3x3Fu8i78Mz5br88o0BW/u3+8N7N9P3t6/v7HWfJia/n6LofXmyzjcUrgayLqtwDKlRuZLdLzt0iUbrxw//c4T6Hjnxtlr7rn89K/MR7tlF2mrzoDgI8Grr3vqm1CdMwTBb+sXXji1B75GfoeY+7nZKHFRVjXOdNBfwFVvmO0SigeUU40Kv7yxG9gGL1QttsXFFFRhhWWTy9asuYzYVi0Sp7dv2XI7RQvdBf47N974HR7cpaksCO89+eR7AjO27pPCIF9hiM5A58vxodyarYRsXZMbiicyizq23EHIHVs6FmXSS9bv/A6l39m5fkln3+ZBbIoIBjf3xbogYoU+6oh3BmJNnthLDoIMUbTZpuFOqeQl/1yh1z+jYFEv5CVbihjAyjGMOm7Nv32x81KJXcKwBkWsKOXFXmyZL001HkTjBeNKKY+qPI8GGLuI8U9xDCJimQHsCMi1I2kSsR07b6fBTaO8Z0eYs6DsDkM1jYrJsaPszqccRRgHK4b8E5qoX4vEOJLtu0LVXmbsoaUw7Mes+UClNjCM8JXSAJJUKfnWKRa7zMnJiQY7bktDxHUYskppmAwBlrgUVxGJgtpAtVLLAxPwzHAWIpjCzlH860D3ihFUH0QEnedNKtI0L4TFtEgknhdVtHsl0dAUTLfERUemouLwQg4b8HwLz1uAfMzzOYGnvIQKKCKIuqInqajxso4lCgU+0yejFgoIESoGaIs+u08xZayQUUHRpCjGDQGoESAiTQog8pIkJHlBVuQIdkMjOq8RHTUWj6gDOhWJSWAGVQSdUlEICKxLHkiAUMchEpEVGukXgFBFbqc0rjiEEiMQuQF7CiDpev01yPRl8AcvtPRWelv8gKxZ6FCeaALwpBtpCZgFAjKVDRw9atYglU0T+1HkFhyMzAPwOtO1CCrxEZMXBFPTeWKyLAaYlKkmiUTvFnA60YQqRBVnVkQDwRSIxfOBgBXnBV2nOIeRCAVRkYAXBdnBto4uE8rjyCO8KlLBwFl3EUWnwMtUIi7OCy9ovGASVYjgIJEOTTGEYSVKEVs7ldk8EJlHX6OdEOLgemoYzwIulsn0ZzK3J7oTie4aCzjkd8YzPyM/Qambwdx8bjX3Se6L3M3cHu4p7lXuIPfv3AdgQxw6YTasgI1wOVwLd8Hj8By8Dr+CX8N/4IzHSDeZR1aR1WQjuZx8nnyFfJ08S35J/h/5L1zjNO2jc+mJzNtkrFNyHbat2RdJkfIQGeghOZ1IA0OknCIRneR6SM21XXa74tilIrtaQce05oNRv4Xj37H0EGzCzhldNOvyQrHUuIOpof3iHlOfIkxb4PdXexPylSbCQca+UXZi69qNDkmjlaPDn/WHvOiTZqfoxzpMUcfvzsn10Kk+SqxfJkYa+Jx8xb8javbGWLqEKF1W3EBSTjPdW3GlRu8oaFlXUr8/f3kmsdxavsZYvpJnt8XUcctupWb7skqnrFW1ZrNLSH+AjO5q1C4dncGBZgUTNIxGSXCd/pr/Sf4qOU1CjtI/NRs4uP4hygSa3VwaHE//xybc6cfhlHBihkgFZwkptwv5Ur+/9s1ejrf2Om0sPaJnK3/sujeXwT4yQVG/j3yteMzNG1uEHjpFw8cXnX68F8df8mNWnC3Ax7qS/ryrCqzvaoF4V9+0BMTb45DoqqJ4s3WZUj/iO7RIa741ojWjp0pA1YCBzIoyVAspQsebDDCIwkNQgmEdpSJIMd2Mm4qMQTAmQUepfgrvyAEJ5VpACeokT3MtBgOw4qGAbWptM9raxpDDrSCCSEEWtalWLBO3FMWKZ+KmCokcSFFND2t8m5oMtm2lsmYxhHLQDIgUzdAEyhfZsA3NFqEtd5EkoIxHUngmggKga6KKeVkNKBKPsigQGBA1GSWdpOoaDkTCQKIoT3iKYhEjcW2AKIKmBgWFCAQgOEejSkCVKOoNiYhEgEAXoaIs8sxhkXiM96pBFTSkXtWCZvASKhDUDAEgvIAilfTwhApUwu6ppAZUVgPN9thYUtYSSdNVmYlhRhINAi8oPkkCkkQJeGsswwjpITNmBkE3J2RdFQRVN/0oqCIqFK+K1ohmhBArjgvXgpcFan46RIOSElR4QUXcsoi6ZhYQQdZkgQQUEUNvmo3OVSyqByNB3U6wmcE5JGxmBBIRVMM0cCYFTcdYXBPBCompT5kn9ieJIPrAgj/JfCAUkAVBDhgB3o5sRxUnCThInGAFIsh3ChKLhCtSQBUhkrHt6X4vfKMznkb8TrCOdaqr4r0RoEE9IBJbCMlgn8RIE33SWG9YZwRZd0E9SO0IEdavv+U8/FukmLghdNO0ggpGitVqa5rdWkj60ZlJiQ29iGsXsNQTF6tmUMatFG606Q1owWhrOhkNBrTFP7o6ikCGoQdk0IOJhGrFW1vCmhQIB9btmyMbAUkK6iFDk2UtJIXilooAmRZTVc2WcjigynokMLooFLIiJ322AR3A0QWxkdGhKVq4JRFDKHXOPnMCByXghhBFKopqgJe1ANKIqySJnUvYWgU1mef9SFApTr3Etpgo4ULwssyLmpbPyiJQtDay0yUBFarGNhLuT0pbyxRLsBGvathkW0dHx/TOzulsw/Pq9IQgobURiLTiOuFep7gTWVeCvGQmFXnqd0EBmUGUBEHyCRBwl+qsskEHMCD+pen4t2j6dCKy7aIJLNIDQhAXTFFZUz8a8duFqKiKeVBFUUS2NhREIdDSxoKAi8rLihDUkRME5eRyeVEZ/4q8wmw2RcWRCqIiKAy9ErJwfwia0YMokUvDuMtkIYewoiCIstJo4ogiDiiEIkAUChv6grgPZayRJSPEtlgohOYIbrzahkKjDxXboWT4i05a0fLBOZV6OhVVDZQW/c1uVP+dzTv0Gdru39d2op9X4xZwC9Fe6IFatcgOQ4v+iyb/koDdFvhvqhz/jZSEBnxULDE7Plpl0GJRQjucva1qFPmOuETPW+eEQ2dMXNY3et5NsxMblq54Y8UZX/AOzfvmvBPPdvquW3VSx/qL+kNW5tQFFy/2Tsx19PWuLrQZs2sjJ8GZ3TONSI8SjHb0bhWlKwJUG4FZn9hYnPF8ZeE1IH3uqUWXBkU1n/z1DUkc9vLZu/5OoDuGp93f03bmijP2RaGr7fyw3pLp2B4Ot1chGjqvLXd2V9dyM2R1da6fd8qXtMZ51uE/0J00wLGzTZcbxBlYw13EbeM4gd2GlgbQj7AhGmGzEY7Y6J8US+YAuxFBiz+c6yXFai2LPgXa+hFU4GKtUqvaUZuit9GFs8WeItGiw7S9E5VskV3Hoq3Qh54HokBsuZLv9IWrDkRRy+azuYpvHBAXzWZkNDAJmf7Fpe8svV5QQeCHL+6hYQJLv8SjgJ9BpXI3yT7Lw7XijA9QMEuP8Xzb2sp+4EcuRsGMwlVwz0R7+k6ebHpZJPxBtI67ewjpEgECPIjU+6wyq0ZBRja7+iMBbXnvPSpRJI7sw05uRBCoUgTu6abgibBkJyNCGPlUN62j+L5WEGaOQph+JD4m8G3tHuVheAuzzj8SCyi4foB5VThISM+nRpAWdES9D5iroi7+Qo0n/nuBw7+id9A4euhq8+yB3ZAUuV6uD/3hQW4e2sWnciu5s7h13CZclU9zV3DXcNfiDi1QQSqFhZpjQCnsSA47/hXYQXH4mPMSSZjyuaSm01Xzz9zokeLssb6Y3SyNRJn9d0y5cLyc/wbLJp/2frMJFPjNOpBf59946a4hZ9bOl+35dv3xL4S+EFoKo7MHlxGybHD2KMC57JCSHVZ6dzmdvZ2Of2gJbVOl0KrHW+O6H8AdTirVk0o539PjybhhYKB7v8R0i663HE1DqjsN2tWwUI8FvLevLEbb39gMunB4w3flx+Whq8yrTLh3kL089Psfnb27yHoqFy+MdcTwxw5RSbRZpvtdxwwjZnirWN/d6ScNlvVp0tuOTfuwOpLoIA+FfF/mcmof950Pe+fkomSZxU6Q/EPhrJ0t4Cfhx15rsXMiYepjdc0DJQk/2nzJJTVj2PjRR/8CRe8N759hqffYP8AS73F4Frq9173hgwfJ8De+UZ/8wx/gTjjVe9hbj6mT/vSn0Y8+eh+u97bA+55B4DWvhzW67zaq3HbbbeXbZ9xGBvxoELNkmOXpnKvm7pzzpbnN+yIc281kD8rHLm6cm8C9JxVLtWoPiAY7nij5d2EOO1VGc7bWX2XvONyBEjJ+D0i43xjUEfBmQrSLpebFnyihANBRmIjsEQ9Ej03YEcctTp0ISW4VmzC8JfJmOpa2eSkc5p2oQ8CwdZJuCYHVomTaB0fJYCIngRGRnhTC6vyWzBKJhMLyaGvapjI2CZOWpG4btX6bD4dlPtqZWy+jryGtz4S7NRMVWI/CzxL4vRMTeyk/i0/G56AWATEZD/WoliKp/TwUtKChdskhJRy0lDAsH5zRk5HDIZC/gKZeRzp+OiIE+axQwFUtWVb7UFOTXZquazcLkT7UbZbaH8utEiEUkU7r6g9SJWJRvdTBXpdO7OWxa5YaGOsoimFlan99mnx45BxuOjeDm8PN5RZzp3Cncau4Me5s7gLuQo6rofOA8nmIPbwxJf8StXmBCuyYTmKOii8ZdPZYpjGz/m1f5aioKB1J1ZiD4q8vHEnRI6nvg5kwwQ8yQdMMkn1oy+n1ReRLYAZV2XBCV8+cPffCVhWspBI7oze6/KZIR0gzvA2AThD+4OsQL8bxB39EJAyPbLVY+LuwhRW3dDB85JGgZQXrK9JmwrIQ5CLdBFHg+fNk/vSCkrS01HJQzhKB54mpnd3C8OYTfwq3MBThxTpDawa9q4MMrxUEEmYdxsNH73u2koeRY9mZfSnPTs8qNfRe0YdzaN70sybLZp08vbRrNH9pfrSLOp7z0jcWfbToG2eJZVIsiyDNfl8LBALvzR4bgzM8LRaPx+DDK196id3tMhn/LOX9OyXRlw8BXFGTs7mof4bPgelIJnVMkKBSEGwooRMiVEqOXSgJ8Prvfvfii97TZ8Ad3iTMgXc3exPvjEDbO+/A2Kj3PkzAjsOfhR3eoe0YrNniHXrkB688AuplP4H5K751xU03XfGdlbewM/rDb9AHaAH3ThvqlzXceu487u+4y31+vou7h9vLPcntQ42f8y2cAbYxUF8zy8fX+yI99qF5GKfD30H5nH+9ZEDVZZfUvm7HDeX6l+RsI/lHs5YQbQv3gCPmihX/IaFUYiqGAQm4B31DKVpiRwao9p0B7BiNCSnq1irI7/4DV2gFp1jA+prU3HqRaK3afN5bI9xpSxZfmslmM5cuXrJ36aItLLll0dKVe94QhDf23P8mz795/7ML7HnZE8ty0mk1w5CYWaDhSEshFMkm87SF2iErhjZ+RHAEc+U09RqIxGFtsv+q9mAhHm2PB9JqIBAOBr2XA3mNQqQtRHaOrtfR3bghqOYdGR0GWQ3FzGirkQCYbncEAmdZLS2laIwXrSC2lIo+RXuXLG4QN0Un7eDfbBK4503ee+LGz0VmSlHHjlWdpBIKFmZEYuk4jYQT0+KaQtMqanrv6XhwG+Q7pc/piWQ0lagEF4c6QvjrN000z61gakdskcyXTimHjaxbCqNvEc2n8/FgbFobH9G2LhNoW3IgmY4mkitkv6XMXr4e/hH9Mu1FdgiiFZJES5C9T+7jBlDSzEY5s4gb9d8pfwKlzGbu79EO2cHd4L9ZIOWpY/paXrKdWoWWKjU3DXYB0yXJYbfNjtTUaFPXon6cl0ynZtKSycBNBDePgpv58P9QPfU6taQ3RRPc7b0Ky26696ZR+siOq77+n+S+Pffe+/jXReFr3v5bbr31ltseNr5yp/GtRIJIiURy+fL6dj+C9eT+BxDwEYl/CAHx7wjg43D/nvvue+xoza1Yc5fxj8nklbFUqjeddtDndEIhSK644dRTb1ix4xGef2TzusfXrXvcO7jxufVw7rPGqlX3rlq18Zz4mjXxFY/Bj5fXklcsryWuXVf/49gYkerXbSTOenJO/V8QEP5j9eoN58TXro2vqP8RDo55V61bB9s8ayPsRBDvEgbyydWrN57rg3hXkV+kexkZy4ER4RhT9ynfJdejNVnklqA2yLPLGv9xJ9hZn63Z9SoyUIlpCDvis7FUOMq0Elr71UpDDaDlXk6B/3ILrXtk7h9XwkOxaXP0HNzlvSOpfd3z+qct7KmJC6442e6f0ZtQQKsoXZmC21swoqKcq5aGOsSKeqLbNiudai12Lh+asWgS1odLai063OptqkbC6Vntg/NP6OnvEk+Yu6CaqMx0u1LGHLmvs7a0LPajwZBu7+hQpw9laoN9hjJr2uwV86fed1Tg/sa9+FEtR836QcO2DZLDENbaKRt/3H8D3OqsVHicY2BkYGAA4ksfuZrj+W2+MnCzMIDADaPztTD6////9SxbmRuBXA4GJpAoAGfWDXAAAAB4nGNgZGBgbvjfwBDDcvE/ELBsZQCKoAAjAMK2CB0AAHicY2FgYGDBhbf+/49TjprYF4gvYhFXJt4MAGihBL0AAAAAAADmAPYBWAFwAeACYgKsAtoDGgN6A9IGCgZQBo4HXge6B+gIJAiWCMQJsgnECfoKFApiCpIKygsCC0QLaAuqDBYMOgxqDM4OaBKqEywT6hTOFTwV/haqFtwXHhguGRIZhhmeAAB4nGNgZGBgMGJ2ZTBkAAEmIOYCQgaG/2A+AwAZAgHCAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nH2S63LTMBCFfZraLm1Db2lLbxRouRMg4RX4x0N4FFux1jhyk2gZx0/PCveHExg0Hsv77e6Zo7WCraBdu8G/1xhb6GEbISLE2MET7GIP++jjKQ5wiCMc4wQDnOIM53iGC1ziCte4wXPc4gVe4hXucI/XeIO3eIf3+ICP+IQhPuMLvmKEMb4F0dLoxlB/zsrWpOyUJdrOlNNxIaGr+MDxhFTVGO3zjiMfOQpToxYuzFRecejUpNShM3qmo1yUJhT/aKsfu4clcWq0zUNRTXm/MezIaKGO+yp19IvcKplSWfZUlvVEM2ob41ZuFJeaxBWfNSZNE6+dL428Hk0OfG2mbMMeDH2U6x3/LVVVWJN21JPwerrkOmmlk4ypIHEijyg5vvlfcnTczU7Is/MuKrgmb0pOdNLlc3qQea2zn+1wBl1WVpxV0nzxl4uZFBfk+LSbWZHfHpQ9XKuXsqMuSGnFds36Qqbu+KqLrLKZeJ9pypk2bOV/LsaG/0b+hd0wVHJVs6eXXWrYa865PfDetFrMlEsorexac0G2Iac2JGWYNPdXJP7eklBIQ/4O2XEQ/AZFHxhQ') format('woff'),url(//at.alicdn.com/t/font_934335_kaqqxgj7xqf.ttf?t=1544334973484) format('truetype'),url(//at.alicdn.com/t/font_934335_kaqqxgj7xqf.svg?t=1544334973484#iconfont) format('svg')}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-huiche:before{content:"\e651"}.icon-shezhi:before{content:"\e624"}.icon-quanxianfuzhi:before{content:"\e62c"}.icon-date:before{content:"\e91c"}.icon-jiantou:before{content:"\e616"}.icon-tubiaozhexiantu:before{content:"\e79a"}.icon-biaoti:before{content:"\e62b"}.icon-chart:before{content:"\e61d"}.icon-dagou:before{content:"\e617"}.icon-table:before{content:"\e61e"}.icon-theme:before{content:"\e66f"}.icon-guanbi:before{content:"\e641"}.icon-Kxiantu:before{content:"\e679"}.icon-tubiao-liucheng:before{content:"\e68e"}.icon-jiacu:before{content:"\e6fe"}.icon-zhutiheliutu:before{content:"\e62f"}.icon-activity_fill:before{content:"\e6de"}.icon-add:before{content:"\e6df"}.icon-gou:before{content:"\e695"}.icon-tubiao:before{content:"\e60f"}.icon-guanbi1:before{content:"\e618"}.icon-leidatu:before{content:"\e615"}.icon-zhcc_xiangshangjiantou:before{content:"\e688"}.icon-biaodanzujian-biaoge:before{content:"\eb94"}.icon-jianshao:before{content:"\e644"}.icon-xieti:before{content:"\e6ef"}.icon-jia:before{content:"\e61b"}.icon-fsux_tubiao_duijizhuzhuangtu:before{content:"\e600"}.icon-fsux_tubiao_duijizhuzhuangtu1:before{content:"\e601"}.icon-fsux_tubiao_bingtu:before{content:"\e602"}.icon-fsux_tubiao_juxingshutu:before{content:"\e603"}.icon-fsux_tubiao_qipaotu:before{content:"\e604"}.icon-fsux_tubiao_kxiantu:before{content:"\e605"}.icon-fsux_tubiao_loudoutu:before{content:"\e606"}.icon-fsux_tubiao_duijimianjitu:before{content:"\e607"}.icon-fsux_tubiao_yibiaopan:before{content:"\e608"}.icon-fsux_tubiao_ditu:before{content:"\e609"}.icon-fsux_tubiao_ciyun:before{content:"\e60a"}.icon-fsux_tubiao_relitu:before{content:"\e60b"}.icon-fsux_tubiao_nandingmeiguitu:before{content:"\e60c"}.icon-fsux_tubiao_guanxitu:before{content:"\e60d"}.icon-fsux_tubiao_zidantu:before{content:"\e60e"}.icon-fsux_tubiao_luoxuantu:before{content:"\e610"}.icon-fsux_tubiao_huiguiquxiantu:before{content:"\e611"}.icon-format_icon:before{content:"\e612"}.icon-fsux_tubiao_jinzitatu:before{content:"\e613"}.icon-fsux_tubiao_shuiqiutu:before{content:"\e614"}.icon-Dtubiao:before{content:"\e672"}.icon-shuzi:before{content:"\e7f8"}.icon-jian2:before{content:"\e64e"}.sp-container{position:absolute;top:0;left:0;display:inline-block;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid #000;background:#fff;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-alpha,.sp-alpha-handle,.sp-clear,.sp-container,.sp-container button,.sp-container.sp-dragging .sp-input,.sp-dragger,.sp-preview,.sp-replacer,.sp-slider{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#fff),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0))}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0))}.sp-hue{background:-moz-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-ms-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-o-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(.17,#ff0),color-stop(.33,#0f0),color-stop(.5,#0ff),color-stop(.67,#00f),color-stop(.83,#f0f),to(red));background:-webkit-linear-gradient(top,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.sp-1{height:17%}.sp-2{height:16%}.sp-3{height:17%}.sp-4{height:17%}.sp-5{height:16%}.sp-6{height:17%}.sp-hidden{display:none!important}.sp-cf:after,.sp-cf:before{content:"";display:table}.sp-cf:after{clear:both}@media(max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.sp-container{border-radius:0;background-color:#ececec;border:solid 1px #f0c49b;padding:0}.sp-clear,.sp-color,.sp-container,.sp-container button,.sp-container input,.sp-hue{font:normal 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-clear,.sp-color,.sp-hue{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:0 0;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-palette-container,.sp-picker-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el.sp-thumb-active,.sp-palette .sp-thumb-el:hover{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:0;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-button-container,.sp-palette-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer.sp-active,.sp-replacer:hover{border-color:#f0c49b;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;float:left;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;float:left;z-index:0}.sp-palette{max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;border-radius:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#ccc);background-image:-moz-linear-gradient(top,#eee,#ccc);background-image:-ms-linear-gradient(top,#eee,#ccc);background-image:-o-linear-gradient(top,#eee,#ccc);background-image:linear-gradient(to bottom,#eee,#ccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#ddd,#bbb);background-image:-moz-linear-gradient(top,#ddd,#bbb);background-image:-ms-linear-gradient(top,#ddd,#bbb);background-image:-o-linear-gradient(top,#ddd,#bbb);background-image:linear-gradient(to bottom,#ddd,#bbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f!important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f!important;text-decoration:underline}.sp-palette span.sp-thumb-active,.sp-palette span:hover{border-color:#000}.sp-alpha,.sp-preview,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-alpha-inner,.sp-preview-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat;border-radius:16px}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)} \ No newline at end of file diff --git a/public/univerjs/css/preset-sheets-core.css b/public/univerjs/css/preset-sheets-core.css new file mode 100644 index 0000000..c0df61e --- /dev/null +++ b/public/univerjs/css/preset-sheets-core.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(147, 197, 253, .5);--tw-ring-offset-shadow: 0 0 rgba(0,0,0,0);--tw-ring-shadow: 0 0 rgba(0,0,0,0);--tw-shadow: 0 0 rgba(0,0,0,0);--tw-shadow-colored: 0 0 rgba(0,0,0,0);--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(147, 197, 253, .5);--tw-ring-offset-shadow: 0 0 rgba(0,0,0,0);--tw-ring-shadow: 0 0 rgba(0,0,0,0);--tw-shadow: 0 0 rgba(0,0,0,0);--tw-shadow-colored: 0 0 rgba(0,0,0,0);--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*{scrollbar-color:initial;scrollbar-width:initial}.univer-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.univer-bottom-0\.5{bottom:2px}.univer-bottom-2{bottom:8px}.univer-bottom-6{bottom:24px}.univer-left-0\.5{left:2px}.univer-left-2{left:8px}.univer-right-1\.5{right:6px}.univer-right-4{right:16px}.univer-right-px{right:1px}.univer-top-px{top:1px}.univer-z-50{z-index:50}.univer-z-\[1050\]{z-index:1050}.univer-z-\[1080\]{z-index:1080}.-univer-mx-1{margin-left:-4px;margin-right:-4px}.univer-my-0{margin-top:0;margin-bottom:0}.univer-ml-auto{margin-left:auto}.univer-inline-block{display:inline-block}.\!univer-hidden{display:none!important}.univer-size-2{width:8px;height:8px}.univer-size-2\.5{width:10px;height:10px}.univer-size-36{width:144px;height:144px}.univer-size-5{width:20px;height:20px}.univer-size-7{width:28px;height:28px}.univer-size-9{width:36px;height:36px}.\!univer-h-1\/2{height:50%!important}.univer-h-12{height:48px}.univer-h-2{height:8px}.univer-h-3{height:12px}.univer-h-3\.5{height:14px}.univer-h-48{height:192px}.univer-h-\[148px\]{height:148px}.univer-h-\[150px\]{height:150px}.univer-h-\[calc\(100\%-2px\)\]{height:calc(100% - 2px)}.univer-max-h-0{max-height:0px}.univer-max-h-80{max-height:320px}.univer-max-h-\[40vh\]{max-height:40vh}.univer-max-h-\[var\(--radix-popper-available-height\)\]{max-height:var(--radix-popper-available-height)}.univer-max-h-full{max-height:100%}.univer-max-h-screen{max-height:100vh}.univer-min-h-3\.5{min-height:14px}.univer-w-14{width:56px}.univer-w-2\.5{width:10px}.univer-w-3{width:12px}.univer-w-3\.5{width:14px}.univer-w-72{width:288px}.univer-w-\[292px\]{width:292px}.univer-w-\[720px\]{width:720px}.univer-w-\[calc\(100\%-16px\)\]{width:calc(100% - 16px)}.univer-w-\[var\(--radix-popper-anchor-width\)\]{width:var(--radix-popper-anchor-width)}.univer-min-w-36{min-width:144px}.univer-min-w-\[260px\]{min-width:260px}.univer-min-w-\[320px\]{min-width:320px}.univer-max-w-\[480px\]{max-width:480px}.univer-max-w-\[60vw\]{max-width:60vw}.univer-max-w-lg{max-width:32rem}.univer-translate-x-3{--tw-translate-x: 12px;transform:translate(12px,var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;transform:translate(var(--tw-translate-x),calc(-50% - 2px)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-univer-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(-90deg) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(0) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(45deg) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!univer-animate-none{animation:none!important}.univer-cursor-crosshair{cursor:crosshair}.univer-grid-flow-col{grid-auto-flow:column}.univer-flex-col-reverse{flex-direction:column-reverse}.univer-content-center{align-content:center}.univer-gap-3{gap:12px}.univer-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * (1 - var(--tw-space-x-reverse)));margin-left:8px;margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.univer-space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(6px * (1 - var(--tw-space-y-reverse)));margin-top:6px;margin-top:calc(6px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:0;margin-bottom:calc(6px * var(--tw-space-y-reverse))}.univer-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(16px * (1 - var(--tw-space-y-reverse)));margin-top:16px;margin-top:calc(16px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:0;margin-bottom:calc(16px * var(--tw-space-y-reverse))}.univer-text-balance{text-wrap:balance}.univer-rounded-\[2px\]{border-radius:2px}.univer-rounded-xl{border-radius:12px}.univer-rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.univer-rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.univer-rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.univer-rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.univer-rounded-br-md{border-bottom-right-radius:6px}.univer-rounded-tr-md{border-top-right-radius:6px}.univer-border-0{border-width:0px}.univer-border-y-0{border-top-width:0px;border-bottom-width:0px}.univer-border-b{border-bottom-width:1px}.univer-border-l{border-left-width:1px}.univer-border-l-0{border-left-width:0px}.univer-border-r{border-right-width:1px}.univer-border-t{border-top-width:1px}.univer-border-t-0{border-top-width:0px}.\!univer-border-gray-200{border-color:var(--univer-gray-200)!important}.univer-border-gray-200{border-color:var(--univer-gray-200)}.univer-border-gray-300{border-color:var(--univer-gray-300)}.univer-border-primary-600{border-color:var(--univer-primary-600)}.univer-border-red-500{border-color:var(--univer-red-500)}.univer-border-white{border-color:var(--univer-white)}.univer-border-l-gray-200{border-left-color:var(--univer-gray-200)}.\!univer-bg-transparent{background-color:transparent!important}.univer-bg-gray-300{background-color:var(--univer-gray-300)}.univer-bg-red-500{background-color:var(--univer-red-500)}.univer-fill-current{fill:currentColor}.univer-fill-gray-200{fill:var(--univer-gray-200)}.univer-fill-gray-700{fill:var(--univer-gray-700)}.univer-py-2\.5{padding-top:10px;padding-bottom:10px}.univer-py-4{padding-top:16px;padding-bottom:16px}.\!univer-pl-4{padding-left:16px!important}.\!univer-pr-5{padding-right:20px!important}.univer-pl-0{padding-left:0}.univer-pl-8{padding-left:32px}.univer-pr-0{padding-right:0}.univer-pr-32{padding-right:128px}.univer-pr-8{padding-right:32px}.univer-text-left{text-align:left}.univer-align-middle{vertical-align:middle}.univer-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.univer-font-sans{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.univer-text-lg{font-size:18px;line-height:28px}.univer-text-sm\/8{font-size:14px;line-height:32px}.univer-text-xs\/6{font-size:12px;line-height:24px}.univer-uppercase{text-transform:uppercase}.univer-leading-9{line-height:36px}.univer-leading-none{line-height:1}.univer-leading-normal{line-height:1.5}.univer-tracking-tight{letter-spacing:-.025em}.univer-tracking-widest{letter-spacing:.1em}.\!univer-text-gray-400{color:var(--univer-gray-400)!important}.univer-text-current{color:currentColor}.univer-text-cyan-700{--tw-text-opacity: 1;color:#0e7490;color:rgba(14,116,144,var(--tw-text-opacity, 1))}.univer-text-green-500{color:var(--univer-green-500)}.univer-text-indigo-600{color:var(--univer-indigo-600)}.univer-text-yellow-400{color:var(--univer-yellow-400)}.univer-underline-offset-4{text-underline-offset:4px}.univer-opacity-0{opacity:0}.univer-opacity-50{opacity:.5}.univer-opacity-60{opacity:.6}.univer-opacity-80{opacity:.8}.univer-opacity-90{opacity:.9}.univer-shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,inset 0 2px 4px #0000000d;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0,0,0,0))}.univer-ring-primary-50{--tw-ring-color: var(--univer-primary-50) }.univer-ring-white{--tw-ring-color: var(--univer-white) }.univer-ring-offset-2{--tw-ring-offset-width: 2px }.univer-ring-offset-gray-600{--tw-ring-offset-color: var(--univer-gray-600) }.univer-ring-offset-white{--tw-ring-offset-color: var(--univer-white) }.univer-transition-\[max-height\,opacity\]{transition-property:max-height,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-duration-500{transition-duration:.5s}.univer-duration-75{transition-duration:75ms}.univer-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.univer-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.univer-will-change-transform{will-change:transform}.univer-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.univer-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.univer-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.univer-scrollbar-thin{scrollbar-width:thin;scrollbar-color:initial initial;scrollbar-color:var(--scrollbar-thumb, initial) var(--scrollbar-track, initial)}.univer-scrollbar-thin::-webkit-scrollbar{display:block;width:8px;height:8px}.univer-scrollbar-track-gray-50{--scrollbar-track: var(--univer-gray-50) }.univer-scrollbar-thumb-gray-300{--scrollbar-thumb: var(--univer-gray-300) }.univer-animate-out{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial }.univer-fade-in,.univer-fade-in-0{--tw-enter-opacity: 0 }.univer-fade-out{--tw-exit-opacity: 0 }.univer-zoom-in-95{--tw-enter-scale: .95 }.univer-slide-in-from-top-4{--tw-enter-translate-y: -16px }.univer-duration-200{animation-duration:.2s}.univer-duration-500{animation-duration:.5s}.univer-duration-75{animation-duration:75ms}.univer-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.univer-ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:univer-text-gray-400::-moz-placeholder{color:var(--univer-gray-400)}.placeholder\:univer-text-gray-400::placeholder{color:var(--univer-gray-400)}.after\:-univer-bottom-px:after{content:var(--tw-content);bottom:-1px}.after\:univer-h-px:after{content:var(--tw-content);height:1px}.after\:univer-w-full:after{content:var(--tw-content);width:100%}.after\:univer-content-\[\'\'\]:after{--tw-content: "";content:"";content:var(--tw-content)}.hover\:univer-border-red-400:hover{border-color:var(--univer-red-400)}.hover\:univer-border-transparent:hover{border-color:transparent}.hover\:univer-bg-primary-500:hover{background-color:var(--univer-primary-500)}.hover\:univer-bg-red-400:hover{background-color:var(--univer-red-400)}.hover\:univer-text-gray-500:hover{color:var(--univer-gray-500)}.hover\:univer-text-gray-900:hover{color:var(--univer-gray-900)}.hover\:univer-text-primary-500:hover{color:var(--univer-primary-500)}.hover\:univer-text-white:hover{color:var(--univer-white)}.hover\:univer-underline:hover{text-decoration-line:underline}.hover\:univer-opacity-100:hover{opacity:1}.hover\:univer-opacity-70:hover{opacity:.7}.focus\:univer-border-primary-500:focus{border-color:var(--univer-primary-500)}.focus\:univer-border-primary-600:focus{border-color:var(--univer-primary-600)}.focus\:univer-bg-gray-100:focus{background-color:var(--univer-gray-100)}.focus\:univer-ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0,0,0,0))}.focus\:univer-ring-primary-50:focus{--tw-ring-color: var(--univer-primary-50) }.focus-visible\:univer-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.active\:univer-border-red-600:active{border-color:var(--univer-red-600)}.active\:univer-bg-gray-200:active{background-color:var(--univer-gray-200)}.active\:univer-bg-primary-700:active{background-color:var(--univer-primary-700)}.active\:univer-bg-red-600:active{background-color:var(--univer-red-600)}.active\:univer-text-primary-700:active{color:var(--univer-primary-700)}.disabled\:univer-pointer-events-none:disabled{pointer-events:none}.disabled\:univer-opacity-50:disabled{opacity:.5}.data-\[disabled\]\:univer-pointer-events-none[data-disabled]{pointer-events:none}.data-\[orientation\=horizontal\]\:univer-h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:univer-h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=horizontal\]\:univer-w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:univer-w-px[data-orientation=vertical]{width:1px}.data-\[state\=open\]\:univer-bg-gray-100[data-state=open]{background-color:var(--univer-gray-100)}.data-\[disabled\]\:univer-opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:univer-animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial }.data-\[state\=closed\]\:univer-animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial }.data-\[state\=closed\]\:univer-fade-out-0[data-state=closed]{--tw-exit-opacity: 0 }.data-\[state\=open\]\:univer-fade-in-0[data-state=open]{--tw-enter-opacity: 0 }.data-\[state\=closed\]\:univer-zoom-out-95[data-state=closed]{--tw-exit-scale: .95 }.data-\[state\=open\]\:univer-zoom-in-95[data-state=open]{--tw-enter-scale: .95 }.data-\[side\=bottom\]\:univer-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -8px }.data-\[side\=left\]\:univer-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: 8px }.data-\[side\=right\]\:univer-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -8px }.data-\[side\=top\]\:univer-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: 8px }.data-\[state\=closed\]\:univer-slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50% }.data-\[state\=closed\]\:univer-slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48% }.data-\[state\=open\]\:univer-slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50% }.data-\[state\=open\]\:univer-slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48% }@media (min-width: 640px){.sm\:univer-flex-row{flex-direction:row}.sm\:univer-justify-end{justify-content:flex-end}.sm\:univer-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * (1 - var(--tw-space-x-reverse)));margin-left:8px;margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.sm\:univer-rounded-lg{border-radius:8px}.sm\:univer-text-left{text-align:left}}.dark\:univer-border-gray-500:where(.univer-dark,.univer-dark *){border-color:var(--univer-gray-500)}.dark\:univer-border-gray-600:where(.univer-dark,.univer-dark *){border-color:var(--univer-gray-600)}.dark\:univer-bg-primary-600:where(.univer-dark,.univer-dark *){background-color:var(--univer-primary-600)}.dark\:univer-text-gray-300:where(.univer-dark,.univer-dark *){color:var(--univer-gray-300)}.dark\:univer-text-gray-500:where(.univer-dark,.univer-dark *){color:var(--univer-gray-500)}.dark\:univer-text-primary-500:where(.univer-dark,.univer-dark *){color:var(--univer-primary-500)}.dark\:univer-ring-primary-600:where(.univer-dark,.univer-dark *){--tw-ring-color: var(--univer-primary-600) }.dark\:univer-ring-offset-gray-600:where(.univer-dark,.univer-dark *){--tw-ring-offset-color: var(--univer-gray-600) }.dark\:univer-scrollbar-track-gray-900:where(.univer-dark,.univer-dark *){--scrollbar-track: var(--univer-gray-900) }.dark\:univer-scrollbar-thumb-gray-700:where(.univer-dark,.univer-dark *){--scrollbar-thumb: var(--univer-gray-700) }.dark\:after\:univer-bg-gray-600:where(.univer-dark,.univer-dark *):after{content:var(--tw-content);background-color:var(--univer-gray-600)}.dark\:hover\:univer-bg-gray-900:hover:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-900)}.dark\:hover\:univer-text-white:hover:where(.univer-dark,.univer-dark *){color:var(--univer-white)}.dark\:focus\:univer-bg-gray-600:focus:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-600)}.dark\:active\:univer-bg-gray-600:active:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-600)}.dark\:active\:univer-bg-gray-700:active:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-700)}.\[\&\>a\]\:univer-cursor-pointer>a{cursor:pointer}.\[\&\>a\]\:univer-px-2>a{padding-left:8px;padding-right:8px}.\[\&\>a\]\:univer-py-1>a{padding-top:4px;padding-bottom:4px}.\[\&\>a\]\:univer-text-sm>a{font-size:14px;line-height:20px}.\[\&\>input\]\:univer-w-11>input{width:44px}.\[\&\>svg\]\:univer-relative>svg{position:relative}.\[\&\>svg\]\:univer-top-0\.5>svg{top:2px}.\[\&\>svg\]\:univer-block>svg{display:block}.\[\&\>svg\]\:univer-size-4>svg{width:16px;height:16px}.\[\&\>svg\]\:univer-shrink-0>svg{flex-shrink:0}.\[\&\>ul\:not\(\:last-child\)\]\:univer-border-0>ul:not(:last-child){border-width:0px}.\[\&\>ul\:not\(\:last-child\)\]\:univer-border-r>ul:not(:last-child){border-right-width:1px}.\[\&\>ul\:not\(\:last-child\)\]\:univer-border-solid>ul:not(:last-child){border-style:solid}.\[\&\>ul\:not\(\:last-child\)\]\:univer-border-r-gray-200>ul:not(:last-child){border-right-color:var(--univer-gray-200)}.\[\&_\[data-description\]\]\:univer-text-sm [data-description]{font-size:14px;line-height:20px}.\[\&_\[data-description\]\]\:univer-text-gray-600 [data-description]{color:var(--univer-gray-600)}.dark\:\[\&_\[data-description\]\]\:univer-text-gray-200 [data-description]:where(.univer-dark,.univer-dark *){color:var(--univer-gray-200)}.\[\&_\[data-icon\]\>svg\]\:univer-relative [data-icon]>svg{position:relative}.\[\&_\[data-icon\]\>svg\]\:univer-top-1 [data-icon]>svg{top:4px}.\[\&_\[data-icon\]\]\:univer-self-baseline [data-icon]{align-self:baseline}.\[\&_\[data-icon\]\]\:univer-text-green-500 [data-icon]{color:var(--univer-green-500)}.\[\&_\[data-icon\]\]\:univer-text-primary-600 [data-icon]{color:var(--univer-primary-600)}.\[\&_\[data-icon\]\]\:univer-text-red-500 [data-icon]{color:var(--univer-red-500)}.\[\&_\[data-icon\]\]\:univer-text-yellow-500 [data-icon]{color:var(--univer-yellow-500)}.\[\&_\[data-sonner-toast\]\]\:univer-shadow-md [data-sonner-toast]{--tw-shadow: 0px 1px 6px -2px rgba(30, 40, 77, .08), 0px 2px 6px -1px rgba(30, 40, 77, .1);--tw-shadow-colored: 0px 1px 6px -2px var(--tw-shadow-color), 0px 2px 6px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 6px -2px #1e284d14,0 2px 6px -1px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.\[\&_\[data-title\]\]\:univer-text-sm [data-title]{font-size:14px;line-height:20px}.\[\&_\[data-title\]\]\:univer-text-gray-900 [data-title]{color:var(--univer-gray-900)}.\[\&_\[data-u-comp\=form-layout\]\]\:univer-max-w-\[calc\(50\%-8px\)\] [data-u-comp=form-layout]{max-width:calc(50% - 8px)}.\[\&_\[data-u-comp\=form-layout\]\]\:univer-shrink [data-u-comp=form-layout]{flex-shrink:1}.\[\&_\[data-u-comp\=form-layout\]\]\:univer-grow [data-u-comp=form-layout]{flex-grow:1}.\[\&_\[data-u-comp\=input\]\]\:univer-w-full [data-u-comp=input]{width:100%}.\[\&_\[data-u-comp\=input\]\]\:univer-border-red-500 [data-u-comp=input]{border-color:var(--univer-red-500)}.\[\&_\[data-u-comp\=pager-left-arrow\]\:hover\]\:\!univer-bg-gray-600 [data-u-comp=pager-left-arrow]:hover,.\[\&_\[data-u-comp\=pager-right-arrow\]\:hover\]\:\!univer-bg-gray-600 [data-u-comp=pager-right-arrow]:hover{background-color:var(--univer-gray-600)!important}.\[\&_\[data-u-comp\=select\]\]\:univer-w-full [data-u-comp=select]{width:100%}.\[\&_\[data-u-comp\=select\]\]\:univer-border-red-500 [data-u-comp=select]{border-color:var(--univer-red-500)}.\[\&_input\]\:univer-box-border input{box-sizing:border-box}.\[\&_input\]\:univer-flex input{display:flex}.\[\&_input\]\:univer-h-8 input{height:32px}.\[\&_input\]\:univer-items-center input{align-items:center}.\[\&_input\]\:univer-rounded input{border-radius:4px}.\[\&_input\]\:univer-border input{border-width:1px}.\[\&_input\]\:univer-border-solid input{border-style:solid}.\[\&_input\]\:univer-border-gray-200 input{border-color:var(--univer-gray-200)}.\[\&_input\]\:univer-px-1\.5 input{padding-left:6px;padding-right:6px}.\[\&_input\]\:univer-text-gray-700 input{color:var(--univer-gray-700)}.\[\&_input\]\:univer-outline-none input{outline:2px solid transparent;outline-offset:2px}.dark\:\[\&_input\]\:univer-border-gray-600 input:where(.univer-dark,.univer-dark *){border-color:var(--univer-gray-600)}.dark\:\[\&_input\]\:univer-text-white input:where(.univer-dark,.univer-dark *){color:var(--univer-white)}.\[\&_svg\]\:univer-pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:univer-size-4 svg{width:16px;height:16px}.\[\&_svg\]\:univer-shrink-0 svg{flex-shrink:0}.univer-date-picker{position:relative;width:200px;height:32px;border-radius:4px;box-sizing:border-box;display:inline-flex;border-width:1px;border-style:solid;border-color:var(--univer-gray-200);background-color:var(--univer-white);color:var(--univer-gray-900)}.univer-dark .univer-date-picker{background-color:var(--univer-gray-900);color:var(--univer-white)}.univer-date-picker-rtl{direction:rtl}.univer-date-picker-invalid{box-shadow:0 0 2px red}.univer-date-picker-panel{display:inline-block;vertical-align:top}.univer-date-picker-panel-focused{border-color:#00f}.univer-date-picker-panel-rtl{direction:rtl}.univer-date-picker-suffix-icon{position:absolute;top:50%;right:0;bottom:0;display:flex;align-items:center;padding:0 8px;transform:translateY(-50%);cursor:pointer;color:var(--univer-gray-600)}.univer-dark .univer-date-picker-suffix-icon{color:var(--univer-gray-200)}.univer-date-picker-decade-panel,.univer-date-picker-year-panel,.univer-date-picker-month-panel,.univer-date-picker-week-panel,.univer-date-picker-date-panel,.univer-date-picker-time-panel{display:flex;flex-direction:column}.univer-date-picker-decade-panel table,.univer-date-picker-year-panel table,.univer-date-picker-month-panel table,.univer-date-picker-week-panel table,.univer-date-picker-date-panel table,.univer-date-picker-time-panel table{text-align:center;border-collapse:collapse}.univer-date-picker-header{margin-bottom:12px;display:flex;align-items:center}.univer-date-picker-header>*{flex:none}.univer-date-picker-header-view{height:16px;flex:auto;display:flex;justify-content:center;align-items:center;gap:8px}.univer-date-picker-header-view>button{padding:0;border:0;background-color:transparent;cursor:pointer;color:var(--univer-gray-900)}.univer-dark .univer-date-picker-header-view>button{color:var(--univer-white)}.univer-date-picker-header-super-prev-btn,.univer-date-picker-header-super-next-btn,.univer-date-picker-header-prev-btn,.univer-date-picker-header-next-btn{width:16px;height:16px;padding:0;line-height:16px;font-size:16px;border:none;background-color:transparent;cursor:pointer;color:var(--univer-gray-600)}.univer-dark .univer-date-picker-header-super-prev-btn,.univer-dark .univer-date-picker-header-super-next-btn,.univer-dark .univer-date-picker-header-prev-btn,.univer-dark .univer-date-picker-header-next-btn{color:var(--univer-gray-200)}.univer-date-picker-cell{color:var(--univer-gray-600)}.univer-dark .univer-date-picker-cell{color:var(--univer-gray-200)}.univer-date-picker-cell-disabled{opacity:.2}.univer-date-picker-cell-inner{display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;font-size:12px;line-height:24px;background:transparent;border:0;border-radius:4px;outline:none;cursor:pointer;transition:background .3s;padding:0 6px}.univer-date-picker-cell-in-view{color:#333}.univer-date-picker-cell-in-range>.univer-date-picker-cell-inner{background:#0000ff0d}.univer-date-picker-cell-hover>.univer-date-picker-cell-inner:hover{background-color:var(--univer-gray-100)}.univer-date-picker-cell-range-hover-start:after,.univer-date-picker-cell-range-hover-end:after,.univer-date-picker-cell-range-hover:after{position:absolute;top:3px;right:0;bottom:0;left:0;border:1px solid green;border-right:0;border-left:0;content:"";pointer-events:none}.univer-date-picker-cell-range-hover-start:after{border-left:1px solid green!important}.univer-date-picker-cell-range-hover-end:after{border-right:1px solid green!important}.univer-date-picker-cell-today>.univer-date-picker-cell-inner{border-width:1px;border-style:solid;border-color:var(--univer-primary-600)}.univer-date-picker-cell-range-start>.univer-date-picker-cell-inner,.univer-date-picker-cell-range-end>.univer-date-picker-cell-inner,.univer-date-picker-cell-selected>.univer-date-picker-cell-inner{color:#fff;background-color:var(--univer-primary-600)}.univer-date-picker-presets{background:#ccf}.univer-date-picker-presets ul{margin:0;padding:0;list-style:none}.univer-date-picker-now{padding-top:12px}.univer-date-picker-now-btn{font-size:13px;cursor:pointer;color:var(--univer-primary-600)}.univer-date-picker-footer,.univer-date-picker-picker-footer{margin-top:12px;border-width:0px;border-top-width:1px;border-style:solid;border-top-color:var(--univer-gray-200)}.univer-date-picker-ranges{margin:0;display:flex;list-style-type:none;align-items:center;justify-content:center;padding:0}.univer-date-picker-clear{position:absolute;top:7px;right:8px;cursor:pointer}.univer-date-picker-clear-btn{width:16px;height:16px;text-align:center;line-height:16px;border-radius:50%;display:block;background-color:var(--univer-gray-500)}.univer-date-picker-clear-btn:before{content:"×";position:absolute;top:-1px;left:0;right:0;bottom:0;color:#fff;font-size:16px;line-height:16px}.univer-date-picker-dropdown{position:absolute;pointer-events:none}.univer-date-picker-dropdown-range{padding:10px 0}.univer-date-picker-dropdown-hidden{display:none}.univer-date-picker-range{position:relative;display:inline-flex}.univer-date-picker-range-wrapper{display:flex}.univer-date-picker-active-bar{bottom:0;height:3px;background:green;opacity:0;transition:all .3s;pointer-events:none}.univer-date-picker-focused .univer-date-picker-active-bar{opacity:1}.univer-date-picker-panel-container{display:inline-block;vertical-align:top;transition:margin .3s;pointer-events:all}.univer-date-picker-panel-layout{display:flex;flex-wrap:nowrap;align-items:stretch;overflow:hidden;border-radius:4px;border-width:1px;border-style:solid;border-color:var(--univer-gray-200);background-color:var(--univer-white);padding:16px;--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 3px #0000001a,0 1px 2px -1px #0000001a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-date-picker-input{position:relative;display:inline-flex;width:100%}.univer-date-picker-input>input{width:100%;padding-left:12px;border:none;border-radius:4px;box-sizing:border-box;background-color:transparent}.univer-date-picker-input>input:focus{outline:none}.univer-dropdown{position:absolute;z-index:1070;top:-9999px;left:-9999px;display:block}.univer-dropdown-hidden{display:none}.univer-dropdown-slide-up-enter,.univer-dropdown-slide-up-appear{transform-origin:0 0;display:block!important;animation-duration:.15s;animation-fill-mode:both;opacity:0;animation-play-state:paused;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.univer-dropdown-slide-up-leave{transform-origin:0 0;display:block!important;animation-duration:.15s;animation-fill-mode:both;opacity:1;animation-play-state:paused;animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-bottomLeft,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-bottomLeft,.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-bottomCenter,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-bottomCenter,.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-bottomRight,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-bottomRight{animation-name:dropdown-slide-up-in;animation-play-state:running}.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-topLeft,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-topLeft,.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-topCenter,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-topCenter,.univer-dropdown-slide-up-enter.univer-dropdown-slide-up-enter-active.univer-dropdown-placement-topRight,.univer-dropdown-slide-up-appear.univer-dropdown-slide-up-appear-active.univer-dropdown-placement-topRight{animation-name:dropdown-slide-down-in;animation-play-state:running}.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-bottomLeft,.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-bottomCenter,.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-bottomRight{animation-name:dropdown-slide-up-out;animation-play-state:running}.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-topLeft,.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-topCenter,.univer-dropdown-slide-up-leave.univer-dropdown-slide-up-leave-active.univer-dropdown-placement-topRight{animation-name:dropdown-slide-down-out;animation-play-state:running}@keyframes dropdown-slide-up-in{0%{transform-origin:0% 0%;transform:scaleY(0);opacity:0}to{transform-origin:0% 0%;transform:scaleY(1);opacity:1}}@keyframes dropdown-slide-up-out{0%{transform-origin:0% 0%;transform:scaleY(1);opacity:1}to{transform-origin:0% 0%;transform:scaleY(0);opacity:0}}@keyframes dropdown-slide-down-in{0%{transform-origin:0% 100%;transform:scaleY(0);opacity:0}to{transform-origin:0% 100%;transform:scaleY(1);opacity:1}}@keyframes dropdown-slide-down-out{0%{transform-origin:0% 100%;transform:scaleY(1);opacity:1}to{transform-origin:0% 100%;transform:scaleY(0);opacity:0}}.react-grid-layout{position:relative;transition:height .2s ease}.react-grid-item{transition:all .2s ease;transition-property:left,top,width,height}.react-grid-item img{pointer-events:none;-webkit-user-select:none;user-select:none}.react-grid-item.cssTransforms{transition-property:transform,width,height}.react-grid-item.resizing{transition:none;z-index:1;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:transform}.react-grid-item.dropping{visibility:hidden}.react-grid-item.react-grid-placeholder{background:red;opacity:.2;transition-duration:.1s;z-index:2;-webkit-user-select:none;-o-user-select:none;user-select:none}.react-grid-item.react-grid-placeholder.placeholder-resizing{transition:none}.react-grid-item>.react-resizable-handle{position:absolute;width:20px;height:20px}.react-grid-item>.react-resizable-handle:after{content:"";position:absolute;right:3px;bottom:3px;width:5px;height:5px;border-right:2px solid rgba(0,0,0,.4);border-bottom:2px solid rgba(0,0,0,.4)}.react-resizable-hide>.react-resizable-handle{display:none}.react-grid-item>.react-resizable-handle.react-resizable-handle-sw{bottom:0;left:0;cursor:sw-resize;transform:rotate(90deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-se{bottom:0;right:0;cursor:se-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-nw{top:0;left:0;cursor:nw-resize;transform:rotate(180deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-ne{top:0;right:0;cursor:ne-resize;transform:rotate(270deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-w,.react-grid-item>.react-resizable-handle.react-resizable-handle-e{top:50%;margin-top:-10px;cursor:ew-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-w{left:0;transform:rotate(135deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-e{right:0;transform:rotate(315deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-n,.react-grid-item>.react-resizable-handle.react-resizable-handle-s{left:50%;margin-left:-10px;cursor:ns-resize}.react-grid-item>.react-resizable-handle.react-resizable-handle-n{top:0;transform:rotate(225deg)}.react-grid-item>.react-resizable-handle.react-resizable-handle-s{bottom:0;transform:rotate(45deg)}.univer-tree{-webkit-user-select:none;-moz-user-select:none;user-select:none;position:relative;color:var(--univer-gray-900)}.univer-dark .univer-tree{color:var(--univer-white)}.univer-tree-icon{position:absolute;top:50%;left:-16px;transform:translateY(-50%) rotate(-90deg);display:flex;align-items:center;justify-content:center;font-size:8px}.univer-tree-icon-expand{transform:translateY(-50%)}.univer-tree-list{margin:0;padding:0;list-style:none;height:100%}.univer-tree-list .univer-tree-list{overflow:hidden;height:0}.univer-tree-list .univer-tree-list-expand{height:inherit}.univer-tree-list-item{position:relative;padding-left:20px;font-size:13px}.univer-tree-list-item>a{position:relative;display:flex;align-items:center;cursor:pointer}.univer-tree-list-item-title{display:inline-block;height:100%;margin:0 4px;flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.univer-tree-list-item-content{margin:4px 0;width:100%;position:relative;display:flex;align-items:center}.univer-tree-list-item-content-selected-icon{position:absolute;top:50%;left:-20px;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;font-size:16px;line-height:24px}.univer-menu{max-width:-moz-fit-content;max-width:fit-content;margin:0;box-sizing:border-box;width:-moz-fit-content;width:fit-content;min-width:208px;list-style-type:none;border-radius:6px;border-width:1px;border-style:solid;border-color:var(--univer-gray-200);background-color:var(--univer-white);padding:4px 8px;font-size:14px;line-height:20px;--tw-shadow: 0px 1px 6px -2px rgba(30, 40, 77, .08), 0px 2px 6px -1px rgba(30, 40, 77, .1);--tw-shadow-colored: 0px 1px 6px -2px var(--tw-shadow-color), 0px 2px 6px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 6px -2px #1e284d14,0 2px 6px -1px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-dark .univer-menu{border-color:var(--univer-gray-600);background-color:var(--univer-gray-700)}.univer-menu-vertical{display:grid}.univer-menu-hidden,.univer-menu-submenu-hidden{display:none}.univer-menu-item-group{padding-top:4px;padding-bottom:4px}.univer-menu-item-group:not(:last-child){border-bottom:1px solid #e3e5ea}.univer-dark .univer-menu-item-group:not(:last-child){border-bottom-color:var(--univer-gray-600)}.univer-menu-item-group-list{display:grid;margin:0;padding:0;grid-gap:4px;gap:4px}.univer-menu-item-group-title{font-weight:600;line-height:1.5em;padding:6px 8px 4px;font-size:12px;line-height:16px;color:var(--univer-gray-600)}.univer-dark .univer-menu-item-group-title{color:var(--univer-white)}.univer-menu-item-group-title:empty{display:none}.univer-menu-item-active,.univer-menu-submenu-active{border-radius:6px;background-color:var(--univer-gray-50)}.univer-dark .univer-menu-item-active,.univer-dark .univer-menu-submenu-active{background-color:var(--univer-gray-600)}.univer-menu-item-selected{transform:translateZ(0);border-radius:6px;background-color:var(--univer-gray-50)}.univer-dark .univer-menu-item-selected{background-color:var(--univer-gray-600)}.univer-menu-submenu-selected{border-radius:6px;background-color:var(--univer-gray-50)}.univer-dark .univer-menu-submenu-selected{background-color:var(--univer-gray-600)}.univer-menu>li.univer-menu-submenu{padding:0}.univer-menu-horizontal-sub,.univer-menu-vertical-sub,.univer-menu-vertical-left-sub,.univer-menu-vertical-right-sub{min-width:160px;margin-top:0}.univer-menu-item{display:flex;align-items:center;min-height:32px;line-height:1.5em;gap:12px;border-radius:6px;padding-left:8px;padding-right:8px;font-size:14px;line-height:20px;color:var(--univer-gray-900)}.univer-dark .univer-menu-item{color:var(--univer-white)}.univer-menu-item:hover{background-color:var(--univer-gray-50)}.univer-dark .univer-menu-item:hover{background-color:var(--univer-gray-600)}.univer-menu-item .icon{color:var(--univer-gray-600)}.univer-dark .univer-menu-item .icon{color:var(--univer-white)}.univer-menu-item,.univer-menu-submenu{cursor:pointer;position:relative;box-sizing:border-box;margin:0;white-space:nowrap;list-style:none}.univer-menu-item.univer-menu-item-disabled,.univer-menu-submenu.univer-menu-submenu-disabled{cursor:not-allowed;color:var(--univer-gray-400)!important}.univer-menu-submenu-popup{position:absolute;z-index:1070}.univer-menu-submenu-popup .submenu-title-wrapper{padding-right:20px}.univer-menu-submenu-title{display:flex;align-items:center;justify-content:space-between;height:100%;min-height:32px;line-height:1.5em;padding-left:8px;padding-right:8px;font-size:14px;line-height:20px;color:var(--univer-gray-900)}.univer-dark .univer-menu-submenu-title{color:var(--univer-white)}.univer-menu-submenu-title-more-icon,.univer-menu-item-more-icon{margin-left:8px;font-size:14px;line-height:20px;color:var(--univer-gray-400)}.univer-menu-horizontal{overflow:hidden;white-space:nowrap;border:none;border-bottom:1px solid transparent;box-shadow:none;border-bottom-color:var(--univer-gray-200)}.univer-dark .univer-menu-horizontal{border-bottom-color:var(--univer-gray-600)}.univer-menu-horizontal>.univer-menu-item,.univer-menu-horizontal>.univer-menu-submenu>.univer-menu-submenu-title{padding:15px 20px}.univer-menu-horizontal>.univer-menu-submenu,.univer-menu-horizontal>.univer-menu-item{display:inline-block;vertical-align:bottom;border-bottom:2px solid transparent}.univer-menu-vertical,.univer-menu-vertical-left,.univer-menu-vertical-right,.univer-menu-inline{width:100%}.univer-menu-vertical>.univer-menu-item,.univer-menu-vertical>.univer-menu-submenu>.univer-menu-submenu-title,.univer-menu-vertical-left>.univer-menu-item,.univer-menu-vertical-left>.univer-menu-submenu>.univer-menu-submenu-title,.univer-menu-vertical-right>.univer-menu-item,.univer-menu-vertical-right>.univer-menu-submenu>.univer-menu-submenu-title,.univer-menu-inline>.univer-menu-item,.univer-menu-inline>.univer-menu-submenu>.univer-menu-submenu-title{display:flex;align-items:center;justify-content:space-between;box-sizing:border-box;width:100%;min-height:28px;padding:4px}.univer-menu-vertical .univer-menu-submenu-arrow,.univer-menu-vertical-left .univer-menu-submenu-arrow,.univer-menu-vertical-right .univer-menu-submenu-arrow,.univer-menu-inline .univer-menu-submenu-arrow{position:absolute;right:16px;display:inline-block;font-size:inherit;line-height:1.5em;text-align:center;text-transform:none;text-rendering:auto;vertical-align:baseline}.univer-menu-sub-inline{padding:0;border:none;border-radius:0;box-shadow:none}.univer-menu-sub-inline>.univer-menu-item,.univer-menu-sub-inline>.univer-menu-submenu>.univer-menu-submenu-title{padding-top:8px;padding-right:0;padding-bottom:8px}.univer-menu-open-slide-up-enter,.univer-menu-open-slide-up-appear{opacity:0;animation-play-state:paused;animation-timing-function:cubic-bezier(.08,.82,.17,1);transform-origin:0 0;animation-duration:.3s;animation-fill-mode:both}.univer-menu-open-slide-up-leave{opacity:1;animation-play-state:paused;animation-timing-function:cubic-bezier(.6,.04,.98,.34);transform-origin:0 0;animation-duration:.3s;animation-fill-mode:both}.univer-menu-open-slide-up-enter.univer-menu-open-slide-up-enter-active,.univer-menu-open-slide-up-appear.univer-menu-open-slide-up-appear-active{animation-name:menu-open-slide-up-in;animation-play-state:running}.univer-menu-open-slide-up-leave.univer-menu-open-slide-up-leave-active{animation-name:menu-open-slide-up-out;animation-play-state:running}@keyframes menu-open-slide-up-in{0%{transform-origin:0% 0%;transform:scaleY(0);opacity:0}to{transform-origin:0% 0%;transform:scaleY(1);opacity:1}}@keyframes menu-open-slide-up-out{0%{transform-origin:0% 0%;transform:scaleY(1);opacity:1}to{transform-origin:0% 0%;transform:scaleY(0);opacity:0}}.univer-menu-open-zoom-enter,.univer-menu-open-zoom-appear{opacity:0;animation-play-state:paused;animation-timing-function:cubic-bezier(.08,.82,.17,1);transform-origin:0 0;animation-duration:.3s;animation-fill-mode:both}.univer-menu-open-zoom-leave{animation-play-state:paused;animation-timing-function:cubic-bezier(.6,.04,.98,.34);transform-origin:0 0;animation-duration:.3s;animation-fill-mode:both}.univer-menu-open-zoom-enter.univer-menu-open-zoom-enter-active,.univer-menu-open-zoom-appear.univer-menu-open-zoom-appear-active{animation-name:menu-open-zoom-in;animation-play-state:running}.univer-menu-open-zoom-leave.univer-menu-open-zoom-leave-active{animation-name:menu-open-zoom-out;animation-play-state:running}@keyframes menu-open-zoom-in{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes menu-open-zoom-out{0%{transform:scale(1)}to{transform:scale(0);opacity:0}}.univer-popup{position:fixed;z-index:1070;top:-9999px;left:-9999px;border-radius:6px;overflow:hidden;--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 3px #0000001a,0 1px 2px -1px #0000001a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-popup-enter{transform-origin:0 0;animation-duration:.15s;animation-fill-mode:both;opacity:0;animation-play-state:paused;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.univer-popup-enter-active{animation-name:popup-slide-up-in;animation-play-state:running}.univer-popup-exit{transform-origin:0 0;animation-duration:.15s;animation-fill-mode:both;opacity:1;animation-name:popup-slide-up-out;animation-play-state:running;animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.univer-popup-exit-active{display:none}@keyframes popup-slide-up-in{0%{transform-origin:0 0;transform:scaleY(0);opacity:0}to{transform-origin:0 0;transform:scaleY(1);opacity:1}}@keyframes popup-slide-up-out{0%{transform-origin:0 0;transform:scaleY(1);opacity:1}to{transform-origin:0 0;transform:scaleY(0);opacity:0}}.univer-popup-mask{position:fixed;z-index:1060;top:0;left:0;right:0;bottom:0}.univer-date-range-picker{position:relative;width:280px;height:32px;border-radius:4px;box-sizing:border-box;display:inline-flex;border-width:1px;border-style:solid;border-color:var(--univer-gray-200);color:var(--univer-gray-900)}.univer-dark .univer-date-range-picker{background-color:var(--univer-gray-900);color:var(--univer-white)}.univer-date-range-picker-rtl{direction:rtl}.univer-date-range-picker-invalid{box-shadow:0 0 2px red}.univer-date-range-picker-panel{display:inline-block;vertical-align:top}.univer-date-range-picker-panel-focused{border-color:#00f}.univer-date-range-picker-panel-rtl{direction:rtl}.univer-date-range-picker-suffix-icon{position:absolute;top:50%;right:0;bottom:0;display:flex;align-items:center;padding:0 8px;transform:translateY(-50%);cursor:pointer;color:var(--univer-gray-600)}.univer-date-range-picker-decade-panel,.univer-date-range-picker-year-panel,.univer-date-range-picker-month-panel,.univer-date-range-picker-week-panel,.univer-date-range-picker-date-panel,.univer-date-range-picker-time-panel{display:flex;flex-direction:column}.univer-date-range-picker-decade-panel table,.univer-date-range-picker-year-panel table,.univer-date-range-picker-month-panel table,.univer-date-range-picker-week-panel table,.univer-date-range-picker-date-panel table,.univer-date-range-picker-time-panel table{text-align:center;border-collapse:collapse}.univer-date-range-picker-header{margin-bottom:12px;display:flex;align-items:center}.univer-date-range-picker-header>*{flex:none}.univer-date-range-picker-header-view{height:16px;flex:auto;display:flex;justify-content:center;align-items:center;gap:8px}.univer-date-range-picker-header-view>button{padding:0;border:0;background-color:transparent;cursor:pointer}.univer-date-range-picker-header-super-prev-btn,.univer-date-range-picker-header-super-next-btn,.univer-date-range-picker-header-prev-btn,.univer-date-range-picker-header-next-btn{width:16px;height:16px;padding:0;line-height:16px;font-size:16px;border:none;background-color:transparent;cursor:pointer;color:var(--univer-gray-600)}.univer-dark .univer-date-range-picker-header-super-prev-btn,.univer-dark .univer-date-range-picker-header-super-next-btn,.univer-dark .univer-date-range-picker-header-prev-btn,.univer-dark .univer-date-range-picker-header-next-btn{color:var(--univer-gray-400)}.univer-date-range-picker-cell{color:var(--univer-gray-600)}.univer-dark .univer-date-range-picker-cell{color:var(--univer-gray-400)}.univer-date-range-picker-cell-disabled{opacity:.2}.univer-date-range-picker-cell-inner{display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;font-size:12px;line-height:24px;background:transparent;border:0;border-radius:4px;outline:none;cursor:pointer;transition:background .3s}.univer-date-range-picker-cell-in-view{color:#333}.univer-date-range-picker-cell-in-range>.univer-date-range-picker-cell-inner{background:#0000ff0d}.univer-date-range-picker-cell-hover>.univer-date-range-picker-cell-inner{background-color:var(--univer-gray-100)}.univer-date-range-picker-cell-range-hover-start:after,.univer-date-range-picker-cell-range-hover-end:after,.univer-date-range-picker-cell-range-hover:after{position:absolute;top:3px;right:0;bottom:0;left:0;border:1px solid green;border-right:0;border-left:0;content:"";pointer-events:none}.univer-date-range-picker-cell-range-hover-start:after{border-left:1px solid green!important}.univer-date-range-picker-cell-range-hover-end:after{border-right:1px solid green!important}.univer-date-range-picker-cell-today>.univer-date-range-picker-cell-inner{border-width:1px;border-style:solid;border-color:var(--univer-primary-600)}.univer-date-range-picker-cell-range-start>.univer-date-range-picker-cell-inner,.univer-date-range-picker-cell-range-end>.univer-date-range-picker-cell-inner,.univer-date-range-picker-cell-selected>.univer-date-range-picker-cell-inner{color:#fff;background-color:var(--univer-primary-600)}.univer-date-range-picker-presets{background:#ccf}.univer-date-range-picker-presets ul{margin:0;padding:0;list-style:none}.univer-date-range-picker-now{padding-top:12px}.univer-date-range-picker-now-btn{font-size:13px;cursor:pointer;color:var(--univer-primary-600)}.univer-date-range-picker-footer,.univer-date-range-picker-picker-footer{margin-top:12px;border-width:0px;border-top-width:1px;border-style:solid;border-top-color:var(--univer-gray-200)}.univer-date-range-picker-dropdown{position:absolute;pointer-events:none}.univer-date-range-picker-dropdown-range{padding:10px 0}.univer-date-range-picker-dropdown-hidden{display:none}.univer-date-range-picker-range{position:relative;display:inline-flex}.univer-date-range-picker-range-wrapper{display:flex}.univer-date-range-picker-active-bar{bottom:0;height:3px;opacity:0;transition:all .3s;pointer-events:none;background-color:var(--univer-primary-600)}.univer-date-range-picker-focused .univer-date-range-picker-active-bar{opacity:1}.univer-date-range-picker-panel-container{display:inline-block;vertical-align:top;transition:margin .3s;pointer-events:all}.univer-date-range-picker-panel-layout{display:flex;flex-wrap:nowrap;align-items:stretch;overflow:hidden;border-radius:4px;border-width:1px;border-style:solid;border-color:var(--univer-gray-200);background-color:var(--univer-white);padding:16px;--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 3px #0000001a,0 1px 2px -1px #0000001a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-date-range-picker-input{position:relative;display:inline-flex;width:100%}.univer-date-range-picker-input>input{width:100%;padding-left:12px;border:none;border-radius:4px;box-sizing:border-box;background-color:transparent}.univer-date-range-picker-input>input:focus{outline:none}.univer-pointer-events-auto{pointer-events:auto}.univer-invisible{visibility:hidden}.univer-fixed{position:fixed}.univer-sticky{position:sticky}.univer-left-1\/2{left:50%}.univer-left-\[-9999px\]{left:-9999px}.univer-right-2{right:8px}.univer-top-\[-99999px\]{top:-99999px}.univer-top-\[-9999px\]{top:-9999px}.univer-top-\[calc\(50\%-6px\)\]{top:calc(50% - 6px)}.univer-z-\[-1\]{z-index:-1}.univer-z-\[1020\]{z-index:1020}.univer-z-\[1\]{z-index:1}.univer-mx-2{margin-left:8px;margin-right:8px}.univer-mx-auto{margin-left:auto;margin-right:auto}.univer-line-clamp-1{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.univer-size-3\.5{width:14px;height:14px}.univer-h-0{height:0px}.univer-h-1{height:4px}.univer-h-10{height:40px}.univer-min-h-0{min-height:0px}.univer-min-h-full{min-height:100%}.univer-w-0{width:0px}.univer-w-0\.5{width:2px}.univer-w-12{width:48px}.univer-w-40{width:160px}.univer-w-7{width:28px}.univer-w-96{width:384px}.univer-w-\[55px\]{width:55px}.univer-w-screen{width:100vw}.univer-min-w-6{min-width:24px}.univer-min-w-8{min-width:32px}.univer-max-w-52{max-width:208px}.univer-max-w-\[var\(--radix-popper-available-width\)\]{max-width:var(--radix-popper-available-width)}.-univer-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(-50%,var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-translate-x-0{--tw-translate-x: 0px;transform:translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-translate-x-full{--tw-translate-x: 100%;transform:translate(100%,var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.univer-grid-rows-\[100\%\]{grid-template-rows:100%}.univer-grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.univer-grid-rows-\[auto_1fr_auto\]{grid-template-rows:auto 1fr auto}.univer-flex-wrap{flex-wrap:wrap}.univer-rounded-2xl{border-radius:16px}.univer-rounded-r{border-top-right-radius:4px;border-bottom-right-radius:4px}.\!univer-bg-gray-200{background-color:var(--univer-gray-200)!important}.\!univer-bg-gray-500{background-color:var(--univer-gray-500)!important}.\!univer-bg-primary-500{background-color:var(--univer-primary-500)!important}.univer-bg-gray-400{background-color:var(--univer-gray-400)}.univer-bg-gray-50{background-color:var(--univer-gray-50)}.univer-bg-gray-500{background-color:var(--univer-gray-500)}.univer-bg-primary-500{background-color:var(--univer-primary-500)}.univer-pb-2{padding-bottom:8px}.univer-text-right{text-align:right}.univer-underline{text-decoration-line:underline}.univer-transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:1;opacity:var(--tw-enter-opacity, 1);transform:translateZ(0) scaleZ(1) rotate(0);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:1;opacity:var(--tw-exit-opacity, 1);transform:translateZ(0) scaleZ(1) rotate(0);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.univer-animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial }.univer-fade-in{--tw-enter-opacity: 0 }.univer-slide-in-from-top-full{--tw-enter-translate-y: -100% }.univer-duration-300{animation-duration:.3s}.last\:univer-border-b-0:last-child{border-bottom-width:0px}.hover\:\!univer-bg-primary-500:hover{background-color:var(--univer-primary-500)!important}.hover\:univer-opacity-50:hover{opacity:.5}.focus\:univer-bg-white:focus{background-color:var(--univer-white)}.disabled\:univer-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:univer-text-gray-300:disabled{color:var(--univer-gray-300)}.disabled\:hover\:univer-bg-transparent:hover:disabled{background-color:transparent}@media (min-width: 640px){.sm\:univer-block{display:block}}.dark\:\!univer-bg-gray-500:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-500)!important}.dark\:univer-bg-gray-500:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-500)}.dark\:univer-text-gray-600:where(.univer-dark,.univer-dark *){color:var(--univer-gray-600)}.dark\:disabled\:univer-text-gray-600:disabled:where(.univer-dark,.univer-dark *){color:var(--univer-gray-600)}.\[\&\>\*\:last-child\:after\]\:univer-absolute>*:last-child:after{position:absolute}.\[\&\>\*\:last-child\:after\]\:-univer-right-2>*:last-child:after{right:-8px}.\[\&\>\*\:last-child\:after\]\:univer-top-1\/2>*:last-child:after{top:50%}.\[\&\>\*\:last-child\:after\]\:univer-h-5>*:last-child:after{height:20px}.\[\&\>\*\:last-child\:after\]\:univer-w-px>*:last-child:after{width:1px}.\[\&\>\*\:last-child\:after\]\:-univer-translate-y-1\/2>*:last-child:after{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),-50%) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>\*\:last-child\:after\]\:univer-translate-x-\[3px\]>*:last-child:after{--tw-translate-x: 3px;transform:translate(3px,var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>\*\:last-child\:after\]\:univer-bg-gray-200>*:last-child:after{background-color:var(--univer-gray-200)}.\[\&\>\*\:last-child\:after\]\:univer-content-\[\'\'\]>*:last-child:after{--tw-content: "";content:"";content:var(--tw-content)}.dark\:\[\&\>\*\:last-child\:after\]\:univer-bg-gray-600>*:last-child:where(.univer-dark,.univer-dark *):after{background-color:var(--univer-gray-600)}.\[\&\>\*\:last-child\]\:univer-relative>*:last-child{position:relative}.\[\&\>\*\]\:univer-inline-flex>*{display:inline-flex}.\[\&\>\*\]\:univer-h-6>*{height:24px}.\[\&\>\*\]\:univer-items-center>*{align-items:center}.\[\&\>\*\]\:univer-rounded>*{border-radius:4px}.\[\&\>\*\]\:univer-px-1>*{padding-left:4px;padding-right:4px}.\[\&\>\*\]\:univer-transition-colors>*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:\[\&\>\*\]\:univer-bg-gray-100>*:hover{background-color:var(--univer-gray-100)}.\[\&\>span\]\:univer-mt-0\.5>span{margin-top:2px}.\[\&\>span\]\:univer-w-full>span{width:100%}.\[\&\>span\]\:univer-truncate>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:univer-text-sm>span{font-size:14px;line-height:20px}.\[\&\>svg\]\:univer-size-\[18px\]>svg{width:18px;height:18px}.\[\&\>svg\]\:univer-text-lg>svg{font-size:18px;line-height:28px}.\[\&_input\:focus\]\:\!univer-ring-0 input:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0,0,0,0))!important}.\[\&_input\]\:univer-h-6 input{height:24px}.\[\&_input\]\:univer-w-7 input{width:28px}.\[\&_input\]\:univer-border-none input{border-style:none}.\[\&_input\]\:univer-bg-transparent input{background-color:transparent}.\[\&_input\]\:univer-p-0 input{padding:0}.\[\&_input\]\:univer-text-sm input{font-size:14px;line-height:20px}.univer-bottom-0{bottom:0}.univer-left-5{left:20px}.univer-left-\[5px\]{left:5px}.univer-top-4{top:16px}.univer-top-\[5px\]{top:5px}.univer-mb-1{margin-bottom:4px}.univer-mr-1{margin-right:4px}.univer-mt-1\.5{margin-top:6px}.univer-mt-12{margin-top:48px}.univer-size-3{width:12px;height:12px}.univer-size-full{width:100%;height:100%}.univer-h-20{height:80px}.univer-h-\[24px\]{height:24px}.univer-w-28{width:112px}.univer-w-4\/5{width:80%}.univer-w-8{width:32px}.univer-w-\[0px\]{width:0px}.univer-w-\[72px\]{width:72px}.univer-min-w-\[180px\]{min-width:180px}.univer-flex-shrink-0{flex-shrink:0}.univer-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.univer-gap-2\.5{gap:10px}.univer-overflow-x-hidden{overflow-x:hidden}.univer-rounded-r-2xl{border-top-right-radius:16px;border-bottom-right-radius:16px}.univer-border-primary-500{border-color:var(--univer-primary-500)}.univer-bg-gray-700{background-color:var(--univer-gray-700)}.univer-bg-none{background-image:none}.univer-px-2\.5{padding-left:10px;padding-right:10px}.univer-px-3{padding-left:12px;padding-right:12px}.univer-pb-0\.5{padding-bottom:2px}.univer-pb-4{padding-bottom:16px}.univer-pl-1\.5{padding-left:6px}.univer-pl-5{padding-left:20px}.univer-pr-2{padding-right:8px}.univer-pr-5{padding-right:20px}.univer-pt-1\.5{padding-top:6px}.univer-pt-14{padding-top:56px}.univer-font-\[500\],.univer-font-medium{font-weight:500}.univer-leading-\[24px\]{line-height:24px}.univer-text-gray-800{color:var(--univer-gray-800)}.univer-shadow-\[0px_1px_3px_-1px_rgba\(30\,40\,77\,0\.10\)\,0px_1px_4px_0px_rgba\(30\,40\,77\,0\.12\)\]{--tw-shadow: 0px 1px 3px -1px rgba(30,40,77,.1),0px 1px 4px 0px rgba(30,40,77,.12);--tw-shadow-colored: 0px 1px 3px -1px var(--tw-shadow-color), 0px 1px 4px 0px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 3px -1px #1e284d1a,0 1px 4px #1e284d1f;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-shadow-\[0px_1px_6px_-2px_rgba\(30\,40\,77\,0\.08\)\,0px_2px_6px_-1px_rgba\(30\,40\,77\,0\.10\)\]{--tw-shadow: 0px 1px 6px -2px rgba(30,40,77,.08),0px 2px 6px -1px rgba(30,40,77,.1);--tw-shadow-colored: 0px 1px 6px -2px var(--tw-shadow-color), 0px 2px 6px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 6px -2px #1e284d14,0 2px 6px -1px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-backdrop-blur-\[10px\]{--tw-backdrop-blur: blur(10px);-webkit-backdrop-filter:blur(10px) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:blur(10px) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.univer-duration-300{transition-duration:.3s}.univer-scrollbar-none{scrollbar-width:none}.univer-scrollbar-none::-webkit-scrollbar{display:none}.hover\:univer-border-primary-500:hover{border-color:var(--univer-primary-500)}.dark\:univer-border-gray-700:where(.univer-dark,.univer-dark *){border-color:var(--univer-gray-700)}.dark\:univer-text-gray-400:where(.univer-dark,.univer-dark *){color:var(--univer-gray-400)}.univer-pointer-events-none{pointer-events:none}.univer-inset-0{top:0;right:0;bottom:0;left:0}.-univer-bottom-0\.5{bottom:-2px}.-univer-left-0\.5{left:-2px}.-univer-right-0\.5{right:-2px}.-univer-top-0\.5{top:-2px}.univer-left-0{left:0}.univer-left-1{left:4px}.univer-left-\[100px\]{left:100px}.univer-right-0{right:0}.univer-right-5{right:20px}.univer-right-\[60px\]{right:60px}.univer-top-0{top:0}.univer-top-0\.5{top:2px}.univer-top-5{top:20px}.univer-top-\[200px\]{top:200px}.univer-z-10{z-index:10}.univer-z-\[1001\]{z-index:1001}.univer-z-\[100\]{z-index:100}.univer-mx-1{margin-left:4px;margin-right:4px}.univer-my-1\.5{margin-top:6px;margin-bottom:6px}.univer-mb-1\.5{margin-bottom:6px}.univer-mb-3{margin-bottom:12px}.univer-mb-4{margin-bottom:16px}.univer-ml-1{margin-left:4px}.univer-ml-1\.5{margin-left:6px}.univer-ml-3{margin-left:12px}.univer-ml-px{margin-left:1px}.univer-mr-0\.5{margin-right:2px}.univer-mr-1\.5{margin-right:6px}.univer-mr-2{margin-right:8px}.univer-mr-5{margin-right:20px}.univer-mt-auto{margin-top:auto}.univer-hidden{display:none}.univer-size-0{width:0px;height:0px}.univer-size-10{width:40px;height:40px}.univer-size-4{width:16px;height:16px}.univer-size-6{width:24px;height:24px}.univer-h-0\.5{height:2px}.univer-h-4{height:16px}.univer-h-5{height:20px}.univer-h-60{height:240px}.univer-h-8{height:32px}.univer-h-9{height:36px}.univer-h-\[1px\]{height:1px}.univer-h-\[270px\]{height:270px}.univer-h-\[30px\]{height:30px}.univer-h-\[50px\]{height:50px}.univer-h-\[calc\(100\%-16px\)\]{height:calc(100% - 16px)}.univer-h-\[calc\(100\%-8px\)\]{height:calc(100% - 8px)}.univer-h-px{height:1px}.univer-max-h-52{max-height:208px}.univer-max-h-\[100px\]{max-height:100px}.univer-max-h-\[360px\]{max-height:360px}.\!univer-w-\[90px\]{width:90px!important}.univer-w-16{width:64px}.univer-w-20{width:80px}.univer-w-24{width:96px}.univer-w-5{width:20px}.univer-w-60{width:240px}.univer-w-\[100px\]{width:100px}.univer-w-\[130px\]{width:130px}.univer-w-\[156px\]{width:156px}.univer-w-\[300px\]{width:300px}.univer-w-\[50\%\]{width:50%}.univer-w-fit{width:-moz-fit-content;width:fit-content}.univer-min-w-0{min-width:0px}.univer-min-w-12{min-width:48px}.univer-max-w-24{max-width:96px}.univer-max-w-32{max-width:128px}.univer-max-w-64{max-width:256px}.univer-max-w-80{max-width:320px}.univer-max-w-\[120px\]{max-width:120px}.univer-max-w-\[190px\]{max-width:190px}.univer-max-w-\[200px\]{max-width:200px}.univer-max-w-\[calc\(100\%-112px\)\]{max-width:calc(100% - 112px)}.univer-flex-\[0_1_auto\]{flex:0 1 auto}.univer-flex-shrink-0,.univer-shrink-0{flex-shrink:0}.univer-flex-grow{flex-grow:1}.univer-flex-grow-0{flex-grow:0}.univer-rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(180deg) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes univer-spin{to{transform:rotate(360deg)}}.univer-animate-spin{animation:univer-spin 1s linear infinite}.univer-cursor-default{cursor:default}.univer-cursor-not-allowed{cursor:not-allowed}.univer-appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.univer-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.univer-flex-row{flex-direction:row}.univer-flex-row-reverse{flex-direction:row-reverse}.univer-flex-nowrap{flex-wrap:nowrap}.univer-gap-x-2{-moz-column-gap:8px;column-gap:8px}.univer-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(8px * (1 - var(--tw-space-y-reverse)));margin-top:8px;margin-top:calc(8px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:0;margin-bottom:calc(8px * var(--tw-space-y-reverse))}.univer-divide-x-0>:not([hidden])~:not([hidden]){--tw-divide-x-reverse: 0;border-right-width:0px;border-right-width:calc(0px * var(--tw-divide-x-reverse));border-left-width:calc(0px * (1 - var(--tw-divide-x-reverse)));border-left-width:0px;border-left-width:calc(0px * calc(1 - var(--tw-divide-x-reverse)))}.univer-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * (1 - var(--tw-divide-y-reverse)));border-top-width:1px;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:0px;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.univer-divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.univer-divide-gray-200>:not([hidden])~:not([hidden]){border-color:var(--univer-gray-200)}.univer-justify-self-center{justify-self:center}.univer-overflow-hidden{overflow:hidden}.univer-overflow-x-scroll{overflow-x:scroll}.univer-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.univer-text-ellipsis{text-overflow:ellipsis}.univer-rounded-full{border-radius:9999px}.univer-rounded-md{border-radius:6px}.univer-rounded-sm{border-radius:2px}.univer-border-2{border-width:2px}.univer-border-4{border-width:4px}.univer-border-solid{border-style:solid}.univer-border-none{border-style:none}.univer-border-gray-100{border-color:var(--univer-gray-100)}.univer-border-transparent{border-color:transparent}.univer-border-r-gray-200{border-right-color:var(--univer-gray-200)}.univer-border-t-primary-500{border-top-color:var(--univer-primary-500)}.univer-bg-blue-500{background-color:var(--univer-blue-500)}.univer-bg-gray-100{background-color:var(--univer-gray-100)}.univer-bg-gray-800{background-color:var(--univer-gray-800)}.univer-bg-gray-900{background-color:var(--univer-gray-900)}.univer-bg-slate-600{--tw-bg-opacity: 1;background-color:#475569;background-color:rgba(71,85,105,var(--tw-bg-opacity, 1))}.univer-fill-gray-900{fill:var(--univer-gray-900)}.univer-fill-primary-600{fill:var(--univer-primary-600)}.univer-p-1{padding:4px}.univer-p-4{padding:16px}.univer-px-1{padding-left:4px;padding-right:4px}.univer-px-1\.5{padding-left:6px;padding-right:6px}.univer-px-5{padding-left:20px;padding-right:20px}.univer-px-\[14px\]{padding-left:14px;padding-right:14px}.univer-py-0{padding-top:0;padding-bottom:0}.univer-py-0\.5{padding-top:2px;padding-bottom:2px}.univer-py-2{padding-top:8px;padding-bottom:8px}.univer-py-5{padding-top:20px;padding-bottom:20px}.univer-pb-1{padding-bottom:4px}.univer-pl-2{padding-left:8px}.univer-pl-3{padding-left:12px}.univer-pl-6{padding-left:24px}.univer-pt-2{padding-top:8px}.univer-text-center{text-align:center}.univer-font-semibold{font-weight:600}.univer-leading-6{line-height:24px}.univer-leading-7{line-height:28px}.univer-text-blue-500{color:var(--univer-blue-500)}.univer-text-gray-200{color:var(--univer-gray-200)}.univer-text-gray-300{color:var(--univer-gray-300)}.univer-text-gray-700{color:var(--univer-gray-700)}.univer-text-green-600{color:var(--univer-green-600)}.univer-text-primary-700{color:var(--univer-primary-700)}.univer-text-red-600{color:var(--univer-red-600)}.univer-text-yellow-500{color:var(--univer-yellow-500)}.univer-shadow{--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px -1px rgba(0, 0, 0, .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 3px #0000001a,0 1px 2px -1px #0000001a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-shadow-lg{--tw-shadow: 0px 4px 6px 0px rgba(30, 40, 77, .05), 0px 10px 15px -3px rgba(30, 40, 77, .1);--tw-shadow-colored: 0px 4px 6px 0px var(--tw-shadow-color), 0px 10px 15px -3px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 4px 6px #1e284d0d,0 10px 15px -3px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-shadow-sm{--tw-shadow: 0px 1px 2px 0px rgba(30, 40, 77, .08);--tw-shadow-colored: 0px 1px 2px 0px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 2px #1e284d14;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-blur-sm{--tw-blur: blur(4px);filter:blur(4px) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.univer-backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:blur(8px) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:blur(8px) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.univer-transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.univer-duration-150{transition-duration:.15s}.univer-duration-200{transition-duration:.2s}.univer-ease-linear{transition-timing-function:linear}.after\:univer-absolute:after{content:var(--tw-content);position:absolute}.after\:univer-right-0:after{content:var(--tw-content);right:0}.after\:univer-top-1\/2:after{content:var(--tw-content);top:50%}.after\:univer-block:after{content:var(--tw-content);display:block}.after\:univer-h-4:after{content:var(--tw-content);height:16px}.after\:univer-w-px:after{content:var(--tw-content);width:1px}.after\:-univer-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),-50%) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:univer-bg-gray-200:after{content:var(--tw-content);background-color:var(--univer-gray-200)}.after\:univer-content-\[\"\"\]:after{--tw-content: "";content:"";content:var(--tw-content)}.last\:univer-mb-0:last-child{margin-bottom:0}.hover\:univer-border-primary-600:hover{border-color:var(--univer-primary-600)}.hover\:univer-bg-gray-50:hover{background-color:var(--univer-gray-50)}.hover\:univer-bg-transparent:hover{background-color:transparent}.focus\:univer-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.univer-group:hover .group-hover\:univer-block{display:block}.dark\:univer-divide-gray-600:where(.univer-dark,.univer-dark *)>:not([hidden])~:not([hidden]){border-color:var(--univer-gray-600)}.dark\:univer-border-r-gray-700:where(.univer-dark,.univer-dark *){border-right-color:var(--univer-gray-700)}.dark\:univer-bg-black:where(.univer-dark,.univer-dark *){background-color:var(--univer-black)}.dark\:univer-bg-gray-700:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-700)}.dark\:univer-bg-gray-800:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-800)}.dark\:univer-bg-gray-900:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-900)}.dark\:univer-bg-slate-600:where(.univer-dark,.univer-dark *){--tw-bg-opacity: 1;background-color:#475569;background-color:rgba(71,85,105,var(--tw-bg-opacity, 1))}.dark\:univer-fill-white:where(.univer-dark,.univer-dark *){fill:var(--univer-white)}.dark\:univer-text-gray-700:where(.univer-dark,.univer-dark *){color:var(--univer-gray-700)}.dark\:univer-text-green-400:where(.univer-dark,.univer-dark *){color:var(--univer-green-400)}.dark\:univer-text-red-400:where(.univer-dark,.univer-dark *){color:var(--univer-red-400)}.dark\:hover\:univer-bg-gray-600:hover:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-600)}.dark\:hover\:univer-bg-gray-800:hover:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-800)}.\[\&\>div\:first-child\]\:univer-px-2\.5>div:first-child{padding-left:10px;padding-right:10px}.\[\&\>div\]\:univer-h-5>div{height:20px}.\[\&\>div\]\:univer-ring-transparent>div{--tw-ring-color: transparent }.\[\&_canvas\]\:univer-absolute canvas{position:absolute}.univer-absolute{position:absolute}.univer-relative{position:relative}.univer-left-1\.5{left:6px}.univer-top-1\/2{top:50%}.univer-z-\[15\]{z-index:15}.univer-m-0{margin:0}.-univer-mx-6{margin-left:-24px;margin-right:-24px}.univer-mx-0{margin-left:0;margin-right:0}.univer-my-1{margin-top:4px;margin-bottom:4px}.univer-my-2{margin-top:8px;margin-bottom:8px}.univer-mb-0{margin-bottom:0}.univer-mb-2{margin-bottom:8px}.univer-ml-2{margin-left:8px}.univer-ml-4{margin-left:16px}.univer-mr-0{margin-right:0}.univer-mt-0{margin-top:0}.univer-mt-1{margin-top:4px}.univer-box-border{box-sizing:border-box}.univer-block{display:block}.univer-inline-flex{display:inline-flex}.univer-h-6{height:24px}.univer-h-\[18px\]{height:18px}.univer-h-\[364px\]{height:364px}.univer-max-h-60{max-height:240px}.univer-max-h-\[307px\]{max-height:307px}.univer-max-h-\[350px\]{max-height:350px}.univer-max-h-\[364px\]{max-height:364px}.univer-w-6{width:24px}.univer-w-\[250px\]{width:250px}.univer-flex-1{flex:1 1 0%}.-univer-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),-50%) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.univer-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.univer-list-none{list-style-type:none}.univer-justify-center{justify-content:center}.univer-justify-around{justify-content:space-around}.univer-gap-2{gap:8px}.univer-gap-4{gap:16px}.univer-gap-\[10\%\]{gap:10%}.univer-overflow-visible{overflow:visible}.univer-whitespace-nowrap{white-space:nowrap}.univer-whitespace-pre-wrap{white-space:pre-wrap}.univer-break-words{word-wrap:break-word}.univer-rounded-none{border-radius:0}.univer-rounded-l{border-top-left-radius:4px;border-bottom-left-radius:4px}.univer-border{border-width:1px}.univer-border-r-0{border-right-width:0px}.univer-border-gray-600{border-color:var(--univer-gray-600)}.univer-bg-gray-200{background-color:var(--univer-gray-200)}.univer-bg-gray-600{background-color:var(--univer-gray-600)}.univer-bg-primary-600{background-color:var(--univer-primary-600)}.univer-bg-transparent{background-color:transparent}.univer-bg-white{background-color:var(--univer-white)}.univer-p-0{padding:0}.univer-p-0\.5{padding:2px}.univer-p-3{padding:12px}.univer-px-4{padding-left:16px;padding-right:16px}.univer-px-6{padding-left:24px;padding-right:24px}.univer-px-7{padding-left:28px;padding-right:28px}.univer-py-1{padding-top:4px;padding-bottom:4px}.univer-py-3{padding-top:12px;padding-bottom:12px}.univer-pb-3{padding-bottom:12px}.univer-pt-0{padding-top:0}.univer-text-base{font-size:16px;line-height:24px}.univer-text-sm{font-size:14px;line-height:20px}.univer-font-bold{font-weight:700}.univer-font-medium{font-weight:500}.univer-leading-5{line-height:20px}.univer-leading-\[13px\]{line-height:13px}.univer-text-gray-900{color:var(--univer-gray-900)}.univer-text-primary-500{color:var(--univer-primary-500)}.univer-text-red-500{color:var(--univer-red-500)}.univer-text-white{color:var(--univer-white)}.univer-shadow-md{--tw-shadow: 0px 1px 6px -2px rgba(30, 40, 77, .08), 0px 2px 6px -1px rgba(30, 40, 77, .1);--tw-shadow-colored: 0px 1px 6px -2px var(--tw-shadow-color), 0px 2px 6px -1px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 1px 6px -2px #1e284d14,0 2px 6px -1px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.univer-outline-none{outline:2px solid transparent;outline-offset:2px}.univer-ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0,0,0,0))}.univer-ring-primary-500{--tw-ring-color: var(--univer-primary-500) }.univer-ring-red-500{--tw-ring-color: var(--univer-red-500) }.univer-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:univer-bg-gray-200:hover{background-color:var(--univer-gray-200)}.hover\:univer-bg-gray-300:hover{background-color:var(--univer-gray-300)}.dark\:univer-bg-gray-600:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-600)}.dark\:univer-text-white:where(.univer-dark,.univer-dark *){color:var(--univer-white)}.univer-mb-5{margin-bottom:20px}.univer-mr-3{margin-right:12px}.univer-mt-2{margin-top:8px}.univer-mt-3{margin-top:12px}.univer-mt-3\.5{margin-top:14px}.univer-mt-4{margin-top:16px}.univer-flex{display:flex}.univer-grid{display:grid}.univer-h-7{height:28px}.univer-h-full{height:100%}.univer-max-h-\[400px\]{max-height:400px}.univer-w-32{width:128px}.univer-w-36{width:144px}.univer-w-4{width:16px}.univer-w-\[340px\]{width:340px}.univer-w-full{width:100%}.univer-cursor-pointer{cursor:pointer}.univer-flex-col{flex-direction:column}.univer-items-center{align-items:center}.univer-justify-end{justify-content:flex-end}.univer-justify-between{justify-content:space-between}.univer-gap-1{gap:4px}.univer-gap-1\.5{gap:6px}.univer-gap-6{gap:24px}.univer-overflow-auto{overflow:auto}.univer-overflow-y-auto{overflow-y:auto}.univer-rounded{border-radius:4px}.univer-rounded-lg{border-radius:8px}.univer-p-1\.5{padding:6px}.univer-p-2{padding:8px}.univer-px-2{padding-left:8px;padding-right:8px}.univer-py-1\.5{padding-top:6px;padding-bottom:6px}.univer-pb-5{padding-bottom:20px}.univer-text-sm,.univer-text-sm\/5{font-size:14px;line-height:20px}.univer-text-xs{font-size:12px;line-height:16px}.univer-text-gray-400{color:var(--univer-gray-400)}.univer-text-gray-500{color:var(--univer-gray-500)}.univer-text-gray-600{color:var(--univer-gray-600)}.univer-text-primary-600{color:var(--univer-primary-600)}.hover\:univer-bg-gray-100:hover{background-color:var(--univer-gray-100)}.dark\:univer-text-gray-200:where(.univer-dark,.univer-dark *){color:var(--univer-gray-200)}.dark\:hover\:univer-bg-gray-700:hover:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-700)} diff --git a/public/univerjs/css/sheets-pivot-ui.css b/public/univerjs/css/sheets-pivot-ui.css new file mode 100644 index 0000000..c0e93c2 --- /dev/null +++ b/public/univerjs/css/sheets-pivot-ui.css @@ -0,0 +1 @@ +.univer-relative{position:relative}.univer-mx-0{margin-left:0;margin-right:0}.univer-mx-1\.5{margin-left:6px;margin-right:6px}.univer-my-0{margin-top:0;margin-bottom:0}.univer-my-1{margin-top:4px;margin-bottom:4px}.univer-mb-1{margin-bottom:4px}.univer-mb-2{margin-bottom:8px}.univer-mb-4{margin-bottom:16px}.univer-mb-5{margin-bottom:20px}.univer-ml-3{margin-left:12px}.univer-mr-2{margin-right:8px}.univer-mt-0{margin-top:0}.univer-mt-1\.5{margin-top:6px}.univer-mt-2{margin-top:8px}.univer-mt-3{margin-top:12px}.univer-mt-4{margin-top:16px}.univer-mt-5{margin-top:20px}.univer-box-border{box-sizing:border-box}.univer-inline-block{display:inline-block}.univer-flex{display:flex}.univer-inline-flex{display:inline-flex}.univer-hidden{display:none}.univer-size-8{width:32px;height:32px}.univer-h-0{height:0px}.univer-h-40{height:160px}.univer-h-5{height:20px}.univer-h-6{height:24px}.univer-h-7{height:28px}.univer-h-8{height:32px}.univer-h-\[140px\]{height:140px}.univer-h-\[161px\]{height:161px}.univer-h-\[300px\]{height:300px}.univer-h-\[calc\(100\%-16px\)\]{height:calc(100% - 16px)}.univer-h-full{height:100%}.univer-h-px{height:1px}.univer-min-h-\[150px\]{min-height:150px}.univer-min-h-\[200px\]{min-height:200px}.univer-w-4{width:16px}.univer-w-\[136px\]{width:136px}.univer-w-\[140px\]{width:140px}.univer-w-\[14px\]{width:14px}.univer-w-full{width:100%}.\!univer-min-w-\[120px\]{min-width:120px!important}.univer-max-w-\[118px\]{max-width:118px}.univer-max-w-\[200px\]{max-width:200px}.univer-max-w-\[250px\]{max-width:250px}.univer-max-w-\[66px\]{max-width:66px}.univer-flex-1{flex:1 1 0%}.univer-flex-shrink{flex-shrink:1}.univer-flex-shrink-0{flex-shrink:0}.univer-flex-grow{flex-grow:1}.univer-cursor-pointer{cursor:pointer}.univer-flex-row{flex-direction:row}.univer-flex-col{flex-direction:column}.univer-items-center{align-items:center}.univer-justify-end{justify-content:flex-end}.univer-justify-center{justify-content:center}.univer-justify-between{justify-content:space-between}.univer-gap-1{gap:4px}.univer-gap-1\.5{gap:6px}.univer-gap-2{gap:8px}.univer-gap-3{gap:12px}.univer-gap-4{gap:16px}.univer-self-stretch{align-self:stretch}.univer-overflow-hidden{overflow:hidden}.univer-overflow-y-auto{overflow-y:auto}.univer-overflow-x-hidden{overflow-x:hidden}.univer-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.univer-rounded{border-radius:4px}.univer-rounded-lg{border-radius:8px}.univer-rounded-md{border-radius:6px}.univer-rounded-bl-md{border-bottom-left-radius:6px}.univer-rounded-br-md{border-bottom-right-radius:6px}.univer-rounded-tl-md{border-top-left-radius:6px}.univer-rounded-tr-md{border-top-right-radius:6px}.univer-border{border-width:1px}.univer-border-none{border-style:none}.univer-border-gray-200{border-color:var(--univer-gray-200)}.univer-border-primary-600{border-color:var(--univer-primary-600)}.univer-border-transparent{border-color:transparent}.univer-bg-gray-100{background-color:var(--univer-gray-100)}.univer-bg-gray-50{background-color:var(--univer-gray-50)}.univer-bg-primary-600{background-color:var(--univer-primary-600)}.univer-bg-white{background-color:var(--univer-white)}.univer-p-0\.5{padding:2px}.univer-p-1{padding:4px}.univer-p-2{padding:8px}.univer-px-1{padding-left:4px;padding-right:4px}.univer-px-2{padding-left:8px;padding-right:8px}.univer-px-3{padding-left:12px;padding-right:12px}.univer-py-1{padding-top:4px;padding-bottom:4px}.univer-py-1\.5{padding-top:6px;padding-bottom:6px}.univer-py-2{padding-top:8px;padding-bottom:8px}.univer-py-\[5px\]{padding-top:5px;padding-bottom:5px}.univer-pl-\[22px\]{padding-left:22px}.univer-pr-1{padding-right:4px}.univer-text-center{text-align:center}.univer-text-justify{text-align:justify}.univer-align-top{vertical-align:top}.univer-text-base{font-size:16px;line-height:24px}.univer-text-sm{font-size:14px;line-height:20px}.univer-text-xs{font-size:12px;line-height:16px}.univer-font-medium{font-weight:500}.univer-capitalize{text-transform:capitalize}.univer-leading-4{line-height:16px}.univer-leading-5{line-height:20px}.univer-leading-6{line-height:24px}.univer-leading-8{line-height:32px}.univer-leading-\[20px\]{line-height:20px}.univer-text-\[rgb\(var\(--hyacinth-500\)\)\]{color:rgb(var(--hyacinth-500))}.univer-text-gray-200{color:var(--univer-gray-200)}.univer-text-gray-600{color:var(--univer-gray-600)}.univer-text-gray-800{color:var(--univer-gray-800)}.univer-text-gray-900{color:var(--univer-gray-900)}.univer-text-primary-600{color:var(--univer-primary-600)}.univer-text-red-400{color:var(--univer-red-400)}.univer-text-red-500{color:var(--univer-red-500)}.univer-shadow-lg{--tw-shadow: 0px 4px 6px 0px rgba(30, 40, 77, .05), 0px 10px 15px -3px rgba(30, 40, 77, .1);--tw-shadow-colored: 0px 4px 6px 0px var(--tw-shadow-color), 0px 10px 15px -3px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,0 4px 6px #1e284d0d,0 10px 15px -3px #1e284d1a;box-shadow:var(--tw-ring-offset-shadow, 0 0 rgba(0,0,0,0)),var(--tw-ring-shadow, 0 0 rgba(0,0,0,0)),var(--tw-shadow)}.hover\:univer-bg-gray-100:hover{background-color:var(--univer-gray-100)}.dark\:univer-bg-gray-900:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-900)}.dark\:univer-text-gray-200:where(.univer-dark,.univer-dark *){color:var(--univer-gray-200)}.dark\:univer-text-white:where(.univer-dark,.univer-dark *){color:var(--univer-white)}.dark\:hover\:univer-bg-gray-700:hover:where(.univer-dark,.univer-dark *){background-color:var(--univer-gray-700)} diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..b796d8b --- /dev/null +++ b/src/App.css @@ -0,0 +1,417 @@ + + +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html, body, #root { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; +} + +/* ReactFlow specific styles */ +.react-flow__node { + border-radius: 5px; + font-size: 12px; + color: #222; + text-align: left; + border-width: 1px; + border-style: solid; + transition: transform 0.2s, box-shadow 0.2s; +} + +.react-flow__node:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0,0,0,0.15); + z-index: 10; +} + +.react-flow__node-database { + background: #e6f7ff; + border-color: #1890ff; +} + +.react-flow__node-schema { + background: #f6ffed; + border-color: #52c41a; +} + +.react-flow__node-table.fact { + background: #fff1f0; + border-color: #ff4d4f; +} + +.react-flow__node-table.dimension { + background: #f9f0ff; + border-color: #722ed1; +} + +.react-flow__handle { + width: 8px; + height: 8px; + background-color: #1890ff; +} + +.react-flow__edge-path { + stroke: #1890ff; + stroke-width: 1.5; +} + +.react-flow__edge.animated path { + stroke-dasharray: 5; + animation: dashdraw 0.5s linear infinite; +} + +/* Enhanced infinite canvas styles */ +.react-flow__pane { + cursor: grab; +} + +.react-flow__pane.dragging { + cursor: grabbing; +} + +.react-flow__controls { + box-shadow: 0 0 10px rgba(0,0,0,0.15); + border-radius: 8px; + overflow: hidden; +} + +.react-flow__controls-button { + background: white; + border: none; + border-bottom: 1px solid #eee; + padding: 8px; + transition: background-color 0.2s; +} + +.react-flow__controls-button:hover { + background-color: #f0f0f0; +} + +.react-flow__minimap { + border-radius: 8px; + overflow: hidden; + box-shadow: 0 0 10px rgba(0,0,0,0.15); +} + +/* Connection mode animation */ +@keyframes pulse { + 0% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(82, 196, 26, 0.7); + } + + 70% { + transform: scale(1); + box-shadow: 0 0 0 10px rgba(82, 196, 26, 0); + } + + 100% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(82, 196, 26, 0); + } +} + +/* Custom edge styles */ +.react-flow__edge.reference path { + stroke: #00a99d; + stroke-width: 2; +} + +.react-flow__edge.dependency path { + stroke: #ff4d4f; + stroke-width: 2; +} + +.react-flow__edge.default path { + stroke: #722ed1; + stroke-width: 2; +} + +/* Connection handle styles */ +.react-flow__handle { + width: 12px !important; + height: 12px !important; + border-radius: 50%; + border: 2px solid white; + transition: all 0.2s ease; +} + +.react-flow__handle:hover { + transform: scale(1.3); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); +} + +.react-flow__handle-top { + top: -6px; +} + +.react-flow__handle-right { + right: -6px; +} + +.react-flow__handle-bottom { + bottom: -6px; +} + +.react-flow__handle-left { + left: -6px; +} + +/* Connection line styles */ +.react-flow__connection-path { + stroke-width: 3; +} + +/* Make nodes stand out when in connection mode */ +.react-flow.connection-mode .react-flow__node { + filter: drop-shadow(0 0 8px rgba(24, 144, 255, 0.5)); +} + +@keyframes dashdraw { + from { + stroke-dashoffset: 10; + } +} + +/* Custom node styles */ +.database-node, .schema-node, .table-node { + padding: 10px; + border-radius: 5px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); + transition: all 0.2s ease; +} + +.database-node:hover, .schema-node:hover, .table-node:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(0,0,0,0.15); +} + +/* App layout styles */ +.app-container { + display: flex; + flex-direction: column; + height: 100vh; + width: 100vw; + overflow: hidden; + background: #121212; + color: #ffffff; +} + +header { + background: #1a1a1a; + color: white; + padding: 15px 20px; + display: flex; + justify-content: space-between; + align-items: center; + box-shadow: 0 2px 15px rgba(0,0,0,0.5); + z-index: 10; + border-bottom: 1px solid #333; + position: relative; + overflow: hidden; +} + +/* Animated gradient border for header */ +header::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 2px; + background: linear-gradient(90deg, #00a99d, #52c41a, #fa8c16, #722ed1, #00a99d); + background-size: 400% 400%; + animation: gradient-shift 8s ease infinite; +} + +@keyframes gradient-shift { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +aside { + width: 250px; + background: #1a1a1a; + padding: 20px; + border-right: 1px solid #333; + overflow-y: auto; + box-shadow: inset -5px 0 15px rgba(0,0,0,0.2); +} + +/* Animated hover effects for sidebar items */ +aside li { + transition: all 0.3s ease; + border-radius: 4px; + position: relative; + z-index: 1; + overflow: hidden; +} + +aside li::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); + transition: all 0.5s ease; + z-index: -1; +} + +aside li:hover::before { + left: 100%; +} + +aside li:hover { + background: rgba(255,255,255,0.05); + transform: translateX(5px); + padding-left: 5px; +} + +main { + flex: 1; + overflow: hidden; + position: relative; + background: #121212; +} + +/* Utility classes */ +.clickable { + cursor: pointer; +} + +.panel { + background: #1a1a1a; + border-radius: 5px; + padding: 10px; + box-shadow: 0 2px 8px rgba(0,0,0,0.5); + color: #ffffff; + border: 1px solid #333; +} + +/* Dark theme for ReactFlow */ +.react-flow__controls { + background: #1a1a1a; + box-shadow: 0 0 10px rgba(0,0,0,0.5); +} + +.react-flow__controls-button { + background: #1a1a1a; + border-bottom: 1px solid #333; + color: #ffffff; +} + +.react-flow__controls-button:hover { + background: #333; +} + +.react-flow__controls-button svg { + fill: #ffffff; +} + +.react-flow__minimap { + background: #1a1a1a; + border: 1px solid #333; +} + +.react-flow__attribution { + background: rgba(26, 26, 26, 0.8); + color: #ffffff; +} + +/* Glowing effect for nodes on hover */ +.react-flow__node:hover { + box-shadow: 0 0 15px rgba(82, 196, 26, 0.6); +} + +/* Animated background for the canvas */ +.react-flow__background { + animation: bg-pulse 10s ease infinite; +} + +@keyframes bg-pulse { + 0% { + opacity: 0.3; + } + 50% { + opacity: 0.5; + } + 100% { + opacity: 0.3; + } +} + +/* Animated connection lines */ +.react-flow__edge path { + stroke-dasharray: 5; + /* animation: flow-line 30s linear infinite; */ +} + +@keyframes flow-line { + to { + stroke-dashoffset: -1000; + } +} + +/* Navigation item hover effects */ +.nav-item { + position: relative; + overflow: hidden; +} + +.nav-item:hover { + background: rgba(255, 255, 255, 0.1); +} + +.nav-item::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 2px; + background: linear-gradient(90deg, #00a99d, #52c41a); + transition: all 0.3s ease; + transform: translateX(-50%); +} + +.nav-item:hover::after { + width: 80%; +} + +/* Glow effect for active elements */ +.glow-effect { + box-shadow: 0 0 15px rgba(82, 196, 26, 0.6); + transition: all 0.3s ease; +} + +.glow-effect:hover { + box-shadow: 0 0 20px rgba(82, 196, 26, 0.8); +} + +/* Fade in animation */ +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..2c7ac84 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,322 @@ +import { useState } from 'react' +import './App.css' +import InfiniteCanvas from './components/InfiniteCanvas' +import AdvancedCharts from './components/AdvancedCharts' +import DataflowCanvas from './components/DataflowCanvas' +import { FaDatabase, FaChartBar, FaProjectDiagram } from 'react-icons/fa' + +function App() { + const [activeTab, setActiveTab] = useState('canvas'); // 'canvas', 'charts', or 'dataflow' + + return ( +
+
+ {/* Logo and Title */} +
+
+ +
+

+ The Metricverse +

+
+ + {/* Navigation */} +
+ setActiveTab('canvas')} + > + Data Explorer + + setActiveTab('charts')} + > + Advanced Charts + + setActiveTab('dataflow')} + > + Data Flow + + + Settings + +
+
+ +
+ + +
+ {activeTab === 'canvas' && ( + <> + +
+

+ + {/* Infinite Canvas - Zoom and pan without limits */} + The Only Limit is Your Imagination. +

+

+ Scroll to zoom • Drag to pan • Connect nodes +

+
+ + )} + + {activeTab === 'charts' && ( +
+ +
+ )} + + {activeTab === 'dataflow' && ( + <> + +
+

+ + Visualize data flows between tables +

+

+ Add tables • Create processes • Connect data flows +

+
+ + )} +
+
+
+ ) +} + +export default App 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/AdvancedCharts.jsx b/src/components/AdvancedCharts.jsx new file mode 100644 index 0000000..7645b47 --- /dev/null +++ b/src/components/AdvancedCharts.jsx @@ -0,0 +1,312 @@ +import React, { useState } from 'react'; +import { + ComposedChart, Line, Area, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, + ResponsiveContainer, ScatterChart, Scatter, ZAxis, Treemap, AreaChart, + Cell, LabelList +} from 'recharts'; +import BasicUniverSheet from './BasicUniverSheet'; +import UniverSheet from './UniverSheet'; +import UniverSheetComponent from './UniverSheetComponent'; + +// Sample data for the charts +const combinationData = [ + { name: 'Jan', revenue: 4000, profit: 2400, expenses: 2400 }, + { name: 'Feb', revenue: 3000, profit: 1398, expenses: 2210 }, + { name: 'Mar', revenue: 2000, profit: 9800, expenses: 2290 }, + { name: 'Apr', revenue: 2780, profit: 3908, expenses: 2000 }, + { name: 'May', revenue: 1890, profit: 4800, expenses: 2181 }, + { name: 'Jun', revenue: 2390, profit: 3800, expenses: 2500 }, + { name: 'Jul', revenue: 3490, profit: 4300, expenses: 2100 }, +]; + +const scatterData = [ + { x: 100, y: 200, z: 200, name: 'Product A' }, + { x: 120, y: 100, z: 260, name: 'Product B' }, + { x: 170, y: 300, z: 400, name: 'Product C' }, + { x: 140, y: 250, z: 280, name: 'Product D' }, + { x: 150, y: 400, z: 500, name: 'Product E' }, + { x: 110, y: 280, z: 200, name: 'Product F' }, +]; + +const treemapData = [ + { + name: 'Sales', + children: [ + { name: 'North America', size: 4000, fill: '#8884d8' }, + { name: 'Europe', size: 3000, fill: '#83a6ed' }, + { name: 'Asia', size: 2000, fill: '#8dd1e1' }, + { name: 'Africa', size: 1000, fill: '#82ca9d' }, + { name: 'South America', size: 1500, fill: '#a4de6c' }, + { name: 'Australia', size: 800, fill: '#d0ed57' }, + ], + }, +]; + +const stackedAreaData = [ + { name: 'Jan', product1: 400, product2: 240, product3: 240 }, + { name: 'Feb', product1: 300, product2: 139, product3: 221 }, + { name: 'Mar', product1: 200, product2: 980, product3: 229 }, + { name: 'Apr', product1: 278, product2: 390, product3: 200 }, + { name: 'May', product1: 189, product2: 480, product3: 218 }, + { name: 'Jun', product1: 239, product2: 380, product3: 250 }, + { name: 'Jul', product1: 349, product2: 430, product3: 210 }, +]; + +// Custom tooltip for the treemap +const CustomizedContent = (props) => { + const { root, depth, x, y, width, height, index, name, size } = props; + + return ( + + + {depth === 1 ? ( + + {name} + + ) : null} + {depth === 1 ? ( + + {size} + + ) : null} + + ); +}; + +const AdvancedCharts = () => { + const [activeChart, setActiveChart] = useState('combination'); + + const renderChart = () => { + switch (activeChart) { + case 'combination': + return ( +
+

Combination Chart (Bar, Line, Area)

+ + + + + + + + + + + + + {/* + */} +
+ ); + + case 'scatter': + return ( +
+

Scatter/Bubble Chart

+ + + + + + + + + + + + + +
+ ); + + case 'treemap': + return ( +
+

Treemap Chart

+ + } + > + { + treemapData[0].children.map((item, index) => ( + + )) + } + + +
+ ); + + case 'stacked-area': + return ( +
+

Stacked Area Chart

+ + + + + + + + + + + + +
+ ); + + default: + return
Select a chart type
; + } + }; + + return ( +
+

+ Advanced Data Visualization +

+ +
+ + + + +
+ + {renderChart()} + +
+

Chart Description

+ {activeChart === 'combination' && ( +

Combination charts display multiple data series using different visualization types (bars, lines, areas) in a single chart. They're ideal for showing relationships between different metrics with varying scales or units.

+ )} + {activeChart === 'scatter' && ( +

Scatter/bubble charts plot individual data points on a two-dimensional graph, with an optional third dimension represented by the size of each bubble. They're perfect for identifying correlations, clusters, and outliers in your data.

+ )} + {activeChart === 'treemap' && ( +

Treemaps display hierarchical data as nested rectangles, with the size of each rectangle proportional to its value. They efficiently visualize the composition of a whole and the relative sizes of its parts.

+ )} + {activeChart === 'stacked-area' && ( +

Stacked area charts show how multiple data series contribute to a total over time. They're excellent for visualizing part-to-whole relationships and how the composition of a total changes across a continuous variable like time.

+ )} +
+
+

Univer Spreadsheet Component

+ +
+
+ ); +}; + +export default AdvancedCharts; \ No newline at end of file diff --git a/src/components/BasicUniverSheet.jsx b/src/components/BasicUniverSheet.jsx new file mode 100644 index 0000000..96e7ff5 --- /dev/null +++ b/src/components/BasicUniverSheet.jsx @@ -0,0 +1,119 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { createUniver, defaultTheme, LocaleType } from '@univerjs/presets'; +import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'; + +// Load CSS dynamically to avoid import errors +const loadCSS = (url) => { + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = url; + document.head.appendChild(link); +}; + +const BasicUniverSheet = () => { + const containerRef = useRef(null); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + console.log('BasicUniverSheet mounting, container ref:', containerRef.current); + + // Load CSS files + loadCSS('/univerjs/css/preset-sheets-core.css'); + + try { + // Create the univer instance with minimal configuration + const univer = createUniver({ + theme: defaultTheme, + locale: LocaleType.EN_US, + presets: [ + UniverSheetsCorePreset({ + container: containerRef.current, + }), + ], + }); + + console.log('Univer created successfully'); + + // Set loading to false after a short delay + setTimeout(() => { + setLoading(false); + }, 1000); + + return () => { + try { + if (typeof univer.dispose === 'function') { + univer.dispose(); + } + } catch (e) { + console.warn('Error disposing univer:', e); + } + console.log('BasicUniverSheet unmounting'); + }; + } catch (error) { + console.error('Error initializing Univer:', error); + setError(`Error initializing Univer: ${error.message}`); + setLoading(false); + return () => { + console.log('BasicUniverSheet unmounting (after error)'); + }; + } + }, []); + + return ( +
+ {error && ( +
+ {error} +
+ )} + + {loading && !error && ( +
+ Loading Univer Spreadsheet... +
+ )} + +
+
+ ); +}; + +export default BasicUniverSheet; \ No newline at end of file diff --git a/src/components/Canvas.jsx b/src/components/Canvas.jsx new file mode 100644 index 0000000..5c751b0 --- /dev/null +++ b/src/components/Canvas.jsx @@ -0,0 +1,47 @@ +// components/Canvas.js + +import React from 'react'; + +import ReactFlow, { MiniMap, Controls } from 'react-flow-renderer'; + + + +const initialElements = [ + +  { id: '1', data: { label: 'Database 1' }, position: { x: 250, y: 5 } }, + +  { id: '2', data: { label: 'Schema A' }, position: { x: 100, y: 100 } }, + +  { id: '3', data: { label: 'Table 1' }, position: { x: 400, y: 100 } }, + +  { id: 'e1-2', source: '1', target: '2', animated: true }, + +  { id: 'e1-3', source: '1', target: '3', animated: true }, + +]; + + + +const Canvas = () => { + +  return ( + +   
+ +      + +        + +        + +      + +   
+ +  ); + +}; + + + +export default Canvas; \ No newline at end of file diff --git a/src/components/DataflowCanvas.jsx b/src/components/DataflowCanvas.jsx new file mode 100644 index 0000000..756e524 --- /dev/null +++ b/src/components/DataflowCanvas.jsx @@ -0,0 +1,1927 @@ +import { useState, useCallback, useRef, useEffect, useMemo } from 'react'; +import ReactFlow, { + MiniMap, + Controls, + Background, + useNodesState, + useEdgesState, + addEdge, + Panel, + useReactFlow, + ReactFlowProvider, + Handle, + Position, + BaseEdge, + EdgeLabelRenderer, + getBezierPath +} from 'reactflow'; +import 'reactflow/dist/style.css'; + +// Import the TableCreationPopup component +import TableCreationPopup from './TableCreationPopup'; + +// Add custom CSS for React Flow +const generateCustomStyles = () => { + return ` + .react-flow__node { + z-index: 1; + margin: 20px; /* Add margin to all nodes */ + } + + /* Ensure tables don't overlap */ + .react-flow__node.table-node { + margin: 30px; + min-height: 120px; + } + + .schema-background-node { + z-index: -1; + pointer-events: all; + border-radius: 25px; + cursor: grab; + user-select: none; + transition: all 0.2s ease; + padding: 30px; /* Add padding inside schema */ + } + + .schema-background-node:hover { + box-shadow: 0 0 30px rgba(0, 0, 0, 0.08); + } + + .schema-background-node:active { + cursor: grabbing; + } + + .schema-background-node.dragging { + opacity: 0.8; + } + + .schema-label { + position: absolute; + top: 20px; + left: 20px; + background: rgba(255, 255, 255, 0.9); + padding: 10px 15px; + border-radius: 8px; + font-size: 14px; + font-weight: bold; + box-shadow: 0 4px 8px rgba(0,0,0,0.1); + display: flex; + align-items: center; + gap: 10px; + z-index: 10; + } + + /* Ensure proper spacing between nodes */ + .react-flow__node-table { + margin-bottom: 30px !important; + margin-right: 30px !important; + } + + /* Styling for draggable new tables */ + .draggable-new-table { + cursor: grab !important; + transition: all 0.2s ease !important; + z-index: 10 !important; + } + + .draggable-new-table:hover { + transform: scale(1.02) !important; + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15) !important; + } + + .draggable-new-table:active { + cursor: grabbing !important; + } + + /* Process node styling */ + .react-flow__node-process { + z-index: 5 !important; + background: white !important; + border-radius: 8px !important; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1) !important; + } + + /* Edge styling for left-to-right data flow */ + .react-flow__edge { + z-index: 4 !important; + } + + .react-flow__edge-path { + stroke-width: 1.5 !important; + } + + /* Encourage horizontal edges for left-to-right flow */ + .react-flow__edge-path { + --react-flow-bezier-edge-control-point-distance: 60 !important; + } + + /* Edge label styling */ + .react-flow__edge-textbg { + background-color: white !important; + padding: 2px !important; + border-radius: 4px !important; + } + + .react-flow__edge-text { + font-size: 8px !important; + } + `; +}; + +// Import icons from react-icons +import { FaDatabase, FaTable, FaArrowRight, FaCog, FaExchangeAlt, FaLayerGroup, FaFilter, FaCode, FaSync, FaCalculator, FaChartLine, FaBuilding } from 'react-icons/fa'; +import { BiSolidData, BiTransfer } from 'react-icons/bi'; +import { AiFillFolder } from 'react-icons/ai'; +import { HiOutlineDocumentReport } from 'react-icons/hi'; +import { TbTransform } from 'react-icons/tb'; + +// Import mock data +import mockApiData from './mockData'; + +// Import ProcessForm component +import ProcessForm from './ProcessForm'; + +// Schema Background Node +const SchemaBackgroundNode = ({ data }) => { + // Different background colors for each schema + const bgColor = data.slug === 'edw_schema' + ? 'rgba(24, 144, 255, 0.1)' // Light blue for Schema_1 + : 'rgba(82, 196, 26, 0.1)'; // Light green for Schema_2 + + // Border color based on schema + const borderColor = data.slug === 'edw_schema' + ? '#1890ff' // Blue for Schema_1 + : '#52c41a'; // Green for Schema_2 + + return ( +
+
+ + {data.name} +
+
+ ); +}; + +// Custom edge with animated arrow +const CustomEdge = ({ id, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, data, markerEnd }) => { + // For left-to-right data flow, use a gentler curve + const curvature = 0.2; // Reduced curvature for straighter, more horizontal flow + + const [edgePath, labelX, labelY] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + curvature + }); + + // Check if the process is active + const isActive = data?.isActive !== false; // Default to active if not specified + + // Determine if this is a source or target edge + const isSourceEdge = data?.edgeType === 'source'; + + // Get the process name and mappings + const processName = data?.processName || 'Process'; + const mappings = data?.mappings || []; + + // Adjust label style based on active status + const labelBgColor = isActive ? 'white' : '#f5f5f5'; + const labelOpacity = isActive ? 1 : 0.8; + + return ( + <> + + +
+ {/* Process name in small text */} +
+ {processName} + {!isActive && ( + + inactive + + )} +
+ + {/* Column mappings - show fewer columns to save space */} +
+ {mappings.length > 0 ? ( + // Only show up to 3 mappings to save space + mappings.slice(0, 3).map((column, index) => ( + + {column} + + )) + ) : ( + No mappings + )} + {mappings.length > 3 && ( + + +{mappings.length - 3} more + + )} +
+
+
+ + ); +}; + +// Process Node (represents ETL or data transformation) +const ProcessNode = ({ data }) => { + // Determine status color + const statusColor = data.status === 'active' ? '#52c41a' : '#ff4d4f'; + const isActive = data.status === 'active'; + + // Define colors + const primaryColor = isActive ? '#fa8c16' : '#aaaaaa'; + const secondaryColor = isActive ? '#ff4d4f' : '#cccccc'; + + // Determine which icon to use based on process type or other properties + const getProcessIcon = () => { + // You can customize this logic based on your data model + const processType = data.processType || 'default'; + const iconSize = 40; // Reduced icon size to prevent overlapping + const iconColor = isActive ? primaryColor : '#cccccc'; + + switch(processType.toLowerCase()) { + case 'transform': + return ; + case 'filter': + return ; + case 'aggregate': + return ; + case 'sync': + return ; + case 'code': + return ; + case 'analytics': + return ; + case 'transfer': + return ; + case 'exchange': + return ; + default: + return ; + } + }; + + return ( +
+ {/* Connection handles */} + + + + {/* Process Icon with integrated content */} +
+ {getProcessIcon()} + + {/* Status indicator (small dot) */} +
+
+ + {/* Process Label (below icon) */} +
+ {data.label} +
+
+ ); +}; + +// Table Node +const TableNode = ({ data, id }) => { + // Set up drag functionality for new tables + const onDragStart = (event) => { + // Only allow dragging for tables that are not in a schema yet + if (!event.target.closest('.draggable-new-table')) { + return; + } + + event.dataTransfer.setData('application/reactflow', id); + event.dataTransfer.effectAllowed = 'move'; + }; + // Determine table type + const isStage = data.type === 'stage'; + const isFact = data.type === 'fact'; + const isDim = data.type === 'dimension'; + + // Different colors for different table types + let tableColor, tableLabel, tableIcon; + + if (isStage) { + tableColor = '#fa8c16'; // Orange for STAGE tables + tableLabel = 'STAGE'; + tableIcon = ; + } else if (isFact) { + tableColor = '#1890ff'; // Blue for FACT tables + tableLabel = 'FACT'; + tableIcon = ; + } else { + tableColor = '#52c41a'; // Green for DIM tables + tableLabel = 'DIM'; + tableIcon = ; + } + + const background = '#ffffff'; + + return ( +
+ {/* Connection handles */} + + + +
+
+ {/* Different icons for different table types */} + {tableIcon} + + {data.label} + +
+ + {tableLabel} + +
+ + {data.columns && ( +
+
+ Columns: +
+
+ {data.columns.slice(0, 5).map((col, index) => ( + + {col} + + ))} + {data.columns.length > 5 && ( + + +{data.columns.length - 5} more + + )} +
+
+ )} +
+ ); +}; + +const DataflowCanvas = () => { + const reactFlowWrapper = useRef(null); + const [reactFlowInstance, setReactFlowInstance] = useState(null); + const { fitView, setViewport, getViewport } = useReactFlow(); + + // State for infinite canvas + const [scale, setScale] = useState(1); + const [position, setPosition] = useState({ x: 0, y: 0 }); + + // State for connection mode + const [isConnectionMode, setIsConnectionMode] = useState(false); + const [connectionSource, setConnectionSource] = useState(null); + const [connectionType, setConnectionType] = useState('default'); + + // State for process form + const [showProcessForm, setShowProcessForm] = useState(false); + const [selectedProcessForEdit, setSelectedProcessForEdit] = useState(null); + + // Define node types + const nodeTypes = useMemo(() => ({ + table: TableNode, + process: ProcessNode, + schemaBackground: SchemaBackgroundNode, + }), []); + + // Define edge types + const edgeTypes = useMemo(() => ({ + custom: CustomEdge, + }), []); + + // Create initial nodes from tables data + const initialNodes = useMemo(() => { + // Calculate schema boundaries based on their tables + const schemaBoundaries = {}; + + // Initialize with default values from schema definitions + mockApiData.schemas.forEach(schema => { + schemaBoundaries[schema.slug] = { + minX: schema.position.x, + minY: schema.position.y, + maxX: schema.position.x + schema.width, + maxY: schema.position.y + schema.height + }; + }); + + // Update boundaries based on table positions + mockApiData.tables.forEach(table => { + const schemaSlug = table.schema; + if (schemaBoundaries[schemaSlug]) { + // Add more padding around tables (250px on each side for better spacing) + const tableMinX = table.orientation.x - 250; + const tableMinY = table.orientation.y - 250; + const tableMaxX = table.orientation.x + 450; // Table width + padding + const tableMaxY = table.orientation.y + 450; // Table height + padding + + schemaBoundaries[schemaSlug].minX = Math.min(schemaBoundaries[schemaSlug].minX, tableMinX); + schemaBoundaries[schemaSlug].minY = Math.min(schemaBoundaries[schemaSlug].minY, tableMinY); + schemaBoundaries[schemaSlug].maxX = Math.max(schemaBoundaries[schemaSlug].maxX, tableMaxX); + schemaBoundaries[schemaSlug].maxY = Math.max(schemaBoundaries[schemaSlug].maxY, tableMaxY); + } + }); + + // Schema background nodes (add these first so they appear behind other nodes) + const schemaBackgroundNodes = mockApiData.schemas.map(schema => { + const bounds = schemaBoundaries[schema.slug]; + const width = bounds.maxX - bounds.minX; + const height = bounds.maxY - bounds.minY; + + // Add 60% extra size for better spacing and to ensure all elements are contained + const extraWidth = width * 0.6; + const extraHeight = height * 0.6; + + return { + id: `schema-bg-${schema.slug}`, + type: 'schemaBackground', + data: { + name: schema.name, + color: schema.color, + slug: schema.slug + }, + position: { + x: bounds.minX - (extraWidth / 2), + y: bounds.minY - (extraHeight / 2) + }, + style: { + width: width + extraWidth, + height: height + extraHeight, + zIndex: -1 // Ensure it's behind other nodes + }, + draggable: true, + selectable: true, + zIndex: -1, + }; + }); + + // Table nodes with additional spacing + const tableNodes = mockApiData.tables.map(table => ({ + id: table.slug, + type: 'table', + data: { + label: table.name, + type: table.type, + columns: table.columns, + slug: table.slug, + schema: table.schema // Include schema information + }, + position: { x: table.orientation.x, y: table.orientation.y }, + parentNode: `schema-bg-${table.schema}`, // Connect to parent schema + extent: 'parent', // Keep within parent boundaries + style: { + marginBottom: '30px', // Add margin to prevent overlapping + marginRight: '30px' // Add margin to prevent overlapping + }, + className: 'table-node' // Add class for styling + })); + + return [...schemaBackgroundNodes, ...tableNodes]; + }, []); + + // Create process nodes + const processNodes = useMemo(() => { + return mockApiData.processes.map((process, index) => { + // Calculate position between source and destination tables + const sourceTable = mockApiData.tables.find(t => t.slug === process.source_table[0]); + const destTable = mockApiData.tables.find(t => t.slug === process.destination_table[0]); + + let x = 300; + let y = 200; + let parentSchema = null; + + if (sourceTable && destTable) { + // For a left-to-right data flow, position the process node between the source and destination + // but slightly closer to the source to maintain the flow direction + + // Calculate the position 1/3 of the way from source to destination + const sourceX = sourceTable.orientation.x; + const sourceY = sourceTable.orientation.y; + const destX = destTable.orientation.x; + const destY = destTable.orientation.y; + + // Position process node at 1/3 of the distance from source to destination + // This creates a clearer left-to-right flow + x = sourceX + (destX - sourceX) / 3 + 100; // Add offset to position after source table + + // Keep the y-coordinate aligned with the source table for a cleaner look + // If source and destination are at different y positions, adjust slightly + if (Math.abs(sourceY - destY) > 50) { + // If vertical difference is significant, position between them + y = sourceY + (destY - sourceY) / 2; + } else { + // Otherwise keep aligned with source + y = sourceY; + } + + // Determine which schema this process belongs to + // If source and destination are in the same schema, use that schema + if (sourceTable.schema === destTable.schema) { + parentSchema = sourceTable.schema; + } else { + // If they're in different schemas, use the source schema + parentSchema = sourceTable.schema; + } + } else if (sourceTable) { + parentSchema = sourceTable.schema; + } else if (destTable) { + parentSchema = destTable.schema; + } + + return { + id: process.slug, + type: 'process', + data: { + label: process.name, + description: process.description, + type: process.type, + status: process.status, + processType: process.type // Pass process type to the component + }, + position: { x, y }, + parentNode: parentSchema ? `schema-bg-${parentSchema}` : undefined, + extent: parentSchema ? 'parent' : undefined, + style: { + zIndex: 5, // Ensure process nodes are above edges + margin: '20px', // Add margin to prevent overlapping + background: 'white', // Ensure background is white + borderRadius: '8px', // Rounded corners + boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)' // Add shadow for better visibility + }, + className: 'process-node' // Add class for styling + }; + }); + }, []); + + // Create edges between tables and processes + const initialEdges = useMemo(() => { + const edges = []; + + mockApiData.processes.forEach(process => { + // Determine if process is active or inactive + const isActive = process.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + + // Get the mappings for this process + const mappings = process.mappings || []; + + // Format source columns for display + const sourceColumns = mappings.map(m => m.source).join(', '); + + // Format target columns for display + const targetColumns = mappings.map(m => m.target).join(', '); + + // Create edges from source tables to process + process.source_table.forEach(sourceId => { + edges.push({ + id: `e-${sourceId}-${process.slug}`, + source: sourceId, + target: process.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: isActive ? 0.9 : 0.6, // Reduced opacity for better visual clarity + zIndex: 4 // Ensure edges are below nodes + }, + markerEnd: { + type: 'arrowclosed', + width: 15, // Smaller arrow + height: 15, // Smaller arrow + color: sourceColor, + }, + data: { + label: sourceColumns || 'No mappings', + processName: process.name, + isActive: isActive, // Pass status to the edge component + edgeType: 'source', + mappings: mappings.map(m => m.source) + } + }); + }); + + // Create edges from process to destination tables + process.destination_table.forEach(destId => { + edges.push({ + id: `e-${process.slug}-${destId}`, + source: process.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: isActive ? 0.9 : 0.6, // Reduced opacity for better visual clarity + zIndex: 4 // Ensure edges are below nodes + }, + markerEnd: { + type: 'arrowclosed', + width: 15, // Smaller arrow + height: 15, // Smaller arrow + color: destColor, + }, + data: { + label: targetColumns || 'No mappings', + processName: process.name, + isActive: isActive, // Pass status to the edge component + edgeType: 'target', + mappings: mappings.map(m => m.target) + } + }); + }); + }); + + return edges; + }, []); + + // Use React Flow's node state management + const [nodes, setNodes, onNodesChangeDefault] = useNodesState([...initialNodes, ...processNodes]); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + // Custom nodes change handler to update schema boundaries when nodes move + const onNodesChange = useCallback( + (changes) => { + // Apply the default node changes + onNodesChangeDefault(changes); + + // Check if any of the changes are position changes + const hasPositionChanges = changes.some( + change => change.type === 'position' && change.dragging + ); + + // If there are position changes, force a re-render of the schema wrapper + if (hasPositionChanges) { + // Use a small timeout to ensure the node positions are updated first + setTimeout(() => { + setNodes((nds) => [...nds]); + }, 0); + } + }, + [onNodesChangeDefault, setNodes] + ); + + // Track viewport changes + const onMove = useCallback((event, viewport) => { + setScale(viewport.zoom); + setPosition({ x: viewport.x, y: viewport.y }); + }, []); + + const onConnect = useCallback( + (params) => { + // Find the source and target nodes + const sourceNode = nodes.find(node => node.id === params.source); + const targetNode = nodes.find(node => node.id === params.target); + + // Determine if this is a process connection + let isActive = true; + + // Check if either source or target is a process node + if (sourceNode?.type === 'process') { + isActive = sourceNode.data.status === 'active'; + } else if (targetNode?.type === 'process') { + isActive = targetNode.data.status === 'active'; + } + + // Create a custom edge with the selected connection type + const edgeColor = connectionType === 'reference' ? '#00a99d' : + connectionType === 'dependency' ? '#ff4d4f' : '#722ed1'; + + // If inactive, use gray color + const finalColor = isActive ? edgeColor : '#aaaaaa'; + + const edgeLabel = connectionType === 'reference' ? 'references' : + connectionType === 'dependency' ? 'depends on' : 'connects to'; + + const newEdge = { + ...params, + id: `e-custom-${params.source}-${params.target}`, + type: 'custom', + animated: isActive, // Only animate if active + style: { + stroke: finalColor, + strokeWidth: isActive ? 2 : 1.5, + opacity: isActive ? 1 : 0.7 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: finalColor, + }, + data: { + label: edgeLabel, + isActive: isActive + } + }; + + // Add the new edge to the edges array + setEdges(eds => [...eds, newEdge]); + + // If in connection mode, exit it after creating a connection + if (isConnectionMode) { + setIsConnectionMode(false); + setConnectionSource(null); + } + + console.log(`Connection created: ${params.source} -> ${params.target} (${connectionType}), Active: ${isActive}`); + }, + [setEdges, connectionType, isConnectionMode, nodes] + ); + + // Handle connection creation + const onConnectStart = (event, params) => { + console.log('Connection started:', params); + setConnectionSource(params); + }; + + // Handle connection completion + const onConnectEnd = (event) => { + console.log('Connection ended'); + }; + + // Initialize the flow + const onInit = (instance) => { + setReactFlowInstance(instance); + + // Set the viewport from the mock data + const { x, y, zoom } = mockApiData.viewportSettings; + instance.setViewport({ x, y, zoom }); + + setTimeout(() => { + // Use a larger padding and lower maxZoom to ensure all nodes are visible + fitView({ padding: 1.0, maxZoom: 0.4 }); + }, 500); + }; + + // State for process details popup + const [showProcessPopup, setShowProcessPopup] = useState(false); + const [selectedProcess, setSelectedProcess] = useState(null); + const [popupPosition, setPopupPosition] = useState({ x: 0, y: 0 }); + + // State for table creation popup + const [showTablePopup, setShowTablePopup] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 }); + const popupRef = useRef(null); + + // Drag handlers for the popup + const handleMouseDown = (e) => { + if (popupRef.current && !e.target.closest('button')) { + const rect = popupRef.current.getBoundingClientRect(); + setIsDragging(true); + setDragOffset({ + x: e.clientX - rect.left, + y: e.clientY - rect.top + }); + e.preventDefault(); + } + }; + + const handleMouseMove = (e) => { + if (isDragging && popupRef.current) { + const newX = e.clientX - dragOffset.x; + const newY = e.clientY - dragOffset.y; + + // Keep popup within viewport bounds + const rect = popupRef.current.getBoundingClientRect(); + const viewportWidth = window.innerWidth; + const viewportHeight = window.innerHeight; + + const boundedX = Math.max(0, Math.min(newX, viewportWidth - rect.width)); + const boundedY = Math.max(0, Math.min(newY, viewportHeight - rect.height)); + + setPopupPosition({ x: boundedX, y: boundedY }); + } + }; + + const handleMouseUp = () => { + setIsDragging(false); + }; + + // Add and remove event listeners for dragging + useEffect(() => { + if (showProcessPopup) { + window.addEventListener('mousemove', handleMouseMove); + window.addEventListener('mouseup', handleMouseUp); + + return () => { + window.removeEventListener('mousemove', handleMouseMove); + window.removeEventListener('mouseup', handleMouseUp); + }; + } + }, [showProcessPopup, isDragging, dragOffset]); + + // Handle node click + const onNodeClick = (event, node) => { + console.log('Node clicked:', node); + + // If it's a table node, show details + if (node.type === 'table') { + const table = mockApiData.tables.find(t => t.slug === node.id); + if (table) { + alert(`Table: ${table.name}\nType: ${table.type}\nColumns: ${table.columns.join(', ')}`); + } + } + + // If it's a process node, show details in a custom popup + if (node.type === 'process') { + const process = mockApiData.processes.find(p => p.slug === node.id); + if (process) { + // Get source and destination table names + const sourceTables = process.source_table.map(slug => { + const table = mockApiData.tables.find(t => t.slug === slug); + return table ? table.name : slug; + }); + + const destTables = process.destination_table.map(slug => { + const table = mockApiData.tables.find(t => t.slug === slug); + return table ? table.name : slug; + }); + + // Add table names to the process object + const processWithTableNames = { + ...process, + source_table_names: sourceTables, + destination_table_names: destTables + }; + + setSelectedProcess(processWithTableNames); + + // Position the popup near the node but not directly on top of it + const nodeElement = document.querySelector(`[data-id="${node.id}"]`); + if (nodeElement) { + const rect = nodeElement.getBoundingClientRect(); + setPopupPosition({ + x: rect.right + 20, + y: rect.top + }); + } else { + setPopupPosition({ + x: event.clientX, + y: event.clientY + }); + } + + setShowProcessPopup(true); + } + } + }; + + // Handle edit process button click in the popup + const handleEditProcess = (process) => { + setSelectedProcessForEdit(process); + setShowProcessForm(true); + setShowProcessPopup(false); + }; + + // Show the table creation popup + const addTableNode = () => { + setShowTablePopup(true); + }; + + // Handle table creation from the popup + const handleCreateTable = (tableData) => { + // Generate a unique ID for the table + const tableId = `table-${Date.now()}`; + + // Create the new table node + const newTable = { + id: tableId, + type: 'table', + data: { + label: tableData.name, + type: tableData.type, + columns: tableData.columns, + slug: tableId // Add a slug for reference + }, + // Position the table outside any schema, at the top-left corner with some margin + position: { + x: 50, + y: 50 + }, + // Make sure it's not initially part of any schema + parentNode: undefined, + extent: undefined, + // Add draggable class to indicate it can be dragged into a schema + className: 'table-node draggable-new-table', + // Add styling to make it stand out + style: { + border: '2px dashed #1890ff', + boxShadow: '0 0 10px rgba(24, 144, 255, 0.5)', + zIndex: 10 + } + }; + + // Add the new table to the nodes + setNodes(nodes => [...nodes, newTable]); + }; + + // Get canvas boundaries for process placement + const getSchemasBoundaries = () => { + // Calculate based on existing nodes + let minX = 100; + let minY = 100; + let maxX = 500; + let maxY = 500; + + if (nodes.length > 0) { + minX = Math.min(...nodes.map(node => node.position.x)); + minY = Math.min(...nodes.map(node => node.position.y)); + maxX = Math.max(...nodes.map(node => node.position.x + 200)); // Assuming node width is ~200px + maxY = Math.max(...nodes.map(node => node.position.y + 200)); // Assuming node height is ~200px + } + + return { minX, minY, maxX, maxY }; + }; + + // We don't need the moveSchemaNodes function anymore + + // Open the process form to create a new process + const addProcessNode = () => { + setSelectedProcessForEdit(null); + setShowProcessForm(true); + }; + + // Handle saving a new process from the form + const handleSaveProcess = (processData) => { + const { minX, minY, maxX, maxY } = getSchemasBoundaries(); + + // Place the new process outside of all schemas + // Either to the right of all schemas or below all schemas + let newX, newY; + + // Get the current viewport to help position the new node in visible area + const viewport = reactFlowInstance ? reactFlowInstance.getViewport() : { x: 0, y: 0, zoom: 1 }; + + // Determine placement position - right side is preferred + newX = maxX + 200; + newY = minY + (maxY - minY) / 2; + + // If we're editing an existing process, find it and update it + if (selectedProcessForEdit) { + const updatedNodes = nodes.map(node => { + if (node.id === selectedProcessForEdit.slug) { + return { + ...node, + data: { + ...node.data, + label: processData.name, + description: processData.description, + type: processData.type, + status: processData.status, + mappings: processData.mappings, + filters: processData.filters, + aggregations: processData.aggregations + } + }; + } + return node; + }); + + setNodes(updatedNodes); + + // Update edges if source or destination tables have changed + const oldProcess = mockApiData.processes.find(p => p.slug === selectedProcessForEdit.slug); + + // Remove old edges + if (oldProcess) { + const edgesToRemove = edges.filter(edge => + edge.source === oldProcess.slug || + edge.target === oldProcess.slug + ); + + if (edgesToRemove.length > 0) { + const remainingEdges = edges.filter(edge => + !edgesToRemove.some(e => e.id === edge.id) + ); + + setEdges(remainingEdges); + } + } + + // Create new edges + const newEdges = []; + + // Determine if process is active or inactive + const isActive = processData.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + const opacity = isActive ? 1 : 0.7; // Slightly transparent if inactive + + // Create edges from source tables to process + processData.source_table.forEach(sourceId => { + newEdges.push({ + id: `e-${sourceId}-${processData.slug}`, + source: sourceId, + target: processData.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: sourceColor, + }, + data: { + label: processData.name, + isActive: isActive + } + }); + }); + + // Create edges from process to destination tables + processData.destination_table.forEach(destId => { + newEdges.push({ + id: `e-${processData.slug}-${destId}`, + source: processData.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: destColor, + }, + data: { + label: processData.name, + isActive: isActive + } + }); + }); + + setEdges(eds => [...eds, ...newEdges]); + + // Update the mock data + const processIndex = mockApiData.processes.findIndex(p => p.slug === processData.slug); + if (processIndex !== -1) { + mockApiData.processes[processIndex] = processData; + } + } else { + // Create a new process node + const newProcess = { + id: processData.slug, + type: 'process', + data: { + label: processData.name, + description: processData.description, + type: processData.type, + status: processData.status, + mappings: processData.mappings, + filters: processData.filters, + aggregations: processData.aggregations + }, + position: { x: newX, y: newY }, + }; + + setNodes(nodes => [...nodes, newProcess]); + + // Create edges + const newEdges = []; + + // Determine if process is active or inactive + const isActive = processData.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + const opacity = isActive ? 1 : 0.7; // Slightly transparent if inactive + + // Create edges from source tables to process + processData.source_table.forEach(sourceId => { + newEdges.push({ + id: `e-${sourceId}-${processData.slug}`, + source: sourceId, + target: processData.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: sourceColor, + }, + data: { + label: processData.name, + isActive: isActive + } + }); + }); + + // Create edges from process to destination tables + processData.destination_table.forEach(destId => { + newEdges.push({ + id: `e-${processData.slug}-${destId}`, + source: processData.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: destColor, + }, + data: { + label: processData.name, + isActive: isActive + } + }); + }); + + setEdges(eds => [...eds, ...newEdges]); + + // Add to mock data + mockApiData.processes.push(processData); + } + }; + + // Removed schema-related functions + + // Handle dragging tables into schemas + const onDragOver = useCallback((event) => { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + }, []); + + const onDrop = useCallback((event) => { + event.preventDefault(); + + // Get the node ID from the data transfer + const nodeId = event.dataTransfer.getData('application/reactflow'); + + if (!nodeId || !reactFlowInstance) { + return; + } + + // Get the drop position + const position = reactFlowInstance.screenToFlowPosition({ + x: event.clientX, + y: event.clientY, + }); + + // Find the node being dragged + const draggedNode = nodes.find(node => node.id === nodeId); + + if (!draggedNode) { + return; + } + + // Check if the drop position is within any schema + const schemas = mockApiData.schemas; + let targetSchema = null; + + for (const schema of schemas) { + const schemaNode = nodes.find(node => node.id === `schema-bg-${schema.slug}`); + + if (schemaNode) { + const { x, y } = schemaNode.position; + const { width, height } = schemaNode.style; + + // Check if the drop position is within this schema + if ( + position.x >= x && + position.x <= x + width && + position.y >= y && + position.y <= y + height + ) { + targetSchema = schema; + break; + } + } + } + + // Update the node with the new position and parent schema + const updatedNodes = nodes.map(node => { + if (node.id === nodeId) { + return { + ...node, + position, + parentNode: targetSchema ? `schema-bg-${targetSchema.slug}` : undefined, + extent: targetSchema ? 'parent' : undefined, + // Remove the draggable styling + style: { + ...node.style, + border: null, + boxShadow: null + }, + className: 'table-node' + }; + } + return node; + }); + + setNodes(updatedNodes); + }, [nodes, reactFlowInstance]); + + // Add the custom CSS to the document + useEffect(() => { + // Create a style element + const styleElement = document.createElement('style'); + styleElement.innerHTML = generateCustomStyles(); + document.head.appendChild(styleElement); + + // Clean up on unmount + return () => { + document.head.removeChild(styleElement); + }; + }, []); + + // Create a style element with our custom styles + const customStyles = useMemo(() => generateCustomStyles(), []); + + return ( +
+ + + {/* Process Details Popup */} + {showProcessPopup && selectedProcess && ( +
e.stopPropagation()} + > +
+
+ {/* Drag handle indicator */} +
+
+
+
+
+ +

+ {selectedProcess.name} +

+
+ + +
+ +
+
+ Process ID: + + {selectedProcess.slug} + +
+ +
+ Type: + + {selectedProcess.type} + +
+ +
+ Status: + + {selectedProcess.status} + +
+
+ +
+

+ Description +

+

+ {selectedProcess.description || 'No description available'} +

+
+ +
+
+

+ Source Tables +

+
    + {selectedProcess.source_table_names.map((name, index) => ( +
  • + {name} +
  • + ))} +
+
+ +
+

+ Destination Tables +

+
    + {selectedProcess.destination_table_names.map((name, index) => ( +
  • + {name} +
  • + ))} +
+
+
+ +
+ + +
+
+ )} + + { + if (n.type === 'table') return n.data.type === 'fact' ? '#1890ff' : '#52c41a'; + return '#fa8c16'; + }} + nodeColor={(n) => { + if (n.type === 'table') return n.data.type === 'fact' ? 'rgba(24, 144, 255, 0.2)' : 'rgba(82, 196, 26, 0.2)'; + return 'rgba(250, 140, 22, 0.2)'; + }} + maskColor="rgba(255, 255, 255, 0.7)" + style={{ background: '#f0f0f0', border: '1px solid #ddd' }} + /> + + + +
+ + + +
+
+
+ + {/* Process Form */} + setShowProcessForm(false)} + onSave={handleSaveProcess} + tables={mockApiData.tables} + existingProcess={selectedProcessForEdit} + /> + + {/* Table Creation Popup */} + {showTablePopup && ( + setShowTablePopup(false)} + onCreateTable={handleCreateTable} + /> + )} +
+ ); +}; + +// Wrap with ReactFlowProvider +const DataflowCanvasWrapper = () => { + return ( + + + + ); +}; + +export default DataflowCanvasWrapper; \ No newline at end of file diff --git a/src/components/DataflowCanvasUpdated.jsx b/src/components/DataflowCanvasUpdated.jsx new file mode 100644 index 0000000..575749b --- /dev/null +++ b/src/components/DataflowCanvasUpdated.jsx @@ -0,0 +1,1266 @@ +import { useState, useCallback, useRef, useEffect, useMemo } from 'react'; +import ReactFlow, { + MiniMap, + Controls, + Background, + useNodesState, + useEdgesState, + addEdge, + Panel, + useReactFlow, + ReactFlowProvider, + Handle, + Position, + BaseEdge, + EdgeLabelRenderer, + getBezierPath +} from 'reactflow'; +import 'reactflow/dist/style.css'; + +// Add custom CSS for React Flow +const generateCustomStyles = () => { + return ` + .react-flow__node { + z-index: 1; + } + + .schema-background-node { + z-index: -1; + pointer-events: all; + border-radius: 25px; + cursor: grab; + user-select: none; + transition: all 0.2s ease; + } + + .schema-background-node:hover { + box-shadow: 0 0 30px rgba(0, 0, 0, 0.08); + } + + .schema-background-node:active { + cursor: grabbing; + } + + .schema-background-node.dragging { + opacity: 0.8; + } + + .schema-label { + position: absolute; + top: 15px; + left: 15px; + background: rgba(255, 255, 255, 0.9); + padding: 8px 12px; + border-radius: 6px; + font-size: 14px; + font-weight: bold; + box-shadow: 0 3px 6px rgba(0,0,0,0.1); + display: flex; + align-items: center; + gap: 8px; + z-index: 10; + } + `; +}; + +// Import icons from react-icons +import { FaDatabase, FaTable, FaArrowRight, FaCog, FaExchangeAlt, FaLayerGroup } from 'react-icons/fa'; +import { BiSolidData } from 'react-icons/bi'; +import { AiFillFolder } from 'react-icons/ai'; +import { BsFileEarmarkSpreadsheet } from 'react-icons/bs'; + +// Import mock data +import mockApiData from './mockData'; + +// Import ProcessForm component +import ProcessForm from './ProcessForm'; + +// Schema Background Node +const SchemaBackgroundNode = ({ data }) => { + // Different background colors for each schema + const bgColor = data.slug === 'edw_schema' + ? 'rgba(24, 144, 255, 0.1)' // Light blue for Schema_1 + : 'rgba(82, 196, 26, 0.1)'; // Light green for Schema_2 + + // Border color based on schema + const borderColor = data.slug === 'edw_schema' + ? '#1890ff' // Blue for Schema_1 + : '#52c41a'; // Green for Schema_2 + + return ( +
+
+ + {data.name} +
+
+ ); +}; + +// Custom edge with animated arrow +const CustomEdge = ({ id, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, data, markerEnd }) => { + const [edgePath, labelX, labelY] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + // Check if the process is active + const isActive = data?.isActive !== false; // Default to active if not specified + + // Determine if this is a source or target edge + const isSourceEdge = data?.edgeType === 'source'; + + // Get the process name and mappings + const processName = data?.processName || 'Process'; + const mappings = data?.mappings || []; + + // Adjust label style based on active status + const labelBgColor = isActive ? 'white' : '#f5f5f5'; + const labelOpacity = isActive ? 1 : 0.8; + + return ( + <> + + +
+ {/* Process name in small text */} +
+ {processName} + {!isActive && ( + + inactive + + )} +
+ + {/* Column mappings */} +
+ {mappings.length > 0 ? ( + mappings.map((column, index) => ( + + {column} + + )) + ) : ( + No mappings + )} +
+
+
+ + ); +}; + +// Process Node (represents ETL or data transformation) +const ProcessNode = ({ data }) => { + // Determine status color + const statusColor = data.status === 'active' ? '#52c41a' : '#ff4d4f'; + const isActive = data.status === 'active'; + + // Define dimensions for the SVG + const width = 240; + const height = 140; + const borderWidth = 2; + + // Define colors + const primaryColor = isActive ? '#fa8c16' : '#aaaaaa'; + const secondaryColor = isActive ? '#ff4d4f' : '#cccccc'; + const bgColor = '#ffffff'; + const descBgColor = isActive ? 'rgba(250, 140, 22, 0.08)' : 'rgba(170, 170, 170, 0.08)'; + + // Create gradient ID + const gradientId = `process-gradient-${data.label.replace(/\s+/g, '-').toLowerCase()}`; + + return ( +
+ {/* SVG Container */} + + {/* Define gradient */} + + + + + + + + {/* Main ellipse shape */} + + + {/* Description background */} + + + + {/* Connection handles */} + + + + {/* Content overlay */} +
+ {/* Icon and title */} +
+
+ +
+ +
+ {data.label} +
+ + {/* Status indicator */} +
+ {data.status} +
+
+ + {/* Description */} +
+ {data.description || 'Data transformation process'} +
+
+
+ ); +}; + +// Table Node +const TableNode = ({ data }) => { + const isFact = data.type === 'fact'; + + // Use a consistent color theme for all tables + const tableColor = '#1890ff'; // Blue for all tables + const background = '#ffffff'; + + return ( +
+ {/* Connection handles */} + + + +
+
+ {/* Different icons for fact and dimension tables */} + {isFact ? ( + + ) : ( + + )} + + {data.label} + + + {isFact ? 'FACT' : 'DIM'} + +
+
+ + {data.columns && ( +
+
Columns:
+
+ {data.columns.slice(0, 5).map((col, index) => ( + + {col} + + ))} + {data.columns.length > 5 && ( + + +{data.columns.length - 5} more + + )} +
+
+ )} +
+ ); +}; + +// Main DataflowCanvas component +const DataflowCanvas = () => { + // State for nodes and edges + const [showProcessForm, setShowProcessForm] = useState(false); + const [selectedProcessForEdit, setSelectedProcessForEdit] = useState(null); + const [showTableForm, setShowTableForm] = useState(false); + const [selectedTableForEdit, setSelectedTableForEdit] = useState(null); + + // Get the React Flow instance + const reactFlowInstance = useReactFlow(); + + // Define node types + const nodeTypes = useMemo(() => ({ + schemaBackground: SchemaBackgroundNode, + process: ProcessNode, + table: TableNode + }), []); + + // Define edge types + const edgeTypes = useMemo(() => ({ + custom: CustomEdge + }), []); + + // Create initial nodes from the mock data + const initialNodes = useMemo(() => { + // Create schema boundaries to properly size and position schema background nodes + const schemaBoundaries = {}; + + // Initialize boundaries with schema positions + mockApiData.schemas.forEach(schema => { + schemaBoundaries[schema.slug] = { + minX: schema.position.x, + minY: schema.position.y, + maxX: schema.position.x + schema.width, + maxY: schema.position.y + schema.height + }; + }); + + // Update boundaries based on table positions + mockApiData.tables.forEach(table => { + const schemaSlug = table.schema; + if (schemaBoundaries[schemaSlug]) { + // Add some padding around tables (100px on each side) + const tableMinX = table.orientation.x - 100; + const tableMinY = table.orientation.y - 100; + const tableMaxX = table.orientation.x + 280; // Table width + padding + const tableMaxY = table.orientation.y + 280; // Table height + padding + + schemaBoundaries[schemaSlug].minX = Math.min(schemaBoundaries[schemaSlug].minX, tableMinX); + schemaBoundaries[schemaSlug].minY = Math.min(schemaBoundaries[schemaSlug].minY, tableMinY); + schemaBoundaries[schemaSlug].maxX = Math.max(schemaBoundaries[schemaSlug].maxX, tableMaxX); + schemaBoundaries[schemaSlug].maxY = Math.max(schemaBoundaries[schemaSlug].maxY, tableMaxY); + } + }); + + // Schema background nodes (add these first so they appear behind other nodes) + const schemaBackgroundNodes = mockApiData.schemas.map(schema => { + const bounds = schemaBoundaries[schema.slug]; + const width = bounds.maxX - bounds.minX; + const height = bounds.maxY - bounds.minY; + + // Add 30% extra size + const extraWidth = width * 0.3; + const extraHeight = height * 0.3; + + return { + id: `schema-bg-${schema.slug}`, + type: 'schemaBackground', + data: { + name: schema.name, + color: schema.color, + slug: schema.slug + }, + position: { + x: bounds.minX - (extraWidth / 2), + y: bounds.minY - (extraHeight / 2) + }, + style: { + width: width + extraWidth, + height: height + extraHeight, + zIndex: -1 // Ensure it's behind other nodes + }, + draggable: true, + selectable: true, + }; + }); + + // Table nodes + const tableNodes = mockApiData.tables.map(table => { + return { + id: table.slug, + type: 'table', + data: { + label: table.name, + type: table.type, + columns: table.columns + }, + position: { + x: table.orientation.x, + y: table.orientation.y + }, + parentNode: `schema-bg-${table.schema}`, + extent: 'parent', + }; + }); + + return [...schemaBackgroundNodes, ...tableNodes]; + }, []); + + // Create process nodes + const processNodes = useMemo(() => { + return mockApiData.processes.map(process => { + // Find source and destination tables to calculate position + const sourceTables = mockApiData.tables.filter(table => + process.source_table.includes(table.slug) + ); + + const destTables = mockApiData.tables.filter(table => + process.destination_table.includes(table.slug) + ); + + // Calculate average position between source and destination tables + let x = 0, y = 0, count = 0; + let parentSchema = null; + + sourceTables.forEach(table => { + x += table.orientation.x; + y += table.orientation.y; + count++; + // If all tables are in the same schema, the process should be in that schema too + if (!parentSchema) parentSchema = table.schema; + else if (parentSchema !== table.schema) parentSchema = null; // Mixed schemas + }); + + destTables.forEach(table => { + x += table.orientation.x; + y += table.orientation.y; + count++; + // If all tables are in the same schema, the process should be in that schema too + if (!parentSchema) parentSchema = table.schema; + else if (parentSchema !== table.schema) parentSchema = null; // Mixed schemas + }); + + if (count > 0) { + x = x / count; + y = y / count; + } + + // Position the process node between source and destination + // For source tables on the left and dest tables on the right + if (sourceTables.length > 0 && destTables.length > 0) { + const avgSourceX = sourceTables.reduce((sum, t) => sum + t.orientation.x, 0) / sourceTables.length; + const avgDestX = destTables.reduce((sum, t) => sum + t.orientation.x, 0) / destTables.length; + + // If source is to the left of destination, place in between + if (avgSourceX < avgDestX) { + x = avgSourceX + (avgDestX - avgSourceX) * 0.5; + } + // If source is to the right of destination, place in between + else { + x = avgDestX + (avgSourceX - avgDestX) * 0.5; + } + } + + return { + id: process.slug, + type: 'process', + data: { + label: process.name, + description: process.description, + type: process.type, + status: process.status + }, + position: { x, y }, + parentNode: parentSchema ? `schema-bg-${parentSchema}` : undefined, + extent: parentSchema ? 'parent' : undefined, + }; + }); + }, []); + + // Create edges between tables and processes + const initialEdges = useMemo(() => { + const edges = []; + + mockApiData.processes.forEach(process => { + // Determine if process is active or inactive + const isActive = process.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + + // Get the mappings for this process + const mappings = process.mappings || []; + + // Format source columns for display + const sourceColumns = mappings.map(m => m.source); + + // Format target columns for display + const targetColumns = mappings.map(m => m.target); + + // Create edges from source tables to process + process.source_table.forEach(sourceId => { + edges.push({ + id: `e-${sourceId}-${process.slug}`, + source: sourceId, + target: process.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: isActive ? 1 : 0.7 // Slightly transparent if inactive + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: sourceColor, + }, + data: { + label: sourceColumns.join(', ') || 'No mappings', + processName: process.name, + isActive: isActive, // Pass status to the edge component + edgeType: 'source', + mappings: sourceColumns + } + }); + }); + + // Create edges from process to destination tables + process.destination_table.forEach(destId => { + edges.push({ + id: `e-${process.slug}-${destId}`, + source: process.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: isActive ? 1 : 0.7 // Slightly transparent if inactive + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: destColor, + }, + data: { + label: targetColumns.join(', ') || 'No mappings', + processName: process.name, + isActive: isActive, // Pass status to the edge component + edgeType: 'target', + mappings: targetColumns + } + }); + }); + }); + + return edges; + }, []); + + // Use React Flow's node state management + const [nodes, setNodes, onNodesChangeDefault] = useNodesState([...initialNodes, ...processNodes]); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + // Custom nodes change handler to update schema boundaries when nodes move + const onNodesChange = useCallback( + (changes) => { + // Apply the default node changes + onNodesChangeDefault(changes); + + // Check if any of the changes are position changes + const hasPositionChanges = changes.some( + change => change.type === 'position' && change.dragging + ); + + // If there are position changes, we might want to update schema boundaries + // This is a placeholder for more complex logic if needed + if (hasPositionChanges) { + // console.log('Nodes are being moved'); + } + }, + [onNodesChangeDefault] + ); + + // Handle connecting nodes + const onConnect = useCallback( + (params) => { + // Only allow connections from tables to processes or processes to tables + const sourceNode = nodes.find(node => node.id === params.source); + const targetNode = nodes.find(node => node.id === params.target); + + if (!sourceNode || !targetNode) return; + + // Check if connection is valid (table -> process or process -> table) + const isSourceTable = sourceNode.type === 'table'; + const isTargetProcess = targetNode.type === 'process'; + const isSourceProcess = sourceNode.type === 'process'; + const isTargetTable = targetNode.type === 'table'; + + if ((isSourceTable && isTargetProcess) || (isSourceProcess && isTargetTable)) { + // Create a new edge with custom styling + const newEdge = { + ...params, + type: 'custom', + animated: true, + style: { + stroke: isSourceTable ? '#52c41a' : '#1890ff', + strokeWidth: 2 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: isSourceTable ? '#52c41a' : '#1890ff', + }, + data: { + label: 'New Connection', + isActive: true + } + }; + + setEdges(eds => addEdge(newEdge, eds)); + + // TODO: Open a form to configure the connection + // This would be where you define mappings, transformations, etc. + } + }, + [nodes, setEdges] + ); + + // Handle node click + const onNodeClick = useCallback((event, node) => { + // Prevent clicks on schema background nodes from opening forms + if (node.type === 'schemaBackground') return; + + if (node.type === 'process') { + // Find the process in the mock data + const process = mockApiData.processes.find(p => p.slug === node.id); + if (process) { + setSelectedProcessForEdit(process); + setShowProcessForm(true); + } + } else if (node.type === 'table') { + // Find the table in the mock data + const table = mockApiData.tables.find(t => t.slug === node.id); + if (table) { + setSelectedTableForEdit(table); + setShowTableForm(true); + } + } + }, []); + + // Add a new table + const addTableNode = () => { + const newTable = { + id: `table-${Date.now()}`, + type: 'table', + data: { + label: 'New Table', + type: 'dimension', + columns: ['id', 'name', 'description'] + }, + position: { + x: Math.random() * 500, + y: Math.random() * 500 + }, + }; + + setNodes(nodes => [...nodes, newTable]); + }; + + // Get canvas boundaries for process placement + const getSchemasBoundaries = () => { + // Calculate based on existing nodes + let minX = 100; + let minY = 100; + let maxX = 500; + let maxY = 500; + + if (nodes.length > 0) { + minX = Math.min(...nodes.map(node => node.position.x)); + minY = Math.min(...nodes.map(node => node.position.y)); + maxX = Math.max(...nodes.map(node => node.position.x + 200)); // Assuming node width is ~200px + maxY = Math.max(...nodes.map(node => node.position.y + 200)); // Assuming node height is ~200px + } + + return { minX, minY, maxX, maxY }; + }; + + // We don't need the moveSchemaNodes function anymore + + // Open the process form to create a new process + const addProcessNode = () => { + setSelectedProcessForEdit(null); + setShowProcessForm(true); + }; + + // Handle saving a new process from the form + const handleSaveProcess = (processData) => { + const { minX, minY, maxX, maxY } = getSchemasBoundaries(); + + // Place the new process outside of all schemas + // Either to the right of all schemas or below all schemas + let newX, newY; + + // Get the current viewport to help position the new node in visible area + const viewport = reactFlowInstance ? reactFlowInstance.getViewport() : { x: 0, y: 0, zoom: 1 }; + + // Determine placement position - right side is preferred + newX = maxX + 200; + newY = minY + (maxY - minY) / 2; + + // If we're editing an existing process, find it and update it + if (selectedProcessForEdit) { + const updatedNodes = nodes.map(node => { + if (node.id === selectedProcessForEdit.slug) { + return { + ...node, + data: { + ...node.data, + label: processData.name, + description: processData.description, + type: processData.type, + status: processData.status, + mappings: processData.mappings, + filters: processData.filters, + aggregations: processData.aggregations + } + }; + } + return node; + }); + + setNodes(updatedNodes); + + // Update edges if source or destination tables have changed + const oldProcess = mockApiData.processes.find(p => p.slug === selectedProcessForEdit.slug); + + // Remove old edges + if (oldProcess) { + const edgesToRemove = edges.filter(edge => + edge.source === oldProcess.slug || + edge.target === oldProcess.slug + ); + + if (edgesToRemove.length > 0) { + const remainingEdges = edges.filter(edge => + !edgesToRemove.some(e => e.id === edge.id) + ); + + setEdges(remainingEdges); + } + } + + // Create new edges + const newEdges = []; + + // Determine if process is active or inactive + const isActive = processData.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + const opacity = isActive ? 1 : 0.7; // Slightly transparent if inactive + + // Get the mappings for this process + const mappings = processData.mappings || []; + + // Format source columns for display + const sourceColumns = mappings.map(m => m.source); + + // Format target columns for display + const targetColumns = mappings.map(m => m.target); + + // Create edges from source tables to process + processData.source_table.forEach(sourceId => { + newEdges.push({ + id: `e-${sourceId}-${processData.slug}`, + source: sourceId, + target: processData.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: sourceColor, + }, + data: { + label: sourceColumns.join(', ') || 'No mappings', + processName: processData.name, + isActive: isActive, + edgeType: 'source', + mappings: sourceColumns + } + }); + }); + + // Create edges from process to destination tables + processData.destination_table.forEach(destId => { + newEdges.push({ + id: `e-${processData.slug}-${destId}`, + source: processData.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: opacity + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: destColor, + }, + data: { + label: targetColumns.join(', ') || 'No mappings', + processName: processData.name, + isActive: isActive, + edgeType: 'target', + mappings: targetColumns + } + }); + }); + + setEdges(eds => [...eds, ...newEdges]); + + // Update the mock data + const processIndex = mockApiData.processes.findIndex(p => p.slug === processData.slug); + if (processIndex !== -1) { + mockApiData.processes[processIndex] = processData; + } else { + mockApiData.processes.push(processData); + } + } else { + // Create a new process node + const newProcess = { + id: processData.slug, + type: 'process', + data: { + label: processData.name, + description: processData.description, + type: processData.type, + status: processData.status, + mappings: processData.mappings, + filters: processData.filters, + aggregations: processData.aggregations + }, + position: { x: newX, y: newY } + }; + + setNodes(nodes => [...nodes, newProcess]); + + // Create edges for the new process + const newEdges = []; + + // Determine if process is active or inactive + const isActive = processData.status === 'active'; + + // Set colors and animation based on process status + const sourceColor = isActive ? '#52c41a' : '#aaaaaa'; // Green or gray + const destColor = isActive ? '#1890ff' : '#aaaaaa'; // Blue or gray + const animated = isActive; // Only animate if active + const strokeWidth = isActive ? 2 : 1.5; // Slightly thinner if inactive + + // Get the mappings for this process + const mappings = processData.mappings || []; + + // Format source columns for display + const sourceColumns = mappings.map(m => m.source); + + // Format target columns for display + const targetColumns = mappings.map(m => m.target); + + // Create edges from source tables to process + processData.source_table.forEach(sourceId => { + newEdges.push({ + id: `e-${sourceId}-${processData.slug}`, + source: sourceId, + target: processData.slug, + type: 'custom', + animated: animated, + style: { + stroke: sourceColor, + strokeWidth: strokeWidth, + opacity: isActive ? 1 : 0.7 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: sourceColor, + }, + data: { + label: sourceColumns.join(', ') || 'No mappings', + processName: processData.name, + isActive: isActive, + edgeType: 'source', + mappings: sourceColumns + } + }); + }); + + // Create edges from process to destination tables + processData.destination_table.forEach(destId => { + newEdges.push({ + id: `e-${processData.slug}-${destId}`, + source: processData.slug, + target: destId, + type: 'custom', + animated: animated, + style: { + stroke: destColor, + strokeWidth: strokeWidth, + opacity: isActive ? 1 : 0.7 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: destColor, + }, + data: { + label: targetColumns.join(', ') || 'No mappings', + processName: processData.name, + isActive: isActive, + edgeType: 'target', + mappings: targetColumns + } + }); + }); + + setEdges(eds => [...eds, ...newEdges]); + + // Add to mock data + mockApiData.processes.push(processData); + } + }; + + // Add custom CSS to the document + useEffect(() => { + const styleElement = document.createElement('style'); + styleElement.textContent = generateCustomStyles(); + document.head.appendChild(styleElement); + + return () => { + document.head.removeChild(styleElement); + }; + }, []); + + // Set initial viewport + useEffect(() => { + if (reactFlowInstance) { + reactFlowInstance.setViewport(mockApiData.viewportSettings); + } + }, [reactFlowInstance]); + + return ( +
+ + + + + + + + + + + + {/* Process Form */} + setShowProcessForm(false)} + onSave={handleSaveProcess} + tables={mockApiData.tables} + existingProcess={selectedProcessForEdit} + /> +
+ ); +}; + +// Wrap with ReactFlowProvider +const DataflowCanvasWithProvider = () => ( + + + +); + +export default DataflowCanvasWithProvider; \ No newline at end of file diff --git a/src/components/InfiniteCanvas.jsx b/src/components/InfiniteCanvas.jsx new file mode 100644 index 0000000..7244cfc --- /dev/null +++ b/src/components/InfiniteCanvas.jsx @@ -0,0 +1,1091 @@ +import { useState, useCallback, useRef, useEffect, useMemo } from 'react'; +import ReactFlow, { + MiniMap, + Controls, + Background, + useNodesState, + useEdgesState, + addEdge, + Panel, + useReactFlow, + ReactFlowProvider, + Handle, + Position, + BaseEdge, + EdgeLabelRenderer, + getSmoothStepPath, + getBezierPath +} from 'reactflow'; +import 'reactflow/dist/style.css'; + +// Import icons from react-icons +import { FaDatabase, FaTable, FaFlask, FaArrowRight } from 'react-icons/fa'; +import { BiSolidData } from 'react-icons/bi'; +import { AiFillFolder } from 'react-icons/ai'; +import { BsFileEarmarkSpreadsheet } from 'react-icons/bs'; + +// Custom edge with animated arrow +const CustomEdge = ({ id, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, style = {}, data, markerEnd }) => { + const [edgePath, labelX, labelY] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + + return ( + <> + + +
+ + {data?.label || 'connects to'} +
+
+ + ); +}; + +// Custom node types +const DatabaseNode = ({ data }) => { + // Use teal color for Dbtez + const isDbtez = data.label === 'Dbtez'; + const bgColor = isDbtez ? '#1a1a1a' : '#1a1a1a'; + const borderColor = isDbtez ? '#00a99d' : '#1890ff'; + const handleColor = isDbtez ? '#00a99d' : '#1890ff'; + + return ( +
+ {/* Connection handles */} + + + + + +
+ {isDbtez ? ( + + + + ) : ( + + )} + {data.label} +
+ +
+ {isDbtez ? 'Database' : `${data.schemas} schemas • ${data.tables} tables`} +
+
+ ); +}; + +const SchemaNode = ({ data }) => { + // Use teal color for schemas under Dbtez + const isDbtezSchema = data.dbId === 'db4'; + const isSalesSchema = data.label === 'Sales'; + + // Use dark theme colors + const bgColor = '#1a1a1a'; + const borderColor = isSalesSchema ? '#fa8c16' : (isDbtezSchema ? '#00a99d' : '#52c41a'); + const handleColor = isSalesSchema ? '#fa8c16' : (isDbtezSchema ? '#00a99d' : '#52c41a'); + + return ( +
+ {/* Connection handles */} + + + + + +
+ {isSalesSchema ? ( + + + + ) : isDbtezSchema ? ( + + + + ) : ( + + )} + {data.label} +
+ +
+ {isDbtezSchema ? 'Schema' : `${data.tables} tables`} +
+
+ ); +}; + +const TableNode = ({ data }) => { + const isTestTable = data.label === 'test_table'; + const isTestTable2 = data.label === 'test_table2'; + + // Use dark theme colors + const borderColor = '#52c41a'; + const background = '#1a1a1a'; + + return ( +
+ {/* Connection handles */} + + + + + +
+
+ {isTestTable ? ( + + ) : isTestTable2 ? ( + + ) : ( + + )} + + {data.label} + + {isTestTable && ( + + TEST + + )} + {isTestTable2 && ( + + STAGE + + )} +
+
+
+ {isTestTable ? 'Tables' : + isTestTable2 ? 'Stage Tables' : + (data.isFact ? 'Fact Table' : 'Dimension Table')} +
+
+ ); +}; + +// Mock data for demonstration +const generateMockData = () => { + const databases = [ + { id: 'db4', name: 'Dbtez', schemas: 1, tables: 2 }, + ]; + + const schemas = [ + { id: 'schema10', dbId: 'db4', name: 'Sales', tables: 2 }, + ]; + + const tables = [ + // Dbtez - Sales schema + { id: 'table16', schemaId: 'schema10', name: 'test_table', isFact: true }, + { id: 'table17', schemaId: 'schema10', name: 'test_table2', isFact: false }, + ]; + + return { databases, schemas, tables }; +}; + +const InfiniteCanvas = () => { + const reactFlowWrapper = useRef(null); + const [reactFlowInstance, setReactFlowInstance] = useState(null); + const { fitView, setViewport, getViewport } = useReactFlow(); + + // State to track which elements are expanded + const [expandedDatabases, setExpandedDatabases] = useState({}); + const [expandedSchemas, setExpandedSchemas] = useState({}); + const [selectedTable, setSelectedTable] = useState(null); + + // State for infinite canvas + const [scale, setScale] = useState(1); + const [position, setPosition] = useState({ x: 0, y: 0 }); + + // State for connection mode + const [isConnectionMode, setIsConnectionMode] = useState(false); + const [connectionSource, setConnectionSource] = useState(null); + const [connectionType, setConnectionType] = useState('default'); // default, reference, dependency + + // Mock data + const mockData = generateMockData(); + + // Define node types (memoized to prevent unnecessary re-renders) + const nodeTypes = useMemo(() => ({ + database: DatabaseNode, + schema: SchemaNode, + table: TableNode, + }), []); + + // Define edge types + const edgeTypes = useMemo(() => ({ + custom: CustomEdge, + }), []); + + // Initialize with database nodes only + const initialNodes = mockData.databases.map((db, index) => ({ + id: db.id, + type: 'database', + data: { + label: db.name, + schemas: db.schemas, + tables: db.tables, + expanded: false, + onToggle: (id) => toggleDatabaseExpansion(id) + }, + position: { x: 250 * index, y: 50 }, + })); + + const initialEdges = []; + + const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + // Track viewport changes using the onMove callback instead of event listeners + const onMove = useCallback((event, viewport) => { + setScale(viewport.zoom); + setPosition({ x: viewport.x, y: viewport.y }); + }, []); + + const onConnect = useCallback( + (params) => { + // Create a custom edge with the selected connection type + const edgeColor = connectionType === 'reference' ? '#00a99d' : + connectionType === 'dependency' ? '#ff4d4f' : '#722ed1'; + + const edgeLabel = connectionType === 'reference' ? 'references' : + connectionType === 'dependency' ? 'depends on' : 'connects to'; + + const newEdge = { + ...params, + id: `e-custom-${params.source}-${params.target}`, + type: 'custom', + animated: true, + style: { + stroke: edgeColor, + strokeWidth: 2 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: edgeColor, + }, + data: { + label: edgeLabel + } + }; + + // Add the new edge to the edges array + setEdges(eds => [...eds, newEdge]); + + // If in connection mode, exit it after creating a connection + if (isConnectionMode) { + setIsConnectionMode(false); + setConnectionSource(null); + } + + console.log(`Connection created: ${params.source} -> ${params.target} (${connectionType})`); + }, + [setEdges, connectionType, isConnectionMode] + ); + + const onInit = (instance) => { + setReactFlowInstance(instance); + + // Auto-expand Dbtez database and its schema on load + setTimeout(() => { + // Expand the Dbtez database + toggleDatabaseExpansion('db4'); + + // After expanding Dbtez, also expand its Sales schema + setTimeout(() => { + toggleSchemaExpansion('schema10'); + + // Fit view after all expansions + setTimeout(() => { + fitView({ padding: 0.5, maxZoom: 0.7 }); + }, 100); + }, 100); + }, 100); + }; + + // Handle node click for expanding/collapsing + const onNodeClick = (event, node) => { + // Only handle expansion/collapse if not in connection mode + if (!isConnectionMode) { + if (node.type === 'database') { + toggleDatabaseExpansion(node.id); + } else if (node.type === 'schema') { + toggleSchemaExpansion(node.id); + } else if (node.type === 'table') { + showTableDetails(node.id); + } + } + }; + + // Handle connection creation + const onConnectStart = (event, params) => { + console.log('Connection started:', params); + setConnectionSource(params); + }; + + // Handle connection completion + const onConnectEnd = (event) => { + console.log('Connection ended'); + }; + + // Toggle database expansion to show/hide schemas + const toggleDatabaseExpansion = (dbId) => { + const isExpanded = expandedDatabases[dbId]; + + // Update the database node to show the correct toggle state + setNodes(nodes => nodes.map(node => { + if (node.id === dbId) { + return { + ...node, + data: { + ...node.data, + expanded: !isExpanded, + onToggle: toggleDatabaseExpansion + } + }; + } + return node; + })); + + if (isExpanded) { + // Collapse: remove all schemas and tables for this database + setNodes(nodes => nodes.filter(node => + node.type === 'database' || + (node.type === 'schema' && !node.data.dbId === dbId) || + (node.type === 'table' && !mockData.schemas.find(s => s.id === node.data.schemaId)?.dbId === dbId) + )); + + setEdges(edges => edges.filter(edge => + !edge.source.startsWith(dbId) && !edge.target.startsWith(dbId) + )); + + // Update expanded state + setExpandedDatabases({ + ...expandedDatabases, + [dbId]: false + }); + + // Also collapse any expanded schemas + const updatedExpandedSchemas = { ...expandedSchemas }; + mockData.schemas.forEach(schema => { + if (schema.dbId === dbId) { + updatedExpandedSchemas[schema.id] = false; + } + }); + setExpandedSchemas(updatedExpandedSchemas); + + } else { + // Expand: add schema nodes for this database + const dbNode = nodes.find(n => n.id === dbId); + const dbSchemas = mockData.schemas.filter(schema => schema.dbId === dbId); + + const schemaNodes = dbSchemas.map((schema, index) => ({ + id: schema.id, + type: 'schema', + data: { + label: schema.name, + tables: schema.tables, + dbId: dbId, + expanded: false, + onToggle: toggleSchemaExpansion + }, + position: { + x: dbNode.position.x - 150 + (index * 150), + y: dbNode.position.y + 150 + }, + })); + + const schemaEdges = dbSchemas.map(schema => ({ + id: `e-${dbId}-${schema.id}`, + source: dbId, + target: schema.id, + type: 'custom', + animated: true, + style: { stroke: '#00a99d', strokeWidth: 2 }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: '#00a99d', + }, + data: { + label: 'contains' + } + })); + + setNodes(nodes => [...nodes, ...schemaNodes]); + setEdges(edges => [...edges, ...schemaEdges]); + + // Update expanded state + setExpandedDatabases({ + ...expandedDatabases, + [dbId]: true + }); + } + + setTimeout(() => { + fitView(); + }, 10); + }; + + // Toggle schema expansion to show/hide tables + const toggleSchemaExpansion = (schemaId) => { + const isExpanded = expandedSchemas[schemaId]; + + // Update the schema node to show the correct toggle state + setNodes(nodes => nodes.map(node => { + if (node.id === schemaId) { + return { + ...node, + data: { + ...node.data, + expanded: !isExpanded, + onToggle: toggleSchemaExpansion + } + }; + } + return node; + })); + + if (isExpanded) { + // Collapse: remove all tables for this schema + setNodes(nodes => nodes.filter(node => + node.type !== 'table' || node.data.schemaId !== schemaId + )); + + setEdges(edges => edges.filter(edge => + !edge.source.startsWith(schemaId) && !edge.target.startsWith(schemaId) + )); + + // Update expanded state + setExpandedSchemas({ + ...expandedSchemas, + [schemaId]: false + }); + + } else { + // Expand: add table nodes for this schema + const schemaNode = nodes.find(n => n.id === schemaId); + const schemaTables = mockData.tables.filter(table => table.schemaId === schemaId); + + const tableNodes = schemaTables.map((table, index) => ({ + id: table.id, + type: 'table', + data: { + label: table.name, + isFact: table.isFact, + schemaId: schemaId + }, + position: { + x: schemaNode.position.x - 200 + (index * 100), + y: schemaNode.position.y + 150 + }, + })); + + const tableEdges = schemaTables.map(table => ({ + id: `e-${schemaId}-${table.id}`, + source: schemaId, + target: table.id, + type: 'custom', + animated: true, + style: { + stroke: table.isFact ? '#fa8c16' : '#52c41a', + strokeWidth: 2 + }, + markerEnd: { + type: 'arrowclosed', + width: 20, + height: 20, + color: table.isFact ? '#fa8c16' : '#52c41a', + }, + data: { + label: table.isFact ? 'fact table' : 'dimension' + } + })); + + setNodes(nodes => [...nodes, ...tableNodes]); + setEdges(edges => [...edges, ...tableEdges]); + + // Update expanded state + setExpandedSchemas({ + ...expandedSchemas, + [schemaId]: true + }); + } + + setTimeout(() => { + fitView(); + }, 10); + }; + + // Show table details when a table is clicked + const showTableDetails = (tableId) => { + const table = mockData.tables.find(t => t.id === tableId); + setSelectedTable(table); + + // In a real application, you would fetch the table details from your API + alert(`Table Details: ${table.name}\nType: ${table.isFact ? 'Fact Table' : 'Dimension Table'}\n\nIn a real application, this would show a modal with columns, relationships, and metrics.`); + }; + + // Delete a custom connection + const deleteConnection = (edgeId) => { + setEdges(edges => edges.filter(edge => edge.id !== edgeId)); + }; + + // Get node label by ID + const getNodeLabel = (nodeId) => { + const node = nodes.find(n => n.id === nodeId); + return node ? node.data.label : nodeId; + }; + + // Reset the canvas to show only databases + const resetView = () => { + setNodes(initialNodes); + setEdges(initialEdges); + setExpandedDatabases({}); + setExpandedSchemas({}); + setSelectedTable(null); + setIsConnectionMode(false); + setConnectionSource(null); + + setTimeout(() => { + fitView(); + }, 10); + }; + + return ( +
+ + + + + + {/* Minimal control panel */} + +
+
+ + +
+ +
+
+ Zoom: {Math.round(scale * 70)}% + Click nodes to expand +
+
+
+
+ + {/* Dbtez Control Panel */} + +
+
+ + + + + Dbtez Data Warehouse + +
+ +
+ + + +
+
+
+ + {/* Connection Mode Indicator */} + {isConnectionMode && ( + +
+ + + Connection Mode Active - + Drag from a connection point (dot) to another node + +
+
+ )} + + {/* Connections Panel */} + + {edges.some(edge => edge.id.startsWith('e-custom')) && ( +
+

Custom Connections

+
    + {edges + .filter(edge => edge.id.startsWith('e-custom')) + .map(edge => ( +
  • +
    + + {getNodeLabel(edge.source)} + + {getNodeLabel(edge.target)} +
    + {edge.label || 'Connected to'} +
    +
    + +
  • + ))} +
+
+ )} +
+
+
+ ); +}; + +export default function InfiniteCanvasWrapper() { + return ( +
+ + + +
+ ); +} \ No newline at end of file diff --git a/src/components/ProcessForm.jsx b/src/components/ProcessForm.jsx new file mode 100644 index 0000000..2afc5b5 --- /dev/null +++ b/src/components/ProcessForm.jsx @@ -0,0 +1,1193 @@ +import React, { useState, useEffect } from 'react'; +import { FaCog, FaTable, FaArrowRight, FaTimes, FaPlus, FaFilter, FaCalculator, FaExclamationTriangle, FaDatabase, FaBuilding } from 'react-icons/fa'; +import { HiOutlineDocumentReport } from 'react-icons/hi'; + +const ProcessForm = ({ isOpen, onClose, onSave, tables, existingProcess = null }) => { + const [processName, setProcessName] = useState(''); + const [processType, setProcessType] = useState('ETL'); + const [description, setDescription] = useState(''); + const [sourceTables, setSourceTables] = useState([]); + const [destinationTables, setDestinationTables] = useState([]); + const [mappings, setMappings] = useState([]); + const [filters, setFilters] = useState([]); + const [aggregations, setAggregations] = useState([]); + const [processStatus, setProcessStatus] = useState('inactive'); + const [activeTab, setActiveTab] = useState('basic'); + const [validationError, setValidationError] = useState(''); + + // Initialize form with existing process data if editing + useEffect(() => { + if (existingProcess) { + setProcessName(existingProcess.name || ''); + setProcessType(existingProcess.type || 'ETL'); + setDescription(existingProcess.description || ''); + setSourceTables(existingProcess.source_table || []); + setDestinationTables(existingProcess.destination_table || []); + setProcessStatus(existingProcess.status || 'inactive'); + + // Initialize mappings, filters, and aggregations if they exist + if (existingProcess.mappings) setMappings(existingProcess.mappings); + if (existingProcess.filters) setFilters(existingProcess.filters); + if (existingProcess.aggregations) setAggregations(existingProcess.aggregations); + } else { + // Reset form for new process + setProcessName(''); + setProcessType('ETL'); + setDescription(''); + setSourceTables([]); + setDestinationTables([]); + setMappings([]); + setFilters([]); + setAggregations([]); + setProcessStatus('inactive'); + } + setValidationError(''); + }, [existingProcess, isOpen]); + + const handleSave = () => { + // Validate form + if (!processName.trim()) { + setValidationError('Please enter a process name'); + return; + } + + if (sourceTables.length === 0) { + setValidationError('Please select at least one source table'); + return; + } + + if (destinationTables.length === 0) { + setValidationError('Please select at least one destination table'); + return; + } + + // Create process object + const processData = { + name: processName, + type: processType, + description, + source_table: sourceTables, + destination_table: destinationTables, + mappings, + filters, + aggregations, + slug: existingProcess ? existingProcess.slug : `process_${Date.now()}`, + status: processStatus // Use the selected status + }; + + onSave(processData); + onClose(); + }; + + const handleAddMapping = () => { + setMappings([...mappings, { source: '', target: '', type: 'direct' }]); + }; + + const handleUpdateMapping = (index, field, value) => { + const updatedMappings = [...mappings]; + updatedMappings[index][field] = value; + setMappings(updatedMappings); + }; + + const handleRemoveMapping = (index) => { + setMappings(mappings.filter((_, i) => i !== index)); + }; + + const handleAddFilter = () => { + setFilters([...filters, { column: '', operator: '=', value: '' }]); + }; + + const handleUpdateFilter = (index, field, value) => { + const updatedFilters = [...filters]; + updatedFilters[index][field] = value; + setFilters(updatedFilters); + }; + + const handleRemoveFilter = (index) => { + setFilters(filters.filter((_, i) => i !== index)); + }; + + const handleAddAggregation = () => { + setAggregations([...aggregations, { function: 'SUM', column: '', alias: '' }]); + }; + + const handleUpdateAggregation = (index, field, value) => { + const updatedAggregations = [...aggregations]; + updatedAggregations[index][field] = value; + setAggregations(updatedAggregations); + }; + + const handleRemoveAggregation = (index) => { + setAggregations(aggregations.filter((_, i) => i !== index)); + }; + + // Function to check if a table is a stage table + const isStageTable = (tableId) => { + const table = tables.find(t => t.slug === tableId); + return (table && table.type && table.type.toLowerCase() === 'stage') || + (table && table.name && table.name.toLowerCase().includes('_stage')); + }; + + // Function to check if a table is a dimension table + const isDimensionTable = (tableId) => { + const table = tables.find(t => t.slug === tableId); + return (table && table.type && table.type.toLowerCase() === 'dimension') || + (table && table.name && table.name.toLowerCase().includes('_dim') && + !table.name.toLowerCase().includes('_stage') && + !table.name.toLowerCase().includes('_fact')); + }; + + // Function to check if a table is a fact table + const isFactTable = (tableId) => { + const table = tables.find(t => t.slug === tableId); + return (table && table.type && table.type.toLowerCase() === 'fact') || + (table && table.name && table.name.toLowerCase().includes('_fact')); + }; + + // Function to check if a connection is valid based on table types + const isValidConnection = (sourceId, destinationId) => { + // Stage tables can connect to either Dimension or Fact tables + if (isStageTable(sourceId)) { + return isDimensionTable(destinationId) || isFactTable(destinationId); + } + + // Fact tables can connect to either Dimension or Fact tables + if (isFactTable(sourceId)) { + return isDimensionTable(destinationId) || isFactTable(destinationId); + } + + // Dimension to Fact table connections are not allowed + if (isDimensionTable(sourceId) && isFactTable(destinationId)) { + return false; + } + + // All other connections are allowed (including Dimension to Dimension) + return true; + }; + + // Check if a destination table can be selected based on current source tables + const canSelectDestination = (destinationId) => { + // If no source tables are selected, any destination can be selected + if (sourceTables.length === 0) { + return true; + } + + // Check if any of the selected source tables can connect to this destination + return sourceTables.some(sourceId => isValidConnection(sourceId, destinationId)); + }; + + // Check if a source table can be selected based on current destination tables + const canSelectSource = (sourceId) => { + // If no destination tables are selected, any source can be selected + if (destinationTables.length === 0) { + return true; + } + + // Check if this source can connect to any of the selected destinations + return destinationTables.some(destinationId => isValidConnection(sourceId, destinationId)); + }; + + const handleTableSelection = (tableId, type) => { + setValidationError(''); + + if (type === 'source') { + if (sourceTables.includes(tableId)) { + // Removing a source table + setSourceTables(sourceTables.filter(id => id !== tableId)); + } else { + // Adding a source table - check if it's compatible with current destinations + if (canSelectSource(tableId)) { + setSourceTables([...sourceTables, tableId]); + } else { + setValidationError('This source table type cannot connect to the selected destination table(s). Dimension tables cannot connect to Fact tables.'); + } + } + } else { + if (destinationTables.includes(tableId)) { + // Removing a destination table + setDestinationTables(destinationTables.filter(id => id !== tableId)); + } else { + // Adding a destination table - check if it's compatible with current sources + if (canSelectDestination(tableId)) { + setDestinationTables([...destinationTables, tableId]); + } else { + setValidationError('This destination table type cannot be connected from the selected source table(s). Dimension tables cannot connect to Fact tables.'); + } + } + } + }; + + // Get available columns for selected tables + const getAvailableColumns = (tableIds) => { + let columns = []; + tableIds.forEach(tableId => { + const table = tables.find(t => t.slug === tableId); + if (table && table.columns) { + // Ensure table type is properly set based on naming convention + if (table.name && table.name.toLowerCase().includes('_stage')) { + table.type = 'stage'; + } else if (table.name && table.name.toLowerCase().includes('_fact')) { + table.type = 'fact'; + } else if (table.name && table.name.toLowerCase().includes('_dim')) { + table.type = 'dimension'; + } else if (table.type) { + // Normalize table type to lowercase for consistency + table.type = table.type.toLowerCase(); + } + + columns = [...columns, ...table.columns.map(col => ({ + id: `${tableId}.${col}`, + name: `${table.name}.${col}`, + column: col, + table: tableId + }))]; + } + }); + return columns; + }; + + const sourceColumns = getAvailableColumns(sourceTables); + const destinationColumns = getAvailableColumns(destinationTables); + + // Function to get table type label + const getTableTypeLabel = (tableType) => { + if (!tableType) return ''; + + switch (tableType.toLowerCase()) { + case 'dimension': + return 'DIM'; + case 'fact': + return 'FACT'; + case 'stage': + return 'STAGE'; + default: + return tableType.toUpperCase(); + } + }; + + // Function to get table type color + const getTableTypeColor = (tableType) => { + if (!tableType) return '#666666'; + + switch (tableType.toLowerCase()) { + case 'dimension': + return '#52c41a'; // Green + case 'fact': + return '#1890ff'; // Blue + case 'stage': + return '#fa8c16'; // Orange + default: + return '#666666'; + } + }; + + // Function to get the appropriate icon based on table type + const getTableIcon = (tableType) => { + if (!tableType) return ; + + const type = tableType && typeof tableType === 'string' ? tableType.toLowerCase() : ''; + console.log('Table type:', type); + + switch (type) { + case 'stage': + return ; + case 'fact': + return ; + case 'dimension': + return ; + default: + return ; + } + }; + + // Simple component to render the appropriate icon + const TableIcon = ({ type }) => { + if (!type) return ; + + const tableType = type.toLowerCase(); + + if (tableType === 'stage') return ; + if (tableType === 'fact') return ; + if (tableType === 'dimension') return ; + return ; + }; + + if (!isOpen) return null; + + return ( +
+
+ + +

+ {existingProcess ? 'Edit Process' : 'Create New Process'} +

+ + {/* Validation Error Message */} + {validationError && ( +
+ + {validationError} +
+ )} + + {/* Tabs */} +
+ + + + +
+ + {/* Basic Info Tab */} + {activeTab === 'basic' && ( +
+
+ + setProcessName(e.target.value)} + style={{ + width: '100%', + padding: '8px', + border: '1px solid #ddd', + borderRadius: '4px' + }} + placeholder="Enter process name" + /> +
+ +
+ + +
+ +
+ + + + {processStatus === 'active' + ? 'Active processes will show animated connections in the flow diagram.' + : 'Inactive processes will show gray, non-animated connections in the flow diagram.'} + +
+ +
+ +