├── .env copy ├── .gitignore ├── README.md ├── client ├── .gitignore ├── README.md ├── eslint.config.js ├── index.html ├── package-lock.json ├── package.json ├── public │ └── vite.svg ├── src │ ├── App.css │ ├── App.jsx │ ├── assets │ │ └── react.svg │ ├── components │ │ ├── ArtifactPreview.jsx │ │ └── ChatInterface.jsx │ ├── index.css │ └── main.jsx └── vite.config.js ├── package-lock.json ├── package.json └── server.js /.env copy: -------------------------------------------------------------------------------- 1 | VLLM_API_URL= 2 | VLLM_API_KEY= 3 | # PORT=3001 # Optional: Define if needed -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | .env 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UIGEN-Demo: UI Generation Model Testing Interface 2 | 3 | This project provides a simple web interface to interact with and test UI generation language models, specifically designed initially for `Tesslate/UIGEN-T2`, but configurable for any OpenAI-compatible API endpoint (like a local vLLM instance). 4 | 5 | It features a chat interface to send prompts to the model and a live preview panel to render the generated HTML artifact in real-time. 6 | 7 | ## Features 8 | 9 | * **Chat Interface:** Send prompts and view the conversation history. 10 | * **Model Selection:** Choose from a predefined list of available models hosted on the backend API. 11 | * **Live HTML Preview:** Renders the HTML code block (` ```html ... ``` `) extracted from the model's response using Sandpack. 12 | * **Code Viewer:** Toggle visibility of the generated HTML source code within the preview panel. 13 | * **Streaming Responses:** Handles streamed responses from the backend for a more interactive experience. 14 | * **Backend Proxy:** A simple Express server (`server.js`) proxies requests to the target LLM API, keeping API keys and endpoint URLs secure. 15 | * **Configurable:** Easily configure the target API endpoint and key via environment variables. 16 | 17 | ## Tech Stack 18 | 19 | * **Frontend:** 20 | * React 19 21 | * Vite 22 | * Tailwind CSS 4 23 | * Sandpack (for code preview and editing) 24 | * **Backend:** 25 | * Node.js 26 | * Express 5 27 | * `node-fetch` (for making requests to the LLM API) 28 | * `dotenv` (for environment variable management) 29 | * `cors` 30 | 31 | ## Setup and Installation 32 | 33 | **Prerequisites:** 34 | 35 | * Node.js (LTS version recommended) 36 | * npm (usually comes with Node.js) 37 | 38 | **Steps:** 39 | 40 | 1. **Clone the repository:** 41 | ```bash 42 | git clone 43 | cd UIGEN-Demo 44 | ``` 45 | 46 | 2. **Install Backend Dependencies:** 47 | Navigate to the project root directory (`UIGEN-Demo`) and run: 48 | ```bash 49 | npm install 50 | ``` 51 | 52 | 3. **Install Frontend Dependencies:** 53 | Navigate to the client directory (`client`) and run: 54 | ```bash 55 | cd client 56 | npm install 57 | cd .. 58 | ``` 59 | 60 | 4. **Configure Environment Variables:** 61 | * Create a `.env` file in the **root** directory (`UIGEN-Demo`) of the project. You can copy `.env copy` to get started: 62 | ```bash 63 | copy ".env copy" .env 64 | ``` 65 | * Edit the `.env` file with your specific API details: 66 | ``` 67 | # URL of your OpenAI-compatible API endpoint (e.g., vLLM server) 68 | VLLM_API_URL=https://your-vllm-or-openai-compatible-api/v1 69 | 70 | # API Key for the endpoint (if required) 71 | VLLM_API_KEY=your_api_key_here 72 | 73 | # Optional: Port for the backend server (defaults to 3001 if not set) 74 | # PORT=3001 75 | ``` 76 | * **Important:** The `.env` file is listed in `.gitignore` and should **not** be committed to version control. 77 | 78 | ## Running the Application 79 | 80 | You need to run both the backend server and the frontend development server. 81 | 82 | 1. **Start the Backend Server:** 83 | Open a terminal in the project's **root** directory (`UIGEN-Demo`) and run: 84 | ```bash 85 | node server.js 86 | ``` 87 | The server will typically start on `http://localhost:3001` (or the port specified in your `.env` file). 88 | 89 | 2. **Start the Frontend Development Server:** 90 | Open **another** terminal in the **client** directory (`client`) and run: 91 | ```bash 92 | npm run dev 93 | ``` 94 | The frontend will usually be available at `http://localhost:5173` (Vite's default, check the terminal output). 95 | 96 | 3. **Access the Application:** 97 | Open your web browser and navigate to the frontend URL (e.g., `http://localhost:5173`). 98 | 99 | ## Usage 100 | 101 | 1. Select the desired language model from the dropdown menu in the top bar. 102 | 2. Type your prompt into the chat input box at the bottom of the left panel. 103 | 3. Press Enter (or click the Send button) to send the prompt to the model via the backend. 104 | 4. The model's response will appear in the chat history. 105 | 5. If the response contains a valid ` ```html ... ``` ` code block, the HTML will be rendered in the right-hand Artifact Preview panel. 106 | 6. Use the ` Show Code` / ` Hide Code` button in the Artifact Preview panel to view or hide the raw HTML source. 107 | 108 | ## Configuration Details 109 | 110 | * **Backend API Endpoint (`VLLM_API_URL`):** Set in the root `.env` file. This is the target URL the `server.js` will forward requests to. 111 | * **Backend API Key (`VLLM_API_KEY`):** Set in the root `.env` file. This key is added as a Bearer token in the `Authorization` header for requests to the `VLLM_API_URL`. 112 | * **Backend Port (`PORT`):** Optional. Set in the root `.env` file to change the port the Express server runs on (default is 3001). 113 | * **Available Models:** The list of models in the dropdown is defined in `App.jsx` within the `AVAILABLE_MODELS` constant. Ensure the `id` field matches the model identifier expected by your backend API endpoint. 114 | * **Vite Proxy:** The frontend (`vite.config.js`) is configured to proxy requests starting with `/api` to the backend server (defaulting to `http://localhost:3001`). 115 | 116 | ## License 117 | 118 | This project is licensed under the ISC License - see the `package.json` file for details. 119 | ``` -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | # React + Vite 2 | 3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 | 5 | Currently, two official plugins are available: 6 | 7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh 8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 | 10 | ## Expanding the ESLint configuration 11 | 12 | If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. 13 | -------------------------------------------------------------------------------- /client/eslint.config.js: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import globals from 'globals' 3 | import reactHooks from 'eslint-plugin-react-hooks' 4 | import reactRefresh from 'eslint-plugin-react-refresh' 5 | 6 | export default [ 7 | { ignores: ['dist'] }, 8 | { 9 | files: ['**/*.{js,jsx}'], 10 | languageOptions: { 11 | ecmaVersion: 2020, 12 | globals: globals.browser, 13 | parserOptions: { 14 | ecmaVersion: 'latest', 15 | ecmaFeatures: { jsx: true }, 16 | sourceType: 'module', 17 | }, 18 | }, 19 | plugins: { 20 | 'react-hooks': reactHooks, 21 | 'react-refresh': reactRefresh, 22 | }, 23 | rules: { 24 | ...js.configs.recommended.rules, 25 | ...reactHooks.configs.recommended.rules, 26 | 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], 27 | 'react-refresh/only-export-components': [ 28 | 'warn', 29 | { allowConstantExport: true }, 30 | ], 31 | }, 32 | }, 33 | ] 34 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Vite + React 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "client", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@codesandbox/sandpack-react": "^2.20.0", 12 | "autoprefixer": "^10.4.21", 13 | "postcss": "^8.5.3", 14 | "react": "^19.0.0", 15 | "react-dom": "^19.0.0", 16 | "tailwindcss": "^4.1.4" 17 | }, 18 | "devDependencies": { 19 | "@eslint/js": "^9.22.0", 20 | "@types/react": "^19.1.2", 21 | "@types/react-dom": "^19.1.2", 22 | "@vitejs/plugin-react": "^4.3.4", 23 | "eslint": "^9.22.0", 24 | "eslint-plugin-react-hooks": "^5.2.0", 25 | "eslint-plugin-react-refresh": "^0.4.19", 26 | "globals": "^16.0.0", 27 | "vite": "^6.3.1" 28 | } 29 | }, 30 | "node_modules/@ampproject/remapping": { 31 | "version": "2.3.0", 32 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 33 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 34 | "dev": true, 35 | "license": "Apache-2.0", 36 | "dependencies": { 37 | "@jridgewell/gen-mapping": "^0.3.5", 38 | "@jridgewell/trace-mapping": "^0.3.24" 39 | }, 40 | "engines": { 41 | "node": ">=6.0.0" 42 | } 43 | }, 44 | "node_modules/@babel/code-frame": { 45 | "version": "7.26.2", 46 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 47 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 48 | "dev": true, 49 | "license": "MIT", 50 | "dependencies": { 51 | "@babel/helper-validator-identifier": "^7.25.9", 52 | "js-tokens": "^4.0.0", 53 | "picocolors": "^1.0.0" 54 | }, 55 | "engines": { 56 | "node": ">=6.9.0" 57 | } 58 | }, 59 | "node_modules/@babel/compat-data": { 60 | "version": "7.26.8", 61 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", 62 | "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", 63 | "dev": true, 64 | "license": "MIT", 65 | "engines": { 66 | "node": ">=6.9.0" 67 | } 68 | }, 69 | "node_modules/@babel/core": { 70 | "version": "7.26.10", 71 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", 72 | "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", 73 | "dev": true, 74 | "license": "MIT", 75 | "dependencies": { 76 | "@ampproject/remapping": "^2.2.0", 77 | "@babel/code-frame": "^7.26.2", 78 | "@babel/generator": "^7.26.10", 79 | "@babel/helper-compilation-targets": "^7.26.5", 80 | "@babel/helper-module-transforms": "^7.26.0", 81 | "@babel/helpers": "^7.26.10", 82 | "@babel/parser": "^7.26.10", 83 | "@babel/template": "^7.26.9", 84 | "@babel/traverse": "^7.26.10", 85 | "@babel/types": "^7.26.10", 86 | "convert-source-map": "^2.0.0", 87 | "debug": "^4.1.0", 88 | "gensync": "^1.0.0-beta.2", 89 | "json5": "^2.2.3", 90 | "semver": "^6.3.1" 91 | }, 92 | "engines": { 93 | "node": ">=6.9.0" 94 | }, 95 | "funding": { 96 | "type": "opencollective", 97 | "url": "https://opencollective.com/babel" 98 | } 99 | }, 100 | "node_modules/@babel/generator": { 101 | "version": "7.27.0", 102 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", 103 | "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", 104 | "dev": true, 105 | "license": "MIT", 106 | "dependencies": { 107 | "@babel/parser": "^7.27.0", 108 | "@babel/types": "^7.27.0", 109 | "@jridgewell/gen-mapping": "^0.3.5", 110 | "@jridgewell/trace-mapping": "^0.3.25", 111 | "jsesc": "^3.0.2" 112 | }, 113 | "engines": { 114 | "node": ">=6.9.0" 115 | } 116 | }, 117 | "node_modules/@babel/helper-compilation-targets": { 118 | "version": "7.27.0", 119 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", 120 | "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", 121 | "dev": true, 122 | "license": "MIT", 123 | "dependencies": { 124 | "@babel/compat-data": "^7.26.8", 125 | "@babel/helper-validator-option": "^7.25.9", 126 | "browserslist": "^4.24.0", 127 | "lru-cache": "^5.1.1", 128 | "semver": "^6.3.1" 129 | }, 130 | "engines": { 131 | "node": ">=6.9.0" 132 | } 133 | }, 134 | "node_modules/@babel/helper-module-imports": { 135 | "version": "7.25.9", 136 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", 137 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", 138 | "dev": true, 139 | "license": "MIT", 140 | "dependencies": { 141 | "@babel/traverse": "^7.25.9", 142 | "@babel/types": "^7.25.9" 143 | }, 144 | "engines": { 145 | "node": ">=6.9.0" 146 | } 147 | }, 148 | "node_modules/@babel/helper-module-transforms": { 149 | "version": "7.26.0", 150 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", 151 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", 152 | "dev": true, 153 | "license": "MIT", 154 | "dependencies": { 155 | "@babel/helper-module-imports": "^7.25.9", 156 | "@babel/helper-validator-identifier": "^7.25.9", 157 | "@babel/traverse": "^7.25.9" 158 | }, 159 | "engines": { 160 | "node": ">=6.9.0" 161 | }, 162 | "peerDependencies": { 163 | "@babel/core": "^7.0.0" 164 | } 165 | }, 166 | "node_modules/@babel/helper-plugin-utils": { 167 | "version": "7.26.5", 168 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", 169 | "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", 170 | "dev": true, 171 | "license": "MIT", 172 | "engines": { 173 | "node": ">=6.9.0" 174 | } 175 | }, 176 | "node_modules/@babel/helper-string-parser": { 177 | "version": "7.25.9", 178 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 179 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 180 | "dev": true, 181 | "license": "MIT", 182 | "engines": { 183 | "node": ">=6.9.0" 184 | } 185 | }, 186 | "node_modules/@babel/helper-validator-identifier": { 187 | "version": "7.25.9", 188 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 189 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 190 | "dev": true, 191 | "license": "MIT", 192 | "engines": { 193 | "node": ">=6.9.0" 194 | } 195 | }, 196 | "node_modules/@babel/helper-validator-option": { 197 | "version": "7.25.9", 198 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", 199 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", 200 | "dev": true, 201 | "license": "MIT", 202 | "engines": { 203 | "node": ">=6.9.0" 204 | } 205 | }, 206 | "node_modules/@babel/helpers": { 207 | "version": "7.27.0", 208 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", 209 | "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", 210 | "dev": true, 211 | "license": "MIT", 212 | "dependencies": { 213 | "@babel/template": "^7.27.0", 214 | "@babel/types": "^7.27.0" 215 | }, 216 | "engines": { 217 | "node": ">=6.9.0" 218 | } 219 | }, 220 | "node_modules/@babel/parser": { 221 | "version": "7.27.0", 222 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", 223 | "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", 224 | "dev": true, 225 | "license": "MIT", 226 | "dependencies": { 227 | "@babel/types": "^7.27.0" 228 | }, 229 | "bin": { 230 | "parser": "bin/babel-parser.js" 231 | }, 232 | "engines": { 233 | "node": ">=6.0.0" 234 | } 235 | }, 236 | "node_modules/@babel/plugin-transform-react-jsx-self": { 237 | "version": "7.25.9", 238 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", 239 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", 240 | "dev": true, 241 | "license": "MIT", 242 | "dependencies": { 243 | "@babel/helper-plugin-utils": "^7.25.9" 244 | }, 245 | "engines": { 246 | "node": ">=6.9.0" 247 | }, 248 | "peerDependencies": { 249 | "@babel/core": "^7.0.0-0" 250 | } 251 | }, 252 | "node_modules/@babel/plugin-transform-react-jsx-source": { 253 | "version": "7.25.9", 254 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", 255 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", 256 | "dev": true, 257 | "license": "MIT", 258 | "dependencies": { 259 | "@babel/helper-plugin-utils": "^7.25.9" 260 | }, 261 | "engines": { 262 | "node": ">=6.9.0" 263 | }, 264 | "peerDependencies": { 265 | "@babel/core": "^7.0.0-0" 266 | } 267 | }, 268 | "node_modules/@babel/template": { 269 | "version": "7.27.0", 270 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", 271 | "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", 272 | "dev": true, 273 | "license": "MIT", 274 | "dependencies": { 275 | "@babel/code-frame": "^7.26.2", 276 | "@babel/parser": "^7.27.0", 277 | "@babel/types": "^7.27.0" 278 | }, 279 | "engines": { 280 | "node": ">=6.9.0" 281 | } 282 | }, 283 | "node_modules/@babel/traverse": { 284 | "version": "7.27.0", 285 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", 286 | "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", 287 | "dev": true, 288 | "license": "MIT", 289 | "dependencies": { 290 | "@babel/code-frame": "^7.26.2", 291 | "@babel/generator": "^7.27.0", 292 | "@babel/parser": "^7.27.0", 293 | "@babel/template": "^7.27.0", 294 | "@babel/types": "^7.27.0", 295 | "debug": "^4.3.1", 296 | "globals": "^11.1.0" 297 | }, 298 | "engines": { 299 | "node": ">=6.9.0" 300 | } 301 | }, 302 | "node_modules/@babel/traverse/node_modules/globals": { 303 | "version": "11.12.0", 304 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 305 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 306 | "dev": true, 307 | "license": "MIT", 308 | "engines": { 309 | "node": ">=4" 310 | } 311 | }, 312 | "node_modules/@babel/types": { 313 | "version": "7.27.0", 314 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", 315 | "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", 316 | "dev": true, 317 | "license": "MIT", 318 | "dependencies": { 319 | "@babel/helper-string-parser": "^7.25.9", 320 | "@babel/helper-validator-identifier": "^7.25.9" 321 | }, 322 | "engines": { 323 | "node": ">=6.9.0" 324 | } 325 | }, 326 | "node_modules/@codemirror/autocomplete": { 327 | "version": "6.18.6", 328 | "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", 329 | "integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", 330 | "license": "MIT", 331 | "dependencies": { 332 | "@codemirror/language": "^6.0.0", 333 | "@codemirror/state": "^6.0.0", 334 | "@codemirror/view": "^6.17.0", 335 | "@lezer/common": "^1.0.0" 336 | } 337 | }, 338 | "node_modules/@codemirror/commands": { 339 | "version": "6.8.1", 340 | "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz", 341 | "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==", 342 | "license": "MIT", 343 | "dependencies": { 344 | "@codemirror/language": "^6.0.0", 345 | "@codemirror/state": "^6.4.0", 346 | "@codemirror/view": "^6.27.0", 347 | "@lezer/common": "^1.1.0" 348 | } 349 | }, 350 | "node_modules/@codemirror/lang-css": { 351 | "version": "6.3.1", 352 | "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", 353 | "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", 354 | "license": "MIT", 355 | "dependencies": { 356 | "@codemirror/autocomplete": "^6.0.0", 357 | "@codemirror/language": "^6.0.0", 358 | "@codemirror/state": "^6.0.0", 359 | "@lezer/common": "^1.0.2", 360 | "@lezer/css": "^1.1.7" 361 | } 362 | }, 363 | "node_modules/@codemirror/lang-html": { 364 | "version": "6.4.9", 365 | "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.9.tgz", 366 | "integrity": "sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==", 367 | "license": "MIT", 368 | "dependencies": { 369 | "@codemirror/autocomplete": "^6.0.0", 370 | "@codemirror/lang-css": "^6.0.0", 371 | "@codemirror/lang-javascript": "^6.0.0", 372 | "@codemirror/language": "^6.4.0", 373 | "@codemirror/state": "^6.0.0", 374 | "@codemirror/view": "^6.17.0", 375 | "@lezer/common": "^1.0.0", 376 | "@lezer/css": "^1.1.0", 377 | "@lezer/html": "^1.3.0" 378 | } 379 | }, 380 | "node_modules/@codemirror/lang-javascript": { 381 | "version": "6.2.3", 382 | "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz", 383 | "integrity": "sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw==", 384 | "license": "MIT", 385 | "dependencies": { 386 | "@codemirror/autocomplete": "^6.0.0", 387 | "@codemirror/language": "^6.6.0", 388 | "@codemirror/lint": "^6.0.0", 389 | "@codemirror/state": "^6.0.0", 390 | "@codemirror/view": "^6.17.0", 391 | "@lezer/common": "^1.0.0", 392 | "@lezer/javascript": "^1.0.0" 393 | } 394 | }, 395 | "node_modules/@codemirror/language": { 396 | "version": "6.11.0", 397 | "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", 398 | "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", 399 | "license": "MIT", 400 | "dependencies": { 401 | "@codemirror/state": "^6.0.0", 402 | "@codemirror/view": "^6.23.0", 403 | "@lezer/common": "^1.1.0", 404 | "@lezer/highlight": "^1.0.0", 405 | "@lezer/lr": "^1.0.0", 406 | "style-mod": "^4.0.0" 407 | } 408 | }, 409 | "node_modules/@codemirror/lint": { 410 | "version": "6.8.5", 411 | "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz", 412 | "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==", 413 | "license": "MIT", 414 | "dependencies": { 415 | "@codemirror/state": "^6.0.0", 416 | "@codemirror/view": "^6.35.0", 417 | "crelt": "^1.0.5" 418 | } 419 | }, 420 | "node_modules/@codemirror/state": { 421 | "version": "6.5.2", 422 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", 423 | "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", 424 | "license": "MIT", 425 | "dependencies": { 426 | "@marijn/find-cluster-break": "^1.0.0" 427 | } 428 | }, 429 | "node_modules/@codemirror/view": { 430 | "version": "6.36.6", 431 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.6.tgz", 432 | "integrity": "sha512-uxugGLet+Nzp0Jcit8Hn3LypM8ioMLKTsdf8FRoT3HWvZtb9GhaWMe0Cc15rz90Ljab4YFJiAulmIVB74OY0IQ==", 433 | "license": "MIT", 434 | "dependencies": { 435 | "@codemirror/state": "^6.5.0", 436 | "style-mod": "^4.1.0", 437 | "w3c-keyname": "^2.2.4" 438 | } 439 | }, 440 | "node_modules/@codesandbox/nodebox": { 441 | "version": "0.1.8", 442 | "resolved": "https://registry.npmjs.org/@codesandbox/nodebox/-/nodebox-0.1.8.tgz", 443 | "integrity": "sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==", 444 | "license": "SEE LICENSE IN ./LICENSE", 445 | "dependencies": { 446 | "outvariant": "^1.4.0", 447 | "strict-event-emitter": "^0.4.3" 448 | } 449 | }, 450 | "node_modules/@codesandbox/sandpack-client": { 451 | "version": "2.19.8", 452 | "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-client/-/sandpack-client-2.19.8.tgz", 453 | "integrity": "sha512-CMV4nr1zgKzVpx4I3FYvGRM5YT0VaQhALMW9vy4wZRhEyWAtJITQIqZzrTGWqB1JvV7V72dVEUCUPLfYz5hgJQ==", 454 | "license": "Apache-2.0", 455 | "dependencies": { 456 | "@codesandbox/nodebox": "0.1.8", 457 | "buffer": "^6.0.3", 458 | "dequal": "^2.0.2", 459 | "mime-db": "^1.52.0", 460 | "outvariant": "1.4.0", 461 | "static-browser-server": "1.0.3" 462 | } 463 | }, 464 | "node_modules/@codesandbox/sandpack-react": { 465 | "version": "2.20.0", 466 | "resolved": "https://registry.npmjs.org/@codesandbox/sandpack-react/-/sandpack-react-2.20.0.tgz", 467 | "integrity": "sha512-takd1YpW/PMQ6KPQfvseWLHWklJovGY8QYj8MtWnskGKbjOGJ6uZfyZbcJ6aCFLQMpNyjTqz9AKNbvhCOZ1TUQ==", 468 | "license": "Apache-2.0", 469 | "dependencies": { 470 | "@codemirror/autocomplete": "^6.4.0", 471 | "@codemirror/commands": "^6.1.3", 472 | "@codemirror/lang-css": "^6.0.1", 473 | "@codemirror/lang-html": "^6.4.0", 474 | "@codemirror/lang-javascript": "^6.1.2", 475 | "@codemirror/language": "^6.3.2", 476 | "@codemirror/state": "^6.2.0", 477 | "@codemirror/view": "^6.7.1", 478 | "@codesandbox/sandpack-client": "^2.19.8", 479 | "@lezer/highlight": "^1.1.3", 480 | "@react-hook/intersection-observer": "^3.1.1", 481 | "@stitches/core": "^1.2.6", 482 | "anser": "^2.1.1", 483 | "clean-set": "^1.1.2", 484 | "dequal": "^2.0.2", 485 | "escape-carriage": "^1.3.1", 486 | "lz-string": "^1.4.4", 487 | "react-devtools-inline": "4.4.0", 488 | "react-is": "^17.0.2" 489 | }, 490 | "peerDependencies": { 491 | "react": "^16.8.0 || ^17 || ^18 || ^19", 492 | "react-dom": "^16.8.0 || ^17 || ^18 || ^19" 493 | } 494 | }, 495 | "node_modules/@esbuild/aix-ppc64": { 496 | "version": "0.25.3", 497 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", 498 | "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", 499 | "cpu": [ 500 | "ppc64" 501 | ], 502 | "dev": true, 503 | "license": "MIT", 504 | "optional": true, 505 | "os": [ 506 | "aix" 507 | ], 508 | "engines": { 509 | "node": ">=18" 510 | } 511 | }, 512 | "node_modules/@esbuild/android-arm": { 513 | "version": "0.25.3", 514 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", 515 | "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", 516 | "cpu": [ 517 | "arm" 518 | ], 519 | "dev": true, 520 | "license": "MIT", 521 | "optional": true, 522 | "os": [ 523 | "android" 524 | ], 525 | "engines": { 526 | "node": ">=18" 527 | } 528 | }, 529 | "node_modules/@esbuild/android-arm64": { 530 | "version": "0.25.3", 531 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", 532 | "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", 533 | "cpu": [ 534 | "arm64" 535 | ], 536 | "dev": true, 537 | "license": "MIT", 538 | "optional": true, 539 | "os": [ 540 | "android" 541 | ], 542 | "engines": { 543 | "node": ">=18" 544 | } 545 | }, 546 | "node_modules/@esbuild/android-x64": { 547 | "version": "0.25.3", 548 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", 549 | "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", 550 | "cpu": [ 551 | "x64" 552 | ], 553 | "dev": true, 554 | "license": "MIT", 555 | "optional": true, 556 | "os": [ 557 | "android" 558 | ], 559 | "engines": { 560 | "node": ">=18" 561 | } 562 | }, 563 | "node_modules/@esbuild/darwin-arm64": { 564 | "version": "0.25.3", 565 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", 566 | "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", 567 | "cpu": [ 568 | "arm64" 569 | ], 570 | "dev": true, 571 | "license": "MIT", 572 | "optional": true, 573 | "os": [ 574 | "darwin" 575 | ], 576 | "engines": { 577 | "node": ">=18" 578 | } 579 | }, 580 | "node_modules/@esbuild/darwin-x64": { 581 | "version": "0.25.3", 582 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", 583 | "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", 584 | "cpu": [ 585 | "x64" 586 | ], 587 | "dev": true, 588 | "license": "MIT", 589 | "optional": true, 590 | "os": [ 591 | "darwin" 592 | ], 593 | "engines": { 594 | "node": ">=18" 595 | } 596 | }, 597 | "node_modules/@esbuild/freebsd-arm64": { 598 | "version": "0.25.3", 599 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", 600 | "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", 601 | "cpu": [ 602 | "arm64" 603 | ], 604 | "dev": true, 605 | "license": "MIT", 606 | "optional": true, 607 | "os": [ 608 | "freebsd" 609 | ], 610 | "engines": { 611 | "node": ">=18" 612 | } 613 | }, 614 | "node_modules/@esbuild/freebsd-x64": { 615 | "version": "0.25.3", 616 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", 617 | "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", 618 | "cpu": [ 619 | "x64" 620 | ], 621 | "dev": true, 622 | "license": "MIT", 623 | "optional": true, 624 | "os": [ 625 | "freebsd" 626 | ], 627 | "engines": { 628 | "node": ">=18" 629 | } 630 | }, 631 | "node_modules/@esbuild/linux-arm": { 632 | "version": "0.25.3", 633 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", 634 | "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", 635 | "cpu": [ 636 | "arm" 637 | ], 638 | "dev": true, 639 | "license": "MIT", 640 | "optional": true, 641 | "os": [ 642 | "linux" 643 | ], 644 | "engines": { 645 | "node": ">=18" 646 | } 647 | }, 648 | "node_modules/@esbuild/linux-arm64": { 649 | "version": "0.25.3", 650 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", 651 | "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", 652 | "cpu": [ 653 | "arm64" 654 | ], 655 | "dev": true, 656 | "license": "MIT", 657 | "optional": true, 658 | "os": [ 659 | "linux" 660 | ], 661 | "engines": { 662 | "node": ">=18" 663 | } 664 | }, 665 | "node_modules/@esbuild/linux-ia32": { 666 | "version": "0.25.3", 667 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", 668 | "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", 669 | "cpu": [ 670 | "ia32" 671 | ], 672 | "dev": true, 673 | "license": "MIT", 674 | "optional": true, 675 | "os": [ 676 | "linux" 677 | ], 678 | "engines": { 679 | "node": ">=18" 680 | } 681 | }, 682 | "node_modules/@esbuild/linux-loong64": { 683 | "version": "0.25.3", 684 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", 685 | "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", 686 | "cpu": [ 687 | "loong64" 688 | ], 689 | "dev": true, 690 | "license": "MIT", 691 | "optional": true, 692 | "os": [ 693 | "linux" 694 | ], 695 | "engines": { 696 | "node": ">=18" 697 | } 698 | }, 699 | "node_modules/@esbuild/linux-mips64el": { 700 | "version": "0.25.3", 701 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", 702 | "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", 703 | "cpu": [ 704 | "mips64el" 705 | ], 706 | "dev": true, 707 | "license": "MIT", 708 | "optional": true, 709 | "os": [ 710 | "linux" 711 | ], 712 | "engines": { 713 | "node": ">=18" 714 | } 715 | }, 716 | "node_modules/@esbuild/linux-ppc64": { 717 | "version": "0.25.3", 718 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", 719 | "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", 720 | "cpu": [ 721 | "ppc64" 722 | ], 723 | "dev": true, 724 | "license": "MIT", 725 | "optional": true, 726 | "os": [ 727 | "linux" 728 | ], 729 | "engines": { 730 | "node": ">=18" 731 | } 732 | }, 733 | "node_modules/@esbuild/linux-riscv64": { 734 | "version": "0.25.3", 735 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", 736 | "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", 737 | "cpu": [ 738 | "riscv64" 739 | ], 740 | "dev": true, 741 | "license": "MIT", 742 | "optional": true, 743 | "os": [ 744 | "linux" 745 | ], 746 | "engines": { 747 | "node": ">=18" 748 | } 749 | }, 750 | "node_modules/@esbuild/linux-s390x": { 751 | "version": "0.25.3", 752 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", 753 | "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", 754 | "cpu": [ 755 | "s390x" 756 | ], 757 | "dev": true, 758 | "license": "MIT", 759 | "optional": true, 760 | "os": [ 761 | "linux" 762 | ], 763 | "engines": { 764 | "node": ">=18" 765 | } 766 | }, 767 | "node_modules/@esbuild/linux-x64": { 768 | "version": "0.25.3", 769 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", 770 | "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", 771 | "cpu": [ 772 | "x64" 773 | ], 774 | "dev": true, 775 | "license": "MIT", 776 | "optional": true, 777 | "os": [ 778 | "linux" 779 | ], 780 | "engines": { 781 | "node": ">=18" 782 | } 783 | }, 784 | "node_modules/@esbuild/netbsd-arm64": { 785 | "version": "0.25.3", 786 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", 787 | "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", 788 | "cpu": [ 789 | "arm64" 790 | ], 791 | "dev": true, 792 | "license": "MIT", 793 | "optional": true, 794 | "os": [ 795 | "netbsd" 796 | ], 797 | "engines": { 798 | "node": ">=18" 799 | } 800 | }, 801 | "node_modules/@esbuild/netbsd-x64": { 802 | "version": "0.25.3", 803 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", 804 | "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", 805 | "cpu": [ 806 | "x64" 807 | ], 808 | "dev": true, 809 | "license": "MIT", 810 | "optional": true, 811 | "os": [ 812 | "netbsd" 813 | ], 814 | "engines": { 815 | "node": ">=18" 816 | } 817 | }, 818 | "node_modules/@esbuild/openbsd-arm64": { 819 | "version": "0.25.3", 820 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", 821 | "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", 822 | "cpu": [ 823 | "arm64" 824 | ], 825 | "dev": true, 826 | "license": "MIT", 827 | "optional": true, 828 | "os": [ 829 | "openbsd" 830 | ], 831 | "engines": { 832 | "node": ">=18" 833 | } 834 | }, 835 | "node_modules/@esbuild/openbsd-x64": { 836 | "version": "0.25.3", 837 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", 838 | "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", 839 | "cpu": [ 840 | "x64" 841 | ], 842 | "dev": true, 843 | "license": "MIT", 844 | "optional": true, 845 | "os": [ 846 | "openbsd" 847 | ], 848 | "engines": { 849 | "node": ">=18" 850 | } 851 | }, 852 | "node_modules/@esbuild/sunos-x64": { 853 | "version": "0.25.3", 854 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", 855 | "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", 856 | "cpu": [ 857 | "x64" 858 | ], 859 | "dev": true, 860 | "license": "MIT", 861 | "optional": true, 862 | "os": [ 863 | "sunos" 864 | ], 865 | "engines": { 866 | "node": ">=18" 867 | } 868 | }, 869 | "node_modules/@esbuild/win32-arm64": { 870 | "version": "0.25.3", 871 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", 872 | "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", 873 | "cpu": [ 874 | "arm64" 875 | ], 876 | "dev": true, 877 | "license": "MIT", 878 | "optional": true, 879 | "os": [ 880 | "win32" 881 | ], 882 | "engines": { 883 | "node": ">=18" 884 | } 885 | }, 886 | "node_modules/@esbuild/win32-ia32": { 887 | "version": "0.25.3", 888 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", 889 | "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", 890 | "cpu": [ 891 | "ia32" 892 | ], 893 | "dev": true, 894 | "license": "MIT", 895 | "optional": true, 896 | "os": [ 897 | "win32" 898 | ], 899 | "engines": { 900 | "node": ">=18" 901 | } 902 | }, 903 | "node_modules/@esbuild/win32-x64": { 904 | "version": "0.25.3", 905 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", 906 | "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", 907 | "cpu": [ 908 | "x64" 909 | ], 910 | "dev": true, 911 | "license": "MIT", 912 | "optional": true, 913 | "os": [ 914 | "win32" 915 | ], 916 | "engines": { 917 | "node": ">=18" 918 | } 919 | }, 920 | "node_modules/@eslint-community/eslint-utils": { 921 | "version": "4.6.1", 922 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", 923 | "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", 924 | "dev": true, 925 | "license": "MIT", 926 | "dependencies": { 927 | "eslint-visitor-keys": "^3.4.3" 928 | }, 929 | "engines": { 930 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 931 | }, 932 | "funding": { 933 | "url": "https://opencollective.com/eslint" 934 | }, 935 | "peerDependencies": { 936 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 937 | } 938 | }, 939 | "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 940 | "version": "3.4.3", 941 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 942 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 943 | "dev": true, 944 | "license": "Apache-2.0", 945 | "engines": { 946 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 947 | }, 948 | "funding": { 949 | "url": "https://opencollective.com/eslint" 950 | } 951 | }, 952 | "node_modules/@eslint-community/regexpp": { 953 | "version": "4.12.1", 954 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 955 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 956 | "dev": true, 957 | "license": "MIT", 958 | "engines": { 959 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 960 | } 961 | }, 962 | "node_modules/@eslint/config-array": { 963 | "version": "0.20.0", 964 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", 965 | "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", 966 | "dev": true, 967 | "license": "Apache-2.0", 968 | "dependencies": { 969 | "@eslint/object-schema": "^2.1.6", 970 | "debug": "^4.3.1", 971 | "minimatch": "^3.1.2" 972 | }, 973 | "engines": { 974 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 975 | } 976 | }, 977 | "node_modules/@eslint/config-helpers": { 978 | "version": "0.2.1", 979 | "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", 980 | "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", 981 | "dev": true, 982 | "license": "Apache-2.0", 983 | "engines": { 984 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 985 | } 986 | }, 987 | "node_modules/@eslint/core": { 988 | "version": "0.13.0", 989 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", 990 | "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", 991 | "dev": true, 992 | "license": "Apache-2.0", 993 | "dependencies": { 994 | "@types/json-schema": "^7.0.15" 995 | }, 996 | "engines": { 997 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 998 | } 999 | }, 1000 | "node_modules/@eslint/eslintrc": { 1001 | "version": "3.3.1", 1002 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 1003 | "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 1004 | "dev": true, 1005 | "license": "MIT", 1006 | "dependencies": { 1007 | "ajv": "^6.12.4", 1008 | "debug": "^4.3.2", 1009 | "espree": "^10.0.1", 1010 | "globals": "^14.0.0", 1011 | "ignore": "^5.2.0", 1012 | "import-fresh": "^3.2.1", 1013 | "js-yaml": "^4.1.0", 1014 | "minimatch": "^3.1.2", 1015 | "strip-json-comments": "^3.1.1" 1016 | }, 1017 | "engines": { 1018 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1019 | }, 1020 | "funding": { 1021 | "url": "https://opencollective.com/eslint" 1022 | } 1023 | }, 1024 | "node_modules/@eslint/eslintrc/node_modules/globals": { 1025 | "version": "14.0.0", 1026 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 1027 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 1028 | "dev": true, 1029 | "license": "MIT", 1030 | "engines": { 1031 | "node": ">=18" 1032 | }, 1033 | "funding": { 1034 | "url": "https://github.com/sponsors/sindresorhus" 1035 | } 1036 | }, 1037 | "node_modules/@eslint/js": { 1038 | "version": "9.25.1", 1039 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", 1040 | "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", 1041 | "dev": true, 1042 | "license": "MIT", 1043 | "engines": { 1044 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1045 | } 1046 | }, 1047 | "node_modules/@eslint/object-schema": { 1048 | "version": "2.1.6", 1049 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 1050 | "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 1051 | "dev": true, 1052 | "license": "Apache-2.0", 1053 | "engines": { 1054 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1055 | } 1056 | }, 1057 | "node_modules/@eslint/plugin-kit": { 1058 | "version": "0.2.8", 1059 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", 1060 | "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", 1061 | "dev": true, 1062 | "license": "Apache-2.0", 1063 | "dependencies": { 1064 | "@eslint/core": "^0.13.0", 1065 | "levn": "^0.4.1" 1066 | }, 1067 | "engines": { 1068 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1069 | } 1070 | }, 1071 | "node_modules/@humanfs/core": { 1072 | "version": "0.19.1", 1073 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 1074 | "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 1075 | "dev": true, 1076 | "license": "Apache-2.0", 1077 | "engines": { 1078 | "node": ">=18.18.0" 1079 | } 1080 | }, 1081 | "node_modules/@humanfs/node": { 1082 | "version": "0.16.6", 1083 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 1084 | "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 1085 | "dev": true, 1086 | "license": "Apache-2.0", 1087 | "dependencies": { 1088 | "@humanfs/core": "^0.19.1", 1089 | "@humanwhocodes/retry": "^0.3.0" 1090 | }, 1091 | "engines": { 1092 | "node": ">=18.18.0" 1093 | } 1094 | }, 1095 | "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 1096 | "version": "0.3.1", 1097 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 1098 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 1099 | "dev": true, 1100 | "license": "Apache-2.0", 1101 | "engines": { 1102 | "node": ">=18.18" 1103 | }, 1104 | "funding": { 1105 | "type": "github", 1106 | "url": "https://github.com/sponsors/nzakas" 1107 | } 1108 | }, 1109 | "node_modules/@humanwhocodes/module-importer": { 1110 | "version": "1.0.1", 1111 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 1112 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 1113 | "dev": true, 1114 | "license": "Apache-2.0", 1115 | "engines": { 1116 | "node": ">=12.22" 1117 | }, 1118 | "funding": { 1119 | "type": "github", 1120 | "url": "https://github.com/sponsors/nzakas" 1121 | } 1122 | }, 1123 | "node_modules/@humanwhocodes/retry": { 1124 | "version": "0.4.2", 1125 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", 1126 | "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", 1127 | "dev": true, 1128 | "license": "Apache-2.0", 1129 | "engines": { 1130 | "node": ">=18.18" 1131 | }, 1132 | "funding": { 1133 | "type": "github", 1134 | "url": "https://github.com/sponsors/nzakas" 1135 | } 1136 | }, 1137 | "node_modules/@jridgewell/gen-mapping": { 1138 | "version": "0.3.8", 1139 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 1140 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 1141 | "dev": true, 1142 | "license": "MIT", 1143 | "dependencies": { 1144 | "@jridgewell/set-array": "^1.2.1", 1145 | "@jridgewell/sourcemap-codec": "^1.4.10", 1146 | "@jridgewell/trace-mapping": "^0.3.24" 1147 | }, 1148 | "engines": { 1149 | "node": ">=6.0.0" 1150 | } 1151 | }, 1152 | "node_modules/@jridgewell/resolve-uri": { 1153 | "version": "3.1.2", 1154 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1155 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1156 | "dev": true, 1157 | "license": "MIT", 1158 | "engines": { 1159 | "node": ">=6.0.0" 1160 | } 1161 | }, 1162 | "node_modules/@jridgewell/set-array": { 1163 | "version": "1.2.1", 1164 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 1165 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 1166 | "dev": true, 1167 | "license": "MIT", 1168 | "engines": { 1169 | "node": ">=6.0.0" 1170 | } 1171 | }, 1172 | "node_modules/@jridgewell/sourcemap-codec": { 1173 | "version": "1.5.0", 1174 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 1175 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 1176 | "dev": true, 1177 | "license": "MIT" 1178 | }, 1179 | "node_modules/@jridgewell/trace-mapping": { 1180 | "version": "0.3.25", 1181 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 1182 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 1183 | "dev": true, 1184 | "license": "MIT", 1185 | "dependencies": { 1186 | "@jridgewell/resolve-uri": "^3.1.0", 1187 | "@jridgewell/sourcemap-codec": "^1.4.14" 1188 | } 1189 | }, 1190 | "node_modules/@lezer/common": { 1191 | "version": "1.2.3", 1192 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", 1193 | "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", 1194 | "license": "MIT" 1195 | }, 1196 | "node_modules/@lezer/css": { 1197 | "version": "1.1.11", 1198 | "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.1.11.tgz", 1199 | "integrity": "sha512-FuAnusbLBl1SEAtfN8NdShxYJiESKw9LAFysfea1T96jD3ydBn12oYjaSG1a04BQRIUd93/0D8e5CV1cUMkmQg==", 1200 | "license": "MIT", 1201 | "dependencies": { 1202 | "@lezer/common": "^1.2.0", 1203 | "@lezer/highlight": "^1.0.0", 1204 | "@lezer/lr": "^1.0.0" 1205 | } 1206 | }, 1207 | "node_modules/@lezer/highlight": { 1208 | "version": "1.2.1", 1209 | "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", 1210 | "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", 1211 | "license": "MIT", 1212 | "dependencies": { 1213 | "@lezer/common": "^1.0.0" 1214 | } 1215 | }, 1216 | "node_modules/@lezer/html": { 1217 | "version": "1.3.10", 1218 | "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.10.tgz", 1219 | "integrity": "sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==", 1220 | "license": "MIT", 1221 | "dependencies": { 1222 | "@lezer/common": "^1.2.0", 1223 | "@lezer/highlight": "^1.0.0", 1224 | "@lezer/lr": "^1.0.0" 1225 | } 1226 | }, 1227 | "node_modules/@lezer/javascript": { 1228 | "version": "1.5.1", 1229 | "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.1.tgz", 1230 | "integrity": "sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==", 1231 | "license": "MIT", 1232 | "dependencies": { 1233 | "@lezer/common": "^1.2.0", 1234 | "@lezer/highlight": "^1.1.3", 1235 | "@lezer/lr": "^1.3.0" 1236 | } 1237 | }, 1238 | "node_modules/@lezer/lr": { 1239 | "version": "1.4.2", 1240 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", 1241 | "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", 1242 | "license": "MIT", 1243 | "dependencies": { 1244 | "@lezer/common": "^1.0.0" 1245 | } 1246 | }, 1247 | "node_modules/@marijn/find-cluster-break": { 1248 | "version": "1.0.2", 1249 | "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", 1250 | "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", 1251 | "license": "MIT" 1252 | }, 1253 | "node_modules/@open-draft/deferred-promise": { 1254 | "version": "2.2.0", 1255 | "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", 1256 | "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", 1257 | "license": "MIT" 1258 | }, 1259 | "node_modules/@react-hook/intersection-observer": { 1260 | "version": "3.1.2", 1261 | "resolved": "https://registry.npmjs.org/@react-hook/intersection-observer/-/intersection-observer-3.1.2.tgz", 1262 | "integrity": "sha512-mWU3BMkmmzyYMSuhO9wu3eJVP21N8TcgYm9bZnTrMwuM818bEk+0NRM3hP+c/TqA9Ln5C7qE53p1H0QMtzYdvQ==", 1263 | "license": "MIT", 1264 | "dependencies": { 1265 | "@react-hook/passive-layout-effect": "^1.2.0", 1266 | "intersection-observer": "^0.10.0" 1267 | }, 1268 | "peerDependencies": { 1269 | "react": ">=16.8" 1270 | } 1271 | }, 1272 | "node_modules/@react-hook/passive-layout-effect": { 1273 | "version": "1.2.1", 1274 | "resolved": "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz", 1275 | "integrity": "sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==", 1276 | "license": "MIT", 1277 | "peerDependencies": { 1278 | "react": ">=16.8" 1279 | } 1280 | }, 1281 | "node_modules/@rollup/rollup-android-arm-eabi": { 1282 | "version": "4.40.0", 1283 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", 1284 | "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", 1285 | "cpu": [ 1286 | "arm" 1287 | ], 1288 | "dev": true, 1289 | "license": "MIT", 1290 | "optional": true, 1291 | "os": [ 1292 | "android" 1293 | ] 1294 | }, 1295 | "node_modules/@rollup/rollup-android-arm64": { 1296 | "version": "4.40.0", 1297 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", 1298 | "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", 1299 | "cpu": [ 1300 | "arm64" 1301 | ], 1302 | "dev": true, 1303 | "license": "MIT", 1304 | "optional": true, 1305 | "os": [ 1306 | "android" 1307 | ] 1308 | }, 1309 | "node_modules/@rollup/rollup-darwin-arm64": { 1310 | "version": "4.40.0", 1311 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", 1312 | "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", 1313 | "cpu": [ 1314 | "arm64" 1315 | ], 1316 | "dev": true, 1317 | "license": "MIT", 1318 | "optional": true, 1319 | "os": [ 1320 | "darwin" 1321 | ] 1322 | }, 1323 | "node_modules/@rollup/rollup-darwin-x64": { 1324 | "version": "4.40.0", 1325 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", 1326 | "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", 1327 | "cpu": [ 1328 | "x64" 1329 | ], 1330 | "dev": true, 1331 | "license": "MIT", 1332 | "optional": true, 1333 | "os": [ 1334 | "darwin" 1335 | ] 1336 | }, 1337 | "node_modules/@rollup/rollup-freebsd-arm64": { 1338 | "version": "4.40.0", 1339 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", 1340 | "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", 1341 | "cpu": [ 1342 | "arm64" 1343 | ], 1344 | "dev": true, 1345 | "license": "MIT", 1346 | "optional": true, 1347 | "os": [ 1348 | "freebsd" 1349 | ] 1350 | }, 1351 | "node_modules/@rollup/rollup-freebsd-x64": { 1352 | "version": "4.40.0", 1353 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", 1354 | "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", 1355 | "cpu": [ 1356 | "x64" 1357 | ], 1358 | "dev": true, 1359 | "license": "MIT", 1360 | "optional": true, 1361 | "os": [ 1362 | "freebsd" 1363 | ] 1364 | }, 1365 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 1366 | "version": "4.40.0", 1367 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", 1368 | "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", 1369 | "cpu": [ 1370 | "arm" 1371 | ], 1372 | "dev": true, 1373 | "license": "MIT", 1374 | "optional": true, 1375 | "os": [ 1376 | "linux" 1377 | ] 1378 | }, 1379 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 1380 | "version": "4.40.0", 1381 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", 1382 | "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", 1383 | "cpu": [ 1384 | "arm" 1385 | ], 1386 | "dev": true, 1387 | "license": "MIT", 1388 | "optional": true, 1389 | "os": [ 1390 | "linux" 1391 | ] 1392 | }, 1393 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 1394 | "version": "4.40.0", 1395 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", 1396 | "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", 1397 | "cpu": [ 1398 | "arm64" 1399 | ], 1400 | "dev": true, 1401 | "license": "MIT", 1402 | "optional": true, 1403 | "os": [ 1404 | "linux" 1405 | ] 1406 | }, 1407 | "node_modules/@rollup/rollup-linux-arm64-musl": { 1408 | "version": "4.40.0", 1409 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", 1410 | "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", 1411 | "cpu": [ 1412 | "arm64" 1413 | ], 1414 | "dev": true, 1415 | "license": "MIT", 1416 | "optional": true, 1417 | "os": [ 1418 | "linux" 1419 | ] 1420 | }, 1421 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 1422 | "version": "4.40.0", 1423 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", 1424 | "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", 1425 | "cpu": [ 1426 | "loong64" 1427 | ], 1428 | "dev": true, 1429 | "license": "MIT", 1430 | "optional": true, 1431 | "os": [ 1432 | "linux" 1433 | ] 1434 | }, 1435 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 1436 | "version": "4.40.0", 1437 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", 1438 | "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", 1439 | "cpu": [ 1440 | "ppc64" 1441 | ], 1442 | "dev": true, 1443 | "license": "MIT", 1444 | "optional": true, 1445 | "os": [ 1446 | "linux" 1447 | ] 1448 | }, 1449 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1450 | "version": "4.40.0", 1451 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", 1452 | "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", 1453 | "cpu": [ 1454 | "riscv64" 1455 | ], 1456 | "dev": true, 1457 | "license": "MIT", 1458 | "optional": true, 1459 | "os": [ 1460 | "linux" 1461 | ] 1462 | }, 1463 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 1464 | "version": "4.40.0", 1465 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", 1466 | "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", 1467 | "cpu": [ 1468 | "riscv64" 1469 | ], 1470 | "dev": true, 1471 | "license": "MIT", 1472 | "optional": true, 1473 | "os": [ 1474 | "linux" 1475 | ] 1476 | }, 1477 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 1478 | "version": "4.40.0", 1479 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", 1480 | "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", 1481 | "cpu": [ 1482 | "s390x" 1483 | ], 1484 | "dev": true, 1485 | "license": "MIT", 1486 | "optional": true, 1487 | "os": [ 1488 | "linux" 1489 | ] 1490 | }, 1491 | "node_modules/@rollup/rollup-linux-x64-gnu": { 1492 | "version": "4.40.0", 1493 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", 1494 | "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", 1495 | "cpu": [ 1496 | "x64" 1497 | ], 1498 | "dev": true, 1499 | "license": "MIT", 1500 | "optional": true, 1501 | "os": [ 1502 | "linux" 1503 | ] 1504 | }, 1505 | "node_modules/@rollup/rollup-linux-x64-musl": { 1506 | "version": "4.40.0", 1507 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", 1508 | "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", 1509 | "cpu": [ 1510 | "x64" 1511 | ], 1512 | "dev": true, 1513 | "license": "MIT", 1514 | "optional": true, 1515 | "os": [ 1516 | "linux" 1517 | ] 1518 | }, 1519 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1520 | "version": "4.40.0", 1521 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", 1522 | "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", 1523 | "cpu": [ 1524 | "arm64" 1525 | ], 1526 | "dev": true, 1527 | "license": "MIT", 1528 | "optional": true, 1529 | "os": [ 1530 | "win32" 1531 | ] 1532 | }, 1533 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1534 | "version": "4.40.0", 1535 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", 1536 | "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", 1537 | "cpu": [ 1538 | "ia32" 1539 | ], 1540 | "dev": true, 1541 | "license": "MIT", 1542 | "optional": true, 1543 | "os": [ 1544 | "win32" 1545 | ] 1546 | }, 1547 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1548 | "version": "4.40.0", 1549 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", 1550 | "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", 1551 | "cpu": [ 1552 | "x64" 1553 | ], 1554 | "dev": true, 1555 | "license": "MIT", 1556 | "optional": true, 1557 | "os": [ 1558 | "win32" 1559 | ] 1560 | }, 1561 | "node_modules/@stitches/core": { 1562 | "version": "1.2.8", 1563 | "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", 1564 | "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==", 1565 | "license": "MIT" 1566 | }, 1567 | "node_modules/@types/babel__core": { 1568 | "version": "7.20.5", 1569 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1570 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1571 | "dev": true, 1572 | "license": "MIT", 1573 | "dependencies": { 1574 | "@babel/parser": "^7.20.7", 1575 | "@babel/types": "^7.20.7", 1576 | "@types/babel__generator": "*", 1577 | "@types/babel__template": "*", 1578 | "@types/babel__traverse": "*" 1579 | } 1580 | }, 1581 | "node_modules/@types/babel__generator": { 1582 | "version": "7.27.0", 1583 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", 1584 | "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 1585 | "dev": true, 1586 | "license": "MIT", 1587 | "dependencies": { 1588 | "@babel/types": "^7.0.0" 1589 | } 1590 | }, 1591 | "node_modules/@types/babel__template": { 1592 | "version": "7.4.4", 1593 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1594 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1595 | "dev": true, 1596 | "license": "MIT", 1597 | "dependencies": { 1598 | "@babel/parser": "^7.1.0", 1599 | "@babel/types": "^7.0.0" 1600 | } 1601 | }, 1602 | "node_modules/@types/babel__traverse": { 1603 | "version": "7.20.7", 1604 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", 1605 | "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", 1606 | "dev": true, 1607 | "license": "MIT", 1608 | "dependencies": { 1609 | "@babel/types": "^7.20.7" 1610 | } 1611 | }, 1612 | "node_modules/@types/estree": { 1613 | "version": "1.0.7", 1614 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 1615 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 1616 | "dev": true, 1617 | "license": "MIT" 1618 | }, 1619 | "node_modules/@types/json-schema": { 1620 | "version": "7.0.15", 1621 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1622 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1623 | "dev": true, 1624 | "license": "MIT" 1625 | }, 1626 | "node_modules/@types/react": { 1627 | "version": "19.1.2", 1628 | "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", 1629 | "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", 1630 | "dev": true, 1631 | "license": "MIT", 1632 | "dependencies": { 1633 | "csstype": "^3.0.2" 1634 | } 1635 | }, 1636 | "node_modules/@types/react-dom": { 1637 | "version": "19.1.2", 1638 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz", 1639 | "integrity": "sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==", 1640 | "dev": true, 1641 | "license": "MIT", 1642 | "peerDependencies": { 1643 | "@types/react": "^19.0.0" 1644 | } 1645 | }, 1646 | "node_modules/@vitejs/plugin-react": { 1647 | "version": "4.4.1", 1648 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", 1649 | "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", 1650 | "dev": true, 1651 | "license": "MIT", 1652 | "dependencies": { 1653 | "@babel/core": "^7.26.10", 1654 | "@babel/plugin-transform-react-jsx-self": "^7.25.9", 1655 | "@babel/plugin-transform-react-jsx-source": "^7.25.9", 1656 | "@types/babel__core": "^7.20.5", 1657 | "react-refresh": "^0.17.0" 1658 | }, 1659 | "engines": { 1660 | "node": "^14.18.0 || >=16.0.0" 1661 | }, 1662 | "peerDependencies": { 1663 | "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" 1664 | } 1665 | }, 1666 | "node_modules/acorn": { 1667 | "version": "8.14.1", 1668 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", 1669 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", 1670 | "dev": true, 1671 | "license": "MIT", 1672 | "bin": { 1673 | "acorn": "bin/acorn" 1674 | }, 1675 | "engines": { 1676 | "node": ">=0.4.0" 1677 | } 1678 | }, 1679 | "node_modules/acorn-jsx": { 1680 | "version": "5.3.2", 1681 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1682 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1683 | "dev": true, 1684 | "license": "MIT", 1685 | "peerDependencies": { 1686 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1687 | } 1688 | }, 1689 | "node_modules/ajv": { 1690 | "version": "6.12.6", 1691 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1692 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1693 | "dev": true, 1694 | "license": "MIT", 1695 | "dependencies": { 1696 | "fast-deep-equal": "^3.1.1", 1697 | "fast-json-stable-stringify": "^2.0.0", 1698 | "json-schema-traverse": "^0.4.1", 1699 | "uri-js": "^4.2.2" 1700 | }, 1701 | "funding": { 1702 | "type": "github", 1703 | "url": "https://github.com/sponsors/epoberezkin" 1704 | } 1705 | }, 1706 | "node_modules/anser": { 1707 | "version": "2.3.2", 1708 | "resolved": "https://registry.npmjs.org/anser/-/anser-2.3.2.tgz", 1709 | "integrity": "sha512-PMqBCBvrOVDRqLGooQb+z+t1Q0PiPyurUQeZRR5uHBOVZcW8B04KMmnT12USnhpNX2wCPagWzLVppQMUG3u0Dw==", 1710 | "license": "MIT" 1711 | }, 1712 | "node_modules/ansi-styles": { 1713 | "version": "4.3.0", 1714 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1715 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1716 | "dev": true, 1717 | "license": "MIT", 1718 | "dependencies": { 1719 | "color-convert": "^2.0.1" 1720 | }, 1721 | "engines": { 1722 | "node": ">=8" 1723 | }, 1724 | "funding": { 1725 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1726 | } 1727 | }, 1728 | "node_modules/argparse": { 1729 | "version": "2.0.1", 1730 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1731 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1732 | "dev": true, 1733 | "license": "Python-2.0" 1734 | }, 1735 | "node_modules/autoprefixer": { 1736 | "version": "10.4.21", 1737 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", 1738 | "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", 1739 | "funding": [ 1740 | { 1741 | "type": "opencollective", 1742 | "url": "https://opencollective.com/postcss/" 1743 | }, 1744 | { 1745 | "type": "tidelift", 1746 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1747 | }, 1748 | { 1749 | "type": "github", 1750 | "url": "https://github.com/sponsors/ai" 1751 | } 1752 | ], 1753 | "license": "MIT", 1754 | "dependencies": { 1755 | "browserslist": "^4.24.4", 1756 | "caniuse-lite": "^1.0.30001702", 1757 | "fraction.js": "^4.3.7", 1758 | "normalize-range": "^0.1.2", 1759 | "picocolors": "^1.1.1", 1760 | "postcss-value-parser": "^4.2.0" 1761 | }, 1762 | "bin": { 1763 | "autoprefixer": "bin/autoprefixer" 1764 | }, 1765 | "engines": { 1766 | "node": "^10 || ^12 || >=14" 1767 | }, 1768 | "peerDependencies": { 1769 | "postcss": "^8.1.0" 1770 | } 1771 | }, 1772 | "node_modules/balanced-match": { 1773 | "version": "1.0.2", 1774 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1775 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1776 | "dev": true, 1777 | "license": "MIT" 1778 | }, 1779 | "node_modules/base64-js": { 1780 | "version": "1.5.1", 1781 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1782 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 1783 | "funding": [ 1784 | { 1785 | "type": "github", 1786 | "url": "https://github.com/sponsors/feross" 1787 | }, 1788 | { 1789 | "type": "patreon", 1790 | "url": "https://www.patreon.com/feross" 1791 | }, 1792 | { 1793 | "type": "consulting", 1794 | "url": "https://feross.org/support" 1795 | } 1796 | ], 1797 | "license": "MIT" 1798 | }, 1799 | "node_modules/brace-expansion": { 1800 | "version": "1.1.11", 1801 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1802 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1803 | "dev": true, 1804 | "license": "MIT", 1805 | "dependencies": { 1806 | "balanced-match": "^1.0.0", 1807 | "concat-map": "0.0.1" 1808 | } 1809 | }, 1810 | "node_modules/browserslist": { 1811 | "version": "4.24.4", 1812 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1813 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1814 | "funding": [ 1815 | { 1816 | "type": "opencollective", 1817 | "url": "https://opencollective.com/browserslist" 1818 | }, 1819 | { 1820 | "type": "tidelift", 1821 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1822 | }, 1823 | { 1824 | "type": "github", 1825 | "url": "https://github.com/sponsors/ai" 1826 | } 1827 | ], 1828 | "license": "MIT", 1829 | "dependencies": { 1830 | "caniuse-lite": "^1.0.30001688", 1831 | "electron-to-chromium": "^1.5.73", 1832 | "node-releases": "^2.0.19", 1833 | "update-browserslist-db": "^1.1.1" 1834 | }, 1835 | "bin": { 1836 | "browserslist": "cli.js" 1837 | }, 1838 | "engines": { 1839 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1840 | } 1841 | }, 1842 | "node_modules/buffer": { 1843 | "version": "6.0.3", 1844 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 1845 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 1846 | "funding": [ 1847 | { 1848 | "type": "github", 1849 | "url": "https://github.com/sponsors/feross" 1850 | }, 1851 | { 1852 | "type": "patreon", 1853 | "url": "https://www.patreon.com/feross" 1854 | }, 1855 | { 1856 | "type": "consulting", 1857 | "url": "https://feross.org/support" 1858 | } 1859 | ], 1860 | "license": "MIT", 1861 | "dependencies": { 1862 | "base64-js": "^1.3.1", 1863 | "ieee754": "^1.2.1" 1864 | } 1865 | }, 1866 | "node_modules/callsites": { 1867 | "version": "3.1.0", 1868 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1869 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1870 | "dev": true, 1871 | "license": "MIT", 1872 | "engines": { 1873 | "node": ">=6" 1874 | } 1875 | }, 1876 | "node_modules/caniuse-lite": { 1877 | "version": "1.0.30001715", 1878 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", 1879 | "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", 1880 | "funding": [ 1881 | { 1882 | "type": "opencollective", 1883 | "url": "https://opencollective.com/browserslist" 1884 | }, 1885 | { 1886 | "type": "tidelift", 1887 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1888 | }, 1889 | { 1890 | "type": "github", 1891 | "url": "https://github.com/sponsors/ai" 1892 | } 1893 | ], 1894 | "license": "CC-BY-4.0" 1895 | }, 1896 | "node_modules/chalk": { 1897 | "version": "4.1.2", 1898 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1899 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1900 | "dev": true, 1901 | "license": "MIT", 1902 | "dependencies": { 1903 | "ansi-styles": "^4.1.0", 1904 | "supports-color": "^7.1.0" 1905 | }, 1906 | "engines": { 1907 | "node": ">=10" 1908 | }, 1909 | "funding": { 1910 | "url": "https://github.com/chalk/chalk?sponsor=1" 1911 | } 1912 | }, 1913 | "node_modules/clean-set": { 1914 | "version": "1.1.2", 1915 | "resolved": "https://registry.npmjs.org/clean-set/-/clean-set-1.1.2.tgz", 1916 | "integrity": "sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==", 1917 | "license": "MIT" 1918 | }, 1919 | "node_modules/color-convert": { 1920 | "version": "2.0.1", 1921 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1922 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1923 | "dev": true, 1924 | "license": "MIT", 1925 | "dependencies": { 1926 | "color-name": "~1.1.4" 1927 | }, 1928 | "engines": { 1929 | "node": ">=7.0.0" 1930 | } 1931 | }, 1932 | "node_modules/color-name": { 1933 | "version": "1.1.4", 1934 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1935 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1936 | "dev": true, 1937 | "license": "MIT" 1938 | }, 1939 | "node_modules/concat-map": { 1940 | "version": "0.0.1", 1941 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1942 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1943 | "dev": true, 1944 | "license": "MIT" 1945 | }, 1946 | "node_modules/convert-source-map": { 1947 | "version": "2.0.0", 1948 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1949 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1950 | "dev": true, 1951 | "license": "MIT" 1952 | }, 1953 | "node_modules/crelt": { 1954 | "version": "1.0.6", 1955 | "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", 1956 | "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", 1957 | "license": "MIT" 1958 | }, 1959 | "node_modules/cross-spawn": { 1960 | "version": "7.0.6", 1961 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1962 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1963 | "dev": true, 1964 | "license": "MIT", 1965 | "dependencies": { 1966 | "path-key": "^3.1.0", 1967 | "shebang-command": "^2.0.0", 1968 | "which": "^2.0.1" 1969 | }, 1970 | "engines": { 1971 | "node": ">= 8" 1972 | } 1973 | }, 1974 | "node_modules/csstype": { 1975 | "version": "3.1.3", 1976 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1977 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1978 | "dev": true, 1979 | "license": "MIT" 1980 | }, 1981 | "node_modules/d": { 1982 | "version": "1.0.2", 1983 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", 1984 | "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", 1985 | "license": "ISC", 1986 | "dependencies": { 1987 | "es5-ext": "^0.10.64", 1988 | "type": "^2.7.2" 1989 | }, 1990 | "engines": { 1991 | "node": ">=0.12" 1992 | } 1993 | }, 1994 | "node_modules/debug": { 1995 | "version": "4.4.0", 1996 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1997 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1998 | "dev": true, 1999 | "license": "MIT", 2000 | "dependencies": { 2001 | "ms": "^2.1.3" 2002 | }, 2003 | "engines": { 2004 | "node": ">=6.0" 2005 | }, 2006 | "peerDependenciesMeta": { 2007 | "supports-color": { 2008 | "optional": true 2009 | } 2010 | } 2011 | }, 2012 | "node_modules/deep-is": { 2013 | "version": "0.1.4", 2014 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2015 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2016 | "dev": true, 2017 | "license": "MIT" 2018 | }, 2019 | "node_modules/dequal": { 2020 | "version": "2.0.3", 2021 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 2022 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 2023 | "license": "MIT", 2024 | "engines": { 2025 | "node": ">=6" 2026 | } 2027 | }, 2028 | "node_modules/dotenv": { 2029 | "version": "16.5.0", 2030 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", 2031 | "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", 2032 | "license": "BSD-2-Clause", 2033 | "engines": { 2034 | "node": ">=12" 2035 | }, 2036 | "funding": { 2037 | "url": "https://dotenvx.com" 2038 | } 2039 | }, 2040 | "node_modules/electron-to-chromium": { 2041 | "version": "1.5.143", 2042 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.143.tgz", 2043 | "integrity": "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==", 2044 | "license": "ISC" 2045 | }, 2046 | "node_modules/es5-ext": { 2047 | "version": "0.10.64", 2048 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", 2049 | "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", 2050 | "hasInstallScript": true, 2051 | "license": "ISC", 2052 | "dependencies": { 2053 | "es6-iterator": "^2.0.3", 2054 | "es6-symbol": "^3.1.3", 2055 | "esniff": "^2.0.1", 2056 | "next-tick": "^1.1.0" 2057 | }, 2058 | "engines": { 2059 | "node": ">=0.10" 2060 | } 2061 | }, 2062 | "node_modules/es6-iterator": { 2063 | "version": "2.0.3", 2064 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 2065 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 2066 | "license": "MIT", 2067 | "dependencies": { 2068 | "d": "1", 2069 | "es5-ext": "^0.10.35", 2070 | "es6-symbol": "^3.1.1" 2071 | } 2072 | }, 2073 | "node_modules/es6-symbol": { 2074 | "version": "3.1.4", 2075 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", 2076 | "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", 2077 | "license": "ISC", 2078 | "dependencies": { 2079 | "d": "^1.0.2", 2080 | "ext": "^1.7.0" 2081 | }, 2082 | "engines": { 2083 | "node": ">=0.12" 2084 | } 2085 | }, 2086 | "node_modules/esbuild": { 2087 | "version": "0.25.3", 2088 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", 2089 | "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", 2090 | "dev": true, 2091 | "hasInstallScript": true, 2092 | "license": "MIT", 2093 | "bin": { 2094 | "esbuild": "bin/esbuild" 2095 | }, 2096 | "engines": { 2097 | "node": ">=18" 2098 | }, 2099 | "optionalDependencies": { 2100 | "@esbuild/aix-ppc64": "0.25.3", 2101 | "@esbuild/android-arm": "0.25.3", 2102 | "@esbuild/android-arm64": "0.25.3", 2103 | "@esbuild/android-x64": "0.25.3", 2104 | "@esbuild/darwin-arm64": "0.25.3", 2105 | "@esbuild/darwin-x64": "0.25.3", 2106 | "@esbuild/freebsd-arm64": "0.25.3", 2107 | "@esbuild/freebsd-x64": "0.25.3", 2108 | "@esbuild/linux-arm": "0.25.3", 2109 | "@esbuild/linux-arm64": "0.25.3", 2110 | "@esbuild/linux-ia32": "0.25.3", 2111 | "@esbuild/linux-loong64": "0.25.3", 2112 | "@esbuild/linux-mips64el": "0.25.3", 2113 | "@esbuild/linux-ppc64": "0.25.3", 2114 | "@esbuild/linux-riscv64": "0.25.3", 2115 | "@esbuild/linux-s390x": "0.25.3", 2116 | "@esbuild/linux-x64": "0.25.3", 2117 | "@esbuild/netbsd-arm64": "0.25.3", 2118 | "@esbuild/netbsd-x64": "0.25.3", 2119 | "@esbuild/openbsd-arm64": "0.25.3", 2120 | "@esbuild/openbsd-x64": "0.25.3", 2121 | "@esbuild/sunos-x64": "0.25.3", 2122 | "@esbuild/win32-arm64": "0.25.3", 2123 | "@esbuild/win32-ia32": "0.25.3", 2124 | "@esbuild/win32-x64": "0.25.3" 2125 | } 2126 | }, 2127 | "node_modules/escalade": { 2128 | "version": "3.2.0", 2129 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2130 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2131 | "license": "MIT", 2132 | "engines": { 2133 | "node": ">=6" 2134 | } 2135 | }, 2136 | "node_modules/escape-carriage": { 2137 | "version": "1.3.1", 2138 | "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.1.tgz", 2139 | "integrity": "sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==", 2140 | "license": "MIT" 2141 | }, 2142 | "node_modules/escape-string-regexp": { 2143 | "version": "4.0.0", 2144 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2145 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2146 | "dev": true, 2147 | "license": "MIT", 2148 | "engines": { 2149 | "node": ">=10" 2150 | }, 2151 | "funding": { 2152 | "url": "https://github.com/sponsors/sindresorhus" 2153 | } 2154 | }, 2155 | "node_modules/eslint": { 2156 | "version": "9.25.1", 2157 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", 2158 | "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", 2159 | "dev": true, 2160 | "license": "MIT", 2161 | "dependencies": { 2162 | "@eslint-community/eslint-utils": "^4.2.0", 2163 | "@eslint-community/regexpp": "^4.12.1", 2164 | "@eslint/config-array": "^0.20.0", 2165 | "@eslint/config-helpers": "^0.2.1", 2166 | "@eslint/core": "^0.13.0", 2167 | "@eslint/eslintrc": "^3.3.1", 2168 | "@eslint/js": "9.25.1", 2169 | "@eslint/plugin-kit": "^0.2.8", 2170 | "@humanfs/node": "^0.16.6", 2171 | "@humanwhocodes/module-importer": "^1.0.1", 2172 | "@humanwhocodes/retry": "^0.4.2", 2173 | "@types/estree": "^1.0.6", 2174 | "@types/json-schema": "^7.0.15", 2175 | "ajv": "^6.12.4", 2176 | "chalk": "^4.0.0", 2177 | "cross-spawn": "^7.0.6", 2178 | "debug": "^4.3.2", 2179 | "escape-string-regexp": "^4.0.0", 2180 | "eslint-scope": "^8.3.0", 2181 | "eslint-visitor-keys": "^4.2.0", 2182 | "espree": "^10.3.0", 2183 | "esquery": "^1.5.0", 2184 | "esutils": "^2.0.2", 2185 | "fast-deep-equal": "^3.1.3", 2186 | "file-entry-cache": "^8.0.0", 2187 | "find-up": "^5.0.0", 2188 | "glob-parent": "^6.0.2", 2189 | "ignore": "^5.2.0", 2190 | "imurmurhash": "^0.1.4", 2191 | "is-glob": "^4.0.0", 2192 | "json-stable-stringify-without-jsonify": "^1.0.1", 2193 | "lodash.merge": "^4.6.2", 2194 | "minimatch": "^3.1.2", 2195 | "natural-compare": "^1.4.0", 2196 | "optionator": "^0.9.3" 2197 | }, 2198 | "bin": { 2199 | "eslint": "bin/eslint.js" 2200 | }, 2201 | "engines": { 2202 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2203 | }, 2204 | "funding": { 2205 | "url": "https://eslint.org/donate" 2206 | }, 2207 | "peerDependencies": { 2208 | "jiti": "*" 2209 | }, 2210 | "peerDependenciesMeta": { 2211 | "jiti": { 2212 | "optional": true 2213 | } 2214 | } 2215 | }, 2216 | "node_modules/eslint-plugin-react-hooks": { 2217 | "version": "5.2.0", 2218 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 2219 | "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 2220 | "dev": true, 2221 | "license": "MIT", 2222 | "engines": { 2223 | "node": ">=10" 2224 | }, 2225 | "peerDependencies": { 2226 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 2227 | } 2228 | }, 2229 | "node_modules/eslint-plugin-react-refresh": { 2230 | "version": "0.4.20", 2231 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", 2232 | "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", 2233 | "dev": true, 2234 | "license": "MIT", 2235 | "peerDependencies": { 2236 | "eslint": ">=8.40" 2237 | } 2238 | }, 2239 | "node_modules/eslint-scope": { 2240 | "version": "8.3.0", 2241 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", 2242 | "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", 2243 | "dev": true, 2244 | "license": "BSD-2-Clause", 2245 | "dependencies": { 2246 | "esrecurse": "^4.3.0", 2247 | "estraverse": "^5.2.0" 2248 | }, 2249 | "engines": { 2250 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2251 | }, 2252 | "funding": { 2253 | "url": "https://opencollective.com/eslint" 2254 | } 2255 | }, 2256 | "node_modules/eslint-visitor-keys": { 2257 | "version": "4.2.0", 2258 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 2259 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 2260 | "dev": true, 2261 | "license": "Apache-2.0", 2262 | "engines": { 2263 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2264 | }, 2265 | "funding": { 2266 | "url": "https://opencollective.com/eslint" 2267 | } 2268 | }, 2269 | "node_modules/esniff": { 2270 | "version": "2.0.1", 2271 | "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", 2272 | "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", 2273 | "license": "ISC", 2274 | "dependencies": { 2275 | "d": "^1.0.1", 2276 | "es5-ext": "^0.10.62", 2277 | "event-emitter": "^0.3.5", 2278 | "type": "^2.7.2" 2279 | }, 2280 | "engines": { 2281 | "node": ">=0.10" 2282 | } 2283 | }, 2284 | "node_modules/espree": { 2285 | "version": "10.3.0", 2286 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", 2287 | "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", 2288 | "dev": true, 2289 | "license": "BSD-2-Clause", 2290 | "dependencies": { 2291 | "acorn": "^8.14.0", 2292 | "acorn-jsx": "^5.3.2", 2293 | "eslint-visitor-keys": "^4.2.0" 2294 | }, 2295 | "engines": { 2296 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2297 | }, 2298 | "funding": { 2299 | "url": "https://opencollective.com/eslint" 2300 | } 2301 | }, 2302 | "node_modules/esquery": { 2303 | "version": "1.6.0", 2304 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 2305 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 2306 | "dev": true, 2307 | "license": "BSD-3-Clause", 2308 | "dependencies": { 2309 | "estraverse": "^5.1.0" 2310 | }, 2311 | "engines": { 2312 | "node": ">=0.10" 2313 | } 2314 | }, 2315 | "node_modules/esrecurse": { 2316 | "version": "4.3.0", 2317 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2318 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2319 | "dev": true, 2320 | "license": "BSD-2-Clause", 2321 | "dependencies": { 2322 | "estraverse": "^5.2.0" 2323 | }, 2324 | "engines": { 2325 | "node": ">=4.0" 2326 | } 2327 | }, 2328 | "node_modules/estraverse": { 2329 | "version": "5.3.0", 2330 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2331 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2332 | "dev": true, 2333 | "license": "BSD-2-Clause", 2334 | "engines": { 2335 | "node": ">=4.0" 2336 | } 2337 | }, 2338 | "node_modules/esutils": { 2339 | "version": "2.0.3", 2340 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2341 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2342 | "dev": true, 2343 | "license": "BSD-2-Clause", 2344 | "engines": { 2345 | "node": ">=0.10.0" 2346 | } 2347 | }, 2348 | "node_modules/event-emitter": { 2349 | "version": "0.3.5", 2350 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 2351 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 2352 | "license": "MIT", 2353 | "dependencies": { 2354 | "d": "1", 2355 | "es5-ext": "~0.10.14" 2356 | } 2357 | }, 2358 | "node_modules/ext": { 2359 | "version": "1.7.0", 2360 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", 2361 | "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", 2362 | "license": "ISC", 2363 | "dependencies": { 2364 | "type": "^2.7.2" 2365 | } 2366 | }, 2367 | "node_modules/fast-deep-equal": { 2368 | "version": "3.1.3", 2369 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2370 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2371 | "dev": true, 2372 | "license": "MIT" 2373 | }, 2374 | "node_modules/fast-json-stable-stringify": { 2375 | "version": "2.1.0", 2376 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2377 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2378 | "dev": true, 2379 | "license": "MIT" 2380 | }, 2381 | "node_modules/fast-levenshtein": { 2382 | "version": "2.0.6", 2383 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2384 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2385 | "dev": true, 2386 | "license": "MIT" 2387 | }, 2388 | "node_modules/fdir": { 2389 | "version": "6.4.4", 2390 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", 2391 | "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", 2392 | "dev": true, 2393 | "license": "MIT", 2394 | "peerDependencies": { 2395 | "picomatch": "^3 || ^4" 2396 | }, 2397 | "peerDependenciesMeta": { 2398 | "picomatch": { 2399 | "optional": true 2400 | } 2401 | } 2402 | }, 2403 | "node_modules/file-entry-cache": { 2404 | "version": "8.0.0", 2405 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 2406 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 2407 | "dev": true, 2408 | "license": "MIT", 2409 | "dependencies": { 2410 | "flat-cache": "^4.0.0" 2411 | }, 2412 | "engines": { 2413 | "node": ">=16.0.0" 2414 | } 2415 | }, 2416 | "node_modules/find-up": { 2417 | "version": "5.0.0", 2418 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2419 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2420 | "dev": true, 2421 | "license": "MIT", 2422 | "dependencies": { 2423 | "locate-path": "^6.0.0", 2424 | "path-exists": "^4.0.0" 2425 | }, 2426 | "engines": { 2427 | "node": ">=10" 2428 | }, 2429 | "funding": { 2430 | "url": "https://github.com/sponsors/sindresorhus" 2431 | } 2432 | }, 2433 | "node_modules/flat-cache": { 2434 | "version": "4.0.1", 2435 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 2436 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 2437 | "dev": true, 2438 | "license": "MIT", 2439 | "dependencies": { 2440 | "flatted": "^3.2.9", 2441 | "keyv": "^4.5.4" 2442 | }, 2443 | "engines": { 2444 | "node": ">=16" 2445 | } 2446 | }, 2447 | "node_modules/flatted": { 2448 | "version": "3.3.3", 2449 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 2450 | "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 2451 | "dev": true, 2452 | "license": "ISC" 2453 | }, 2454 | "node_modules/fraction.js": { 2455 | "version": "4.3.7", 2456 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 2457 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 2458 | "license": "MIT", 2459 | "engines": { 2460 | "node": "*" 2461 | }, 2462 | "funding": { 2463 | "type": "patreon", 2464 | "url": "https://github.com/sponsors/rawify" 2465 | } 2466 | }, 2467 | "node_modules/fsevents": { 2468 | "version": "2.3.3", 2469 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2470 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2471 | "dev": true, 2472 | "hasInstallScript": true, 2473 | "license": "MIT", 2474 | "optional": true, 2475 | "os": [ 2476 | "darwin" 2477 | ], 2478 | "engines": { 2479 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2480 | } 2481 | }, 2482 | "node_modules/gensync": { 2483 | "version": "1.0.0-beta.2", 2484 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2485 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2486 | "dev": true, 2487 | "license": "MIT", 2488 | "engines": { 2489 | "node": ">=6.9.0" 2490 | } 2491 | }, 2492 | "node_modules/glob-parent": { 2493 | "version": "6.0.2", 2494 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2495 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2496 | "dev": true, 2497 | "license": "ISC", 2498 | "dependencies": { 2499 | "is-glob": "^4.0.3" 2500 | }, 2501 | "engines": { 2502 | "node": ">=10.13.0" 2503 | } 2504 | }, 2505 | "node_modules/globals": { 2506 | "version": "16.0.0", 2507 | "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", 2508 | "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", 2509 | "dev": true, 2510 | "license": "MIT", 2511 | "engines": { 2512 | "node": ">=18" 2513 | }, 2514 | "funding": { 2515 | "url": "https://github.com/sponsors/sindresorhus" 2516 | } 2517 | }, 2518 | "node_modules/has-flag": { 2519 | "version": "4.0.0", 2520 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2521 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2522 | "dev": true, 2523 | "license": "MIT", 2524 | "engines": { 2525 | "node": ">=8" 2526 | } 2527 | }, 2528 | "node_modules/ieee754": { 2529 | "version": "1.2.1", 2530 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2531 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 2532 | "funding": [ 2533 | { 2534 | "type": "github", 2535 | "url": "https://github.com/sponsors/feross" 2536 | }, 2537 | { 2538 | "type": "patreon", 2539 | "url": "https://www.patreon.com/feross" 2540 | }, 2541 | { 2542 | "type": "consulting", 2543 | "url": "https://feross.org/support" 2544 | } 2545 | ], 2546 | "license": "BSD-3-Clause" 2547 | }, 2548 | "node_modules/ignore": { 2549 | "version": "5.3.2", 2550 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 2551 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 2552 | "dev": true, 2553 | "license": "MIT", 2554 | "engines": { 2555 | "node": ">= 4" 2556 | } 2557 | }, 2558 | "node_modules/import-fresh": { 2559 | "version": "3.3.1", 2560 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2561 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2562 | "dev": true, 2563 | "license": "MIT", 2564 | "dependencies": { 2565 | "parent-module": "^1.0.0", 2566 | "resolve-from": "^4.0.0" 2567 | }, 2568 | "engines": { 2569 | "node": ">=6" 2570 | }, 2571 | "funding": { 2572 | "url": "https://github.com/sponsors/sindresorhus" 2573 | } 2574 | }, 2575 | "node_modules/imurmurhash": { 2576 | "version": "0.1.4", 2577 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2578 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2579 | "dev": true, 2580 | "license": "MIT", 2581 | "engines": { 2582 | "node": ">=0.8.19" 2583 | } 2584 | }, 2585 | "node_modules/intersection-observer": { 2586 | "version": "0.10.0", 2587 | "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.10.0.tgz", 2588 | "integrity": "sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==", 2589 | "license": "W3C-20150513" 2590 | }, 2591 | "node_modules/is-extglob": { 2592 | "version": "2.1.1", 2593 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2594 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2595 | "dev": true, 2596 | "license": "MIT", 2597 | "engines": { 2598 | "node": ">=0.10.0" 2599 | } 2600 | }, 2601 | "node_modules/is-glob": { 2602 | "version": "4.0.3", 2603 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2604 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2605 | "dev": true, 2606 | "license": "MIT", 2607 | "dependencies": { 2608 | "is-extglob": "^2.1.1" 2609 | }, 2610 | "engines": { 2611 | "node": ">=0.10.0" 2612 | } 2613 | }, 2614 | "node_modules/isexe": { 2615 | "version": "2.0.0", 2616 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2617 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2618 | "dev": true, 2619 | "license": "ISC" 2620 | }, 2621 | "node_modules/js-tokens": { 2622 | "version": "4.0.0", 2623 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2624 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2625 | "dev": true, 2626 | "license": "MIT" 2627 | }, 2628 | "node_modules/js-yaml": { 2629 | "version": "4.1.0", 2630 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2631 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2632 | "dev": true, 2633 | "license": "MIT", 2634 | "dependencies": { 2635 | "argparse": "^2.0.1" 2636 | }, 2637 | "bin": { 2638 | "js-yaml": "bin/js-yaml.js" 2639 | } 2640 | }, 2641 | "node_modules/jsesc": { 2642 | "version": "3.1.0", 2643 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 2644 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 2645 | "dev": true, 2646 | "license": "MIT", 2647 | "bin": { 2648 | "jsesc": "bin/jsesc" 2649 | }, 2650 | "engines": { 2651 | "node": ">=6" 2652 | } 2653 | }, 2654 | "node_modules/json-buffer": { 2655 | "version": "3.0.1", 2656 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2657 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2658 | "dev": true, 2659 | "license": "MIT" 2660 | }, 2661 | "node_modules/json-schema-traverse": { 2662 | "version": "0.4.1", 2663 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2664 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2665 | "dev": true, 2666 | "license": "MIT" 2667 | }, 2668 | "node_modules/json-stable-stringify-without-jsonify": { 2669 | "version": "1.0.1", 2670 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2671 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2672 | "dev": true, 2673 | "license": "MIT" 2674 | }, 2675 | "node_modules/json5": { 2676 | "version": "2.2.3", 2677 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2678 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2679 | "dev": true, 2680 | "license": "MIT", 2681 | "bin": { 2682 | "json5": "lib/cli.js" 2683 | }, 2684 | "engines": { 2685 | "node": ">=6" 2686 | } 2687 | }, 2688 | "node_modules/keyv": { 2689 | "version": "4.5.4", 2690 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2691 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2692 | "dev": true, 2693 | "license": "MIT", 2694 | "dependencies": { 2695 | "json-buffer": "3.0.1" 2696 | } 2697 | }, 2698 | "node_modules/levn": { 2699 | "version": "0.4.1", 2700 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2701 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2702 | "dev": true, 2703 | "license": "MIT", 2704 | "dependencies": { 2705 | "prelude-ls": "^1.2.1", 2706 | "type-check": "~0.4.0" 2707 | }, 2708 | "engines": { 2709 | "node": ">= 0.8.0" 2710 | } 2711 | }, 2712 | "node_modules/locate-path": { 2713 | "version": "6.0.0", 2714 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2715 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2716 | "dev": true, 2717 | "license": "MIT", 2718 | "dependencies": { 2719 | "p-locate": "^5.0.0" 2720 | }, 2721 | "engines": { 2722 | "node": ">=10" 2723 | }, 2724 | "funding": { 2725 | "url": "https://github.com/sponsors/sindresorhus" 2726 | } 2727 | }, 2728 | "node_modules/lodash.merge": { 2729 | "version": "4.6.2", 2730 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2731 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2732 | "dev": true, 2733 | "license": "MIT" 2734 | }, 2735 | "node_modules/lru-cache": { 2736 | "version": "5.1.1", 2737 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2738 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2739 | "dev": true, 2740 | "license": "ISC", 2741 | "dependencies": { 2742 | "yallist": "^3.0.2" 2743 | } 2744 | }, 2745 | "node_modules/lz-string": { 2746 | "version": "1.5.0", 2747 | "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", 2748 | "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", 2749 | "license": "MIT", 2750 | "bin": { 2751 | "lz-string": "bin/bin.js" 2752 | } 2753 | }, 2754 | "node_modules/mime-db": { 2755 | "version": "1.54.0", 2756 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", 2757 | "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", 2758 | "license": "MIT", 2759 | "engines": { 2760 | "node": ">= 0.6" 2761 | } 2762 | }, 2763 | "node_modules/minimatch": { 2764 | "version": "3.1.2", 2765 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2766 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2767 | "dev": true, 2768 | "license": "ISC", 2769 | "dependencies": { 2770 | "brace-expansion": "^1.1.7" 2771 | }, 2772 | "engines": { 2773 | "node": "*" 2774 | } 2775 | }, 2776 | "node_modules/ms": { 2777 | "version": "2.1.3", 2778 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2779 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2780 | "dev": true, 2781 | "license": "MIT" 2782 | }, 2783 | "node_modules/nanoid": { 2784 | "version": "3.3.11", 2785 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2786 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2787 | "funding": [ 2788 | { 2789 | "type": "github", 2790 | "url": "https://github.com/sponsors/ai" 2791 | } 2792 | ], 2793 | "license": "MIT", 2794 | "bin": { 2795 | "nanoid": "bin/nanoid.cjs" 2796 | }, 2797 | "engines": { 2798 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2799 | } 2800 | }, 2801 | "node_modules/natural-compare": { 2802 | "version": "1.4.0", 2803 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2804 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2805 | "dev": true, 2806 | "license": "MIT" 2807 | }, 2808 | "node_modules/next-tick": { 2809 | "version": "1.1.0", 2810 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 2811 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", 2812 | "license": "ISC" 2813 | }, 2814 | "node_modules/node-releases": { 2815 | "version": "2.0.19", 2816 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 2817 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 2818 | "license": "MIT" 2819 | }, 2820 | "node_modules/normalize-range": { 2821 | "version": "0.1.2", 2822 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 2823 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 2824 | "license": "MIT", 2825 | "engines": { 2826 | "node": ">=0.10.0" 2827 | } 2828 | }, 2829 | "node_modules/optionator": { 2830 | "version": "0.9.4", 2831 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 2832 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 2833 | "dev": true, 2834 | "license": "MIT", 2835 | "dependencies": { 2836 | "deep-is": "^0.1.3", 2837 | "fast-levenshtein": "^2.0.6", 2838 | "levn": "^0.4.1", 2839 | "prelude-ls": "^1.2.1", 2840 | "type-check": "^0.4.0", 2841 | "word-wrap": "^1.2.5" 2842 | }, 2843 | "engines": { 2844 | "node": ">= 0.8.0" 2845 | } 2846 | }, 2847 | "node_modules/outvariant": { 2848 | "version": "1.4.0", 2849 | "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", 2850 | "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", 2851 | "license": "MIT" 2852 | }, 2853 | "node_modules/p-limit": { 2854 | "version": "3.1.0", 2855 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2856 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2857 | "dev": true, 2858 | "license": "MIT", 2859 | "dependencies": { 2860 | "yocto-queue": "^0.1.0" 2861 | }, 2862 | "engines": { 2863 | "node": ">=10" 2864 | }, 2865 | "funding": { 2866 | "url": "https://github.com/sponsors/sindresorhus" 2867 | } 2868 | }, 2869 | "node_modules/p-locate": { 2870 | "version": "5.0.0", 2871 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2872 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2873 | "dev": true, 2874 | "license": "MIT", 2875 | "dependencies": { 2876 | "p-limit": "^3.0.2" 2877 | }, 2878 | "engines": { 2879 | "node": ">=10" 2880 | }, 2881 | "funding": { 2882 | "url": "https://github.com/sponsors/sindresorhus" 2883 | } 2884 | }, 2885 | "node_modules/parent-module": { 2886 | "version": "1.0.1", 2887 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2888 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2889 | "dev": true, 2890 | "license": "MIT", 2891 | "dependencies": { 2892 | "callsites": "^3.0.0" 2893 | }, 2894 | "engines": { 2895 | "node": ">=6" 2896 | } 2897 | }, 2898 | "node_modules/path-exists": { 2899 | "version": "4.0.0", 2900 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2901 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2902 | "dev": true, 2903 | "license": "MIT", 2904 | "engines": { 2905 | "node": ">=8" 2906 | } 2907 | }, 2908 | "node_modules/path-key": { 2909 | "version": "3.1.1", 2910 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2911 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2912 | "dev": true, 2913 | "license": "MIT", 2914 | "engines": { 2915 | "node": ">=8" 2916 | } 2917 | }, 2918 | "node_modules/picocolors": { 2919 | "version": "1.1.1", 2920 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2921 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2922 | "license": "ISC" 2923 | }, 2924 | "node_modules/picomatch": { 2925 | "version": "4.0.2", 2926 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 2927 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 2928 | "dev": true, 2929 | "license": "MIT", 2930 | "engines": { 2931 | "node": ">=12" 2932 | }, 2933 | "funding": { 2934 | "url": "https://github.com/sponsors/jonschlinkert" 2935 | } 2936 | }, 2937 | "node_modules/postcss": { 2938 | "version": "8.5.3", 2939 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 2940 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 2941 | "funding": [ 2942 | { 2943 | "type": "opencollective", 2944 | "url": "https://opencollective.com/postcss/" 2945 | }, 2946 | { 2947 | "type": "tidelift", 2948 | "url": "https://tidelift.com/funding/github/npm/postcss" 2949 | }, 2950 | { 2951 | "type": "github", 2952 | "url": "https://github.com/sponsors/ai" 2953 | } 2954 | ], 2955 | "license": "MIT", 2956 | "dependencies": { 2957 | "nanoid": "^3.3.8", 2958 | "picocolors": "^1.1.1", 2959 | "source-map-js": "^1.2.1" 2960 | }, 2961 | "engines": { 2962 | "node": "^10 || ^12 || >=14" 2963 | } 2964 | }, 2965 | "node_modules/postcss-value-parser": { 2966 | "version": "4.2.0", 2967 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2968 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2969 | "license": "MIT" 2970 | }, 2971 | "node_modules/prelude-ls": { 2972 | "version": "1.2.1", 2973 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2974 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2975 | "dev": true, 2976 | "license": "MIT", 2977 | "engines": { 2978 | "node": ">= 0.8.0" 2979 | } 2980 | }, 2981 | "node_modules/punycode": { 2982 | "version": "2.3.1", 2983 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2984 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2985 | "dev": true, 2986 | "license": "MIT", 2987 | "engines": { 2988 | "node": ">=6" 2989 | } 2990 | }, 2991 | "node_modules/react": { 2992 | "version": "19.1.0", 2993 | "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", 2994 | "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", 2995 | "license": "MIT", 2996 | "engines": { 2997 | "node": ">=0.10.0" 2998 | } 2999 | }, 3000 | "node_modules/react-devtools-inline": { 3001 | "version": "4.4.0", 3002 | "resolved": "https://registry.npmjs.org/react-devtools-inline/-/react-devtools-inline-4.4.0.tgz", 3003 | "integrity": "sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==", 3004 | "license": "MIT", 3005 | "dependencies": { 3006 | "es6-symbol": "^3" 3007 | } 3008 | }, 3009 | "node_modules/react-dom": { 3010 | "version": "19.1.0", 3011 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", 3012 | "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", 3013 | "license": "MIT", 3014 | "dependencies": { 3015 | "scheduler": "^0.26.0" 3016 | }, 3017 | "peerDependencies": { 3018 | "react": "^19.1.0" 3019 | } 3020 | }, 3021 | "node_modules/react-is": { 3022 | "version": "17.0.2", 3023 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 3024 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 3025 | "license": "MIT" 3026 | }, 3027 | "node_modules/react-refresh": { 3028 | "version": "0.17.0", 3029 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", 3030 | "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", 3031 | "dev": true, 3032 | "license": "MIT", 3033 | "engines": { 3034 | "node": ">=0.10.0" 3035 | } 3036 | }, 3037 | "node_modules/resolve-from": { 3038 | "version": "4.0.0", 3039 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3040 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3041 | "dev": true, 3042 | "license": "MIT", 3043 | "engines": { 3044 | "node": ">=4" 3045 | } 3046 | }, 3047 | "node_modules/rollup": { 3048 | "version": "4.40.0", 3049 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", 3050 | "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", 3051 | "dev": true, 3052 | "license": "MIT", 3053 | "dependencies": { 3054 | "@types/estree": "1.0.7" 3055 | }, 3056 | "bin": { 3057 | "rollup": "dist/bin/rollup" 3058 | }, 3059 | "engines": { 3060 | "node": ">=18.0.0", 3061 | "npm": ">=8.0.0" 3062 | }, 3063 | "optionalDependencies": { 3064 | "@rollup/rollup-android-arm-eabi": "4.40.0", 3065 | "@rollup/rollup-android-arm64": "4.40.0", 3066 | "@rollup/rollup-darwin-arm64": "4.40.0", 3067 | "@rollup/rollup-darwin-x64": "4.40.0", 3068 | "@rollup/rollup-freebsd-arm64": "4.40.0", 3069 | "@rollup/rollup-freebsd-x64": "4.40.0", 3070 | "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", 3071 | "@rollup/rollup-linux-arm-musleabihf": "4.40.0", 3072 | "@rollup/rollup-linux-arm64-gnu": "4.40.0", 3073 | "@rollup/rollup-linux-arm64-musl": "4.40.0", 3074 | "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", 3075 | "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", 3076 | "@rollup/rollup-linux-riscv64-gnu": "4.40.0", 3077 | "@rollup/rollup-linux-riscv64-musl": "4.40.0", 3078 | "@rollup/rollup-linux-s390x-gnu": "4.40.0", 3079 | "@rollup/rollup-linux-x64-gnu": "4.40.0", 3080 | "@rollup/rollup-linux-x64-musl": "4.40.0", 3081 | "@rollup/rollup-win32-arm64-msvc": "4.40.0", 3082 | "@rollup/rollup-win32-ia32-msvc": "4.40.0", 3083 | "@rollup/rollup-win32-x64-msvc": "4.40.0", 3084 | "fsevents": "~2.3.2" 3085 | } 3086 | }, 3087 | "node_modules/scheduler": { 3088 | "version": "0.26.0", 3089 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", 3090 | "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", 3091 | "license": "MIT" 3092 | }, 3093 | "node_modules/semver": { 3094 | "version": "6.3.1", 3095 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3096 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3097 | "dev": true, 3098 | "license": "ISC", 3099 | "bin": { 3100 | "semver": "bin/semver.js" 3101 | } 3102 | }, 3103 | "node_modules/shebang-command": { 3104 | "version": "2.0.0", 3105 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3106 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3107 | "dev": true, 3108 | "license": "MIT", 3109 | "dependencies": { 3110 | "shebang-regex": "^3.0.0" 3111 | }, 3112 | "engines": { 3113 | "node": ">=8" 3114 | } 3115 | }, 3116 | "node_modules/shebang-regex": { 3117 | "version": "3.0.0", 3118 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3119 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3120 | "dev": true, 3121 | "license": "MIT", 3122 | "engines": { 3123 | "node": ">=8" 3124 | } 3125 | }, 3126 | "node_modules/source-map-js": { 3127 | "version": "1.2.1", 3128 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 3129 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 3130 | "license": "BSD-3-Clause", 3131 | "engines": { 3132 | "node": ">=0.10.0" 3133 | } 3134 | }, 3135 | "node_modules/static-browser-server": { 3136 | "version": "1.0.3", 3137 | "resolved": "https://registry.npmjs.org/static-browser-server/-/static-browser-server-1.0.3.tgz", 3138 | "integrity": "sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==", 3139 | "license": "Apache-2.0", 3140 | "dependencies": { 3141 | "@open-draft/deferred-promise": "^2.1.0", 3142 | "dotenv": "^16.0.3", 3143 | "mime-db": "^1.52.0", 3144 | "outvariant": "^1.3.0" 3145 | } 3146 | }, 3147 | "node_modules/strict-event-emitter": { 3148 | "version": "0.4.6", 3149 | "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", 3150 | "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", 3151 | "license": "MIT" 3152 | }, 3153 | "node_modules/strip-json-comments": { 3154 | "version": "3.1.1", 3155 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3156 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3157 | "dev": true, 3158 | "license": "MIT", 3159 | "engines": { 3160 | "node": ">=8" 3161 | }, 3162 | "funding": { 3163 | "url": "https://github.com/sponsors/sindresorhus" 3164 | } 3165 | }, 3166 | "node_modules/style-mod": { 3167 | "version": "4.1.2", 3168 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", 3169 | "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", 3170 | "license": "MIT" 3171 | }, 3172 | "node_modules/supports-color": { 3173 | "version": "7.2.0", 3174 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3175 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3176 | "dev": true, 3177 | "license": "MIT", 3178 | "dependencies": { 3179 | "has-flag": "^4.0.0" 3180 | }, 3181 | "engines": { 3182 | "node": ">=8" 3183 | } 3184 | }, 3185 | "node_modules/tailwindcss": { 3186 | "version": "4.1.4", 3187 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", 3188 | "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", 3189 | "license": "MIT" 3190 | }, 3191 | "node_modules/tinyglobby": { 3192 | "version": "0.2.13", 3193 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", 3194 | "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", 3195 | "dev": true, 3196 | "license": "MIT", 3197 | "dependencies": { 3198 | "fdir": "^6.4.4", 3199 | "picomatch": "^4.0.2" 3200 | }, 3201 | "engines": { 3202 | "node": ">=12.0.0" 3203 | }, 3204 | "funding": { 3205 | "url": "https://github.com/sponsors/SuperchupuDev" 3206 | } 3207 | }, 3208 | "node_modules/type": { 3209 | "version": "2.7.3", 3210 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", 3211 | "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", 3212 | "license": "ISC" 3213 | }, 3214 | "node_modules/type-check": { 3215 | "version": "0.4.0", 3216 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3217 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3218 | "dev": true, 3219 | "license": "MIT", 3220 | "dependencies": { 3221 | "prelude-ls": "^1.2.1" 3222 | }, 3223 | "engines": { 3224 | "node": ">= 0.8.0" 3225 | } 3226 | }, 3227 | "node_modules/update-browserslist-db": { 3228 | "version": "1.1.3", 3229 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 3230 | "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 3231 | "funding": [ 3232 | { 3233 | "type": "opencollective", 3234 | "url": "https://opencollective.com/browserslist" 3235 | }, 3236 | { 3237 | "type": "tidelift", 3238 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3239 | }, 3240 | { 3241 | "type": "github", 3242 | "url": "https://github.com/sponsors/ai" 3243 | } 3244 | ], 3245 | "license": "MIT", 3246 | "dependencies": { 3247 | "escalade": "^3.2.0", 3248 | "picocolors": "^1.1.1" 3249 | }, 3250 | "bin": { 3251 | "update-browserslist-db": "cli.js" 3252 | }, 3253 | "peerDependencies": { 3254 | "browserslist": ">= 4.21.0" 3255 | } 3256 | }, 3257 | "node_modules/uri-js": { 3258 | "version": "4.4.1", 3259 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3260 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3261 | "dev": true, 3262 | "license": "BSD-2-Clause", 3263 | "dependencies": { 3264 | "punycode": "^2.1.0" 3265 | } 3266 | }, 3267 | "node_modules/vite": { 3268 | "version": "6.3.3", 3269 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz", 3270 | "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==", 3271 | "dev": true, 3272 | "license": "MIT", 3273 | "dependencies": { 3274 | "esbuild": "^0.25.0", 3275 | "fdir": "^6.4.4", 3276 | "picomatch": "^4.0.2", 3277 | "postcss": "^8.5.3", 3278 | "rollup": "^4.34.9", 3279 | "tinyglobby": "^0.2.13" 3280 | }, 3281 | "bin": { 3282 | "vite": "bin/vite.js" 3283 | }, 3284 | "engines": { 3285 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 3286 | }, 3287 | "funding": { 3288 | "url": "https://github.com/vitejs/vite?sponsor=1" 3289 | }, 3290 | "optionalDependencies": { 3291 | "fsevents": "~2.3.3" 3292 | }, 3293 | "peerDependencies": { 3294 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 3295 | "jiti": ">=1.21.0", 3296 | "less": "*", 3297 | "lightningcss": "^1.21.0", 3298 | "sass": "*", 3299 | "sass-embedded": "*", 3300 | "stylus": "*", 3301 | "sugarss": "*", 3302 | "terser": "^5.16.0", 3303 | "tsx": "^4.8.1", 3304 | "yaml": "^2.4.2" 3305 | }, 3306 | "peerDependenciesMeta": { 3307 | "@types/node": { 3308 | "optional": true 3309 | }, 3310 | "jiti": { 3311 | "optional": true 3312 | }, 3313 | "less": { 3314 | "optional": true 3315 | }, 3316 | "lightningcss": { 3317 | "optional": true 3318 | }, 3319 | "sass": { 3320 | "optional": true 3321 | }, 3322 | "sass-embedded": { 3323 | "optional": true 3324 | }, 3325 | "stylus": { 3326 | "optional": true 3327 | }, 3328 | "sugarss": { 3329 | "optional": true 3330 | }, 3331 | "terser": { 3332 | "optional": true 3333 | }, 3334 | "tsx": { 3335 | "optional": true 3336 | }, 3337 | "yaml": { 3338 | "optional": true 3339 | } 3340 | } 3341 | }, 3342 | "node_modules/w3c-keyname": { 3343 | "version": "2.2.8", 3344 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", 3345 | "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", 3346 | "license": "MIT" 3347 | }, 3348 | "node_modules/which": { 3349 | "version": "2.0.2", 3350 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3351 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3352 | "dev": true, 3353 | "license": "ISC", 3354 | "dependencies": { 3355 | "isexe": "^2.0.0" 3356 | }, 3357 | "bin": { 3358 | "node-which": "bin/node-which" 3359 | }, 3360 | "engines": { 3361 | "node": ">= 8" 3362 | } 3363 | }, 3364 | "node_modules/word-wrap": { 3365 | "version": "1.2.5", 3366 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3367 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3368 | "dev": true, 3369 | "license": "MIT", 3370 | "engines": { 3371 | "node": ">=0.10.0" 3372 | } 3373 | }, 3374 | "node_modules/yallist": { 3375 | "version": "3.1.1", 3376 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3377 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3378 | "dev": true, 3379 | "license": "ISC" 3380 | }, 3381 | "node_modules/yocto-queue": { 3382 | "version": "0.1.0", 3383 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3384 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3385 | "dev": true, 3386 | "license": "MIT", 3387 | "engines": { 3388 | "node": ">=10" 3389 | }, 3390 | "funding": { 3391 | "url": "https://github.com/sponsors/sindresorhus" 3392 | } 3393 | } 3394 | } 3395 | } 3396 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "lint": "eslint .", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@codesandbox/sandpack-react": "^2.20.0", 14 | "autoprefixer": "^10.4.21", 15 | "postcss": "^8.5.3", 16 | "react": "^19.0.0", 17 | "react-dom": "^19.0.0", 18 | "tailwindcss": "^4.1.4" 19 | }, 20 | "devDependencies": { 21 | "@eslint/js": "^9.22.0", 22 | "@types/react": "^19.1.2", 23 | "@types/react-dom": "^19.1.2", 24 | "@vitejs/plugin-react": "^4.3.4", 25 | "eslint": "^9.22.0", 26 | "eslint-plugin-react-hooks": "^5.2.0", 27 | "eslint-plugin-react-refresh": "^0.4.19", 28 | "globals": "^16.0.0", 29 | "vite": "^6.3.1" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /client/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | 8 | .logo { 9 | height: 6em; 10 | padding: 1.5em; 11 | will-change: filter; 12 | transition: filter 300ms; 13 | } 14 | .logo:hover { 15 | filter: drop-shadow(0 0 2em #646cffaa); 16 | } 17 | .logo.react:hover { 18 | filter: drop-shadow(0 0 2em #61dafbaa); 19 | } 20 | 21 | @keyframes logo-spin { 22 | from { 23 | transform: rotate(0deg); 24 | } 25 | to { 26 | transform: rotate(360deg); 27 | } 28 | } 29 | 30 | @media (prefers-reduced-motion: no-preference) { 31 | a:nth-of-type(2) .logo { 32 | animation: logo-spin infinite 20s linear; 33 | } 34 | } 35 | 36 | .card { 37 | padding: 2em; 38 | } 39 | 40 | .read-the-docs { 41 | color: #888; 42 | } 43 | -------------------------------------------------------------------------------- /client/src/App.jsx: -------------------------------------------------------------------------------- 1 | // client/src/App.jsx 2 | import React, { useState, useRef, useEffect, useCallback } from 'react'; 3 | import ChatInterface from './components/ChatInterface'; 4 | import ArtifactPreview from './components/ArtifactPreview'; 5 | import './index.css'; // Ensure Tailwind is imported 6 | 7 | // Debounce function 8 | function debounce(func, wait) { 9 | let timeout; 10 | return function executedFunction(...args) { 11 | const later = () => { 12 | clearTimeout(timeout); 13 | func(...args); 14 | }; 15 | clearTimeout(timeout); 16 | timeout = setTimeout(later, wait); 17 | }; 18 | } 19 | 20 | // --- Available Models --- 21 | // DEFINE YOUR ACTUAL AVAILABLE MODELS HERE 22 | const AVAILABLE_MODELS = [ 23 | { id: "Tesslate/UIGEN-T2-7B-3600", name: "Tesslate/UIGEN" }, 24 | { id: "NousResearch/Meta-Llama-3-8B-Instruct", name: "Llama 3 8B Instruct" }, 25 | { id: "mistralai/Mistral-7B-Instruct-v0.1", name: "Mistral 7B Instruct" }, 26 | // Add other models supported by vllm.tesslate.com/v1 27 | ]; 28 | 29 | function App() { 30 | const [messages, setMessages] = useState([ 31 | { role: 'system', content: "You are Tesslate, a helpful assistant specialized in UI generation." } 32 | ]); 33 | const [currentArtifactHtml, setCurrentArtifactHtml] = useState(''); 34 | const [isLoading, setIsLoading] = useState(false); 35 | const [selectedModel, setSelectedModel] = useState(AVAILABLE_MODELS[0].id); 36 | const currentAssistantMessageRef = useRef(''); 37 | const htmlRegex = /```html\s*([\s\S]*?)\s*```/g; // Find ```html ... ``` blocks 38 | const isProcessingDone = useRef(true); // Track if stream processing is finished 39 | 40 | // Debounced function to update the artifact state in App 41 | // Use a shorter debounce time for faster feedback during streaming 42 | const debouncedSetArtifactHtml = useCallback(debounce((html) => { 43 | // console.log("Debounced Set Artifact:", html.substring(0, 50) + "..."); // Debug 44 | setCurrentArtifactHtml(html); 45 | }, 150), []); // 150ms debounce 46 | 47 | // Extracts the *last* complete HTML block and calls the debounced state setter 48 | const extractAndSetArtifact = useCallback((text) => { 49 | let lastMatch = null; 50 | let match; 51 | htmlRegex.lastIndex = 0; // Reset regex state 52 | 53 | while ((match = htmlRegex.exec(text)) !== null) { 54 | lastMatch = match[1]; // Group 1 contains the code 55 | } 56 | 57 | // console.log("Attempting artifact extraction. Found:", lastMatch ? lastMatch.substring(0, 50)+"..." : "null"); // Debug 58 | 59 | if (lastMatch !== null) { 60 | debouncedSetArtifactHtml(lastMatch); 61 | } else { 62 | // If the *final* message has no HTML, clear the artifact preview 63 | if (isProcessingDone.current && currentArtifactHtml !== '') { 64 | // console.log("Clearing artifact as final message has no HTML"); // Debug 65 | debouncedSetArtifactHtml(''); // Use the debounced setter to clear 66 | } 67 | } 68 | }, [debouncedSetArtifactHtml, currentArtifactHtml]); // Dependency needed for clearing logic 69 | 70 | const handleSendMessage = async (userInput) => { 71 | if (!userInput.trim() || isLoading) return; // Prevent multiple sends 72 | 73 | const userMessage = { role: 'user', content: userInput }; 74 | // Keep history, add new user message 75 | // Limit history length if needed: e.g., const history = messages.slice(-10); 76 | const messageHistory = [...messages, userMessage]; 77 | setMessages(messageHistory); // Show user message immediately 78 | setIsLoading(true); 79 | isProcessingDone.current = false; 80 | currentAssistantMessageRef.current = ''; 81 | setCurrentArtifactHtml(''); // Clear artifact preview for new request 82 | 83 | // Add placeholder for assistant response *after* user message is shown 84 | setMessages(prev => [...prev, { role: 'assistant', content: '' }]); 85 | 86 | try { 87 | const response = await fetch('/api/chat/stream', { 88 | method: 'POST', 89 | headers: { 90 | 'Content-Type': 'application/json', 91 | }, 92 | body: JSON.stringify({ 93 | // Send appropriate history (e.g., all messages for context) 94 | messages: messageHistory.map(({ role, content }) => ({ role, content })), 95 | model: selectedModel 96 | }), 97 | }); 98 | 99 | if (!response.ok || !response.body) { 100 | const errorText = await response.text(); 101 | let errorMessage = `HTTP error! status: ${response.status}`; 102 | try { 103 | const errorData = JSON.parse(errorText); 104 | errorMessage = errorData.error || errorText; 105 | } catch { 106 | errorMessage = errorText || errorMessage; 107 | } 108 | if (!response.body) errorMessage += " (No response body)"; 109 | throw new Error(errorMessage); 110 | } 111 | 112 | const reader = response.body.getReader(); 113 | const decoder = new TextDecoder('utf-8'); 114 | 115 | while (true) { 116 | const { done, value } = await reader.read(); 117 | 118 | if (done) { 119 | // console.log("Frontend stream processing finished."); // Debug 120 | isProcessingDone.current = true; 121 | // Final check to clear artifact if needed 122 | extractAndSetArtifact(currentAssistantMessageRef.current); 123 | break; 124 | } 125 | 126 | const chunk = decoder.decode(value, { stream: true }); 127 | const eventLines = chunk.split('\n\n'); 128 | 129 | for (const eventLine of eventLines) { 130 | if (eventLine.startsWith('data:')) { 131 | const jsonData = eventLine.substring(5).trim(); 132 | 133 | if (jsonData === '[DONE]') { 134 | // console.log("Received [DONE] marker."); // Debug 135 | isProcessingDone.current = true; 136 | // Final check to clear artifact if needed 137 | extractAndSetArtifact(currentAssistantMessageRef.current); 138 | continue; // Don't break, wait for reader.read() to be done 139 | } 140 | 141 | try { 142 | const parsed = JSON.parse(jsonData); 143 | if (parsed.error) { 144 | console.error("Received error via stream:", parsed.error); 145 | throw new Error(parsed.error); 146 | } 147 | 148 | const textDelta = parsed.text || ''; 149 | 150 | if (textDelta) { 151 | currentAssistantMessageRef.current += textDelta; 152 | 153 | // Update the last message (assistant's streaming response) 154 | setMessages(prev => { 155 | const updatedMessages = [...prev]; 156 | if (updatedMessages.length > 0) { 157 | updatedMessages[updatedMessages.length - 1] = { 158 | role: 'assistant', 159 | content: currentAssistantMessageRef.current 160 | }; 161 | } 162 | return updatedMessages; 163 | }); 164 | 165 | // Extract artifact from the *accumulated* text in real-time 166 | extractAndSetArtifact(currentAssistantMessageRef.current); 167 | } 168 | } catch (error) { 169 | console.warn("Error parsing stream data or backend error:", jsonData, error); 170 | // Stop processing and display error in chat 171 | isProcessingDone.current = true; 172 | throw new Error(`Stream processing error: ${error.message}`); // Throw to outer catch 173 | } 174 | } 175 | } 176 | } // End while loop 177 | 178 | } catch (error) { 179 | console.error("Error sending message or processing stream:", error); 180 | isProcessingDone.current = true; // Ensure this is set on error too 181 | // Update the last message (placeholder or partial) with the error 182 | setMessages(prev => { 183 | const updatedMessages = [...prev]; 184 | const lastMsgIndex = updatedMessages.length - 1; 185 | if(lastMsgIndex >= 0) { 186 | const lastMsg = updatedMessages[lastMsgIndex]; 187 | // Append error, preserving existing content if any 188 | updatedMessages[lastMsgIndex] = { 189 | ...lastMsg, // Keep role: 'assistant' 190 | content: (lastMsg.content ? lastMsg.content + "\n\n" : "") + `[Error: ${error.message}]` 191 | }; 192 | } else { 193 | // Fallback if message list somehow got empty 194 | updatedMessages.push({ role: 'assistant', content: `[Error: ${error.message}]` }); 195 | } 196 | return updatedMessages; 197 | }); 198 | } finally { 199 | setIsLoading(false); 200 | } 201 | }; 202 | 203 | return ( 204 |
205 | {/* Left Side: Chat (2/5 width) */} 206 | {/* Removed max-w-..., mx-auto */} 207 |
208 | {/* Model Selector */} 209 |
{/* Added flex-shrink-0 */} 210 | 213 | 226 |
227 | 228 | {/* Chat Interface takes remaining space */} 229 | 234 |
235 | 236 | {/* Right Side: Artifact Preview (3/5 width) */} 237 | {/* Adjusted width, removed lg/xl breakpoints for simplicity */} 238 | {/* Removed internal padding if ArtifactPreview handles its own */} 239 |
240 | 241 |
242 |
243 | ); 244 | } 245 | 246 | export default App; -------------------------------------------------------------------------------- /client/src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/ArtifactPreview.jsx: -------------------------------------------------------------------------------- 1 | // client/src/components/ArtifactPreview.jsx 2 | import React, { useState, useEffect, useMemo, useRef } from 'react'; 3 | import { 4 | SandpackProvider, 5 | SandpackLayout, 6 | SandpackPreview, 7 | SandpackCodeEditor, 8 | useSandpack, 9 | } from '@codesandbox/sandpack-react'; 10 | 11 | // Debounce function (keep as is) 12 | function debounce(func, wait) { 13 | let timeout; 14 | return function executedFunction(...args) { 15 | const later = () => { 16 | clearTimeout(timeout); 17 | func(...args); 18 | }; 19 | clearTimeout(timeout); 20 | timeout = setTimeout(later, wait); 21 | }; 22 | } 23 | 24 | // SandpackUpdater (keep as is - fix was already applied) 25 | const SandpackUpdater = ({ htmlContent }) => { 26 | const { sandpack } = useSandpack(); 27 | const lastUpdatedHtml = useRef(null); 28 | 29 | const debouncedSandpackUpdate = useMemo( 30 | () => debounce((content) => { 31 | sandpack.updateFile('/index.html', content); 32 | }, 50), 33 | [sandpack] 34 | ); 35 | 36 | useEffect(() => { 37 | if (sandpack && htmlContent !== lastUpdatedHtml.current) { 38 | const contentToUpdate = htmlContent || ''; 39 | debouncedSandpackUpdate(contentToUpdate); 40 | lastUpdatedHtml.current = htmlContent; 41 | } 42 | }, [htmlContent, sandpack, debouncedSandpackUpdate]); 43 | 44 | return null; 45 | }; 46 | 47 | 48 | function ArtifactPreview({ htmlContent }) { 49 | const [showCode, setShowCode] = useState(false); 50 | 51 | const initialFiles = useMemo(() => ({ 52 | '/index.html': { 53 | code: htmlContent || '', 54 | active: true, 55 | }, 56 | }), []); 57 | 58 | const sandpackOptions = useMemo(() => ({ 59 | showLineNumbers: true, 60 | showInlineErrors: true, 61 | showTabs: true, 62 | closableTabs: false, 63 | editorHeight: '40%', // This might be overridden by our explicit styles below 64 | }), []); 65 | 66 | return ( 67 | // Root element takes full height provided by App.jsx (w-4/5 flex flex-col) 68 |
69 | {/* Header */} 70 |
71 |

Artifact Preview

72 | 79 |
80 | 81 | {/* Sandpack Area */} 82 | {/* This container needs to grow and allow SandpackLayout to fill it */} 83 |
{/* Added overflow-hidden */} 84 | 90 | 91 | {/* *** Ensure SandpackLayout takes full height of its container *** */} 92 | 93 | {/* Preview Panel */} 94 | 106 | {/* Code Editor Panel (Conditional) */} 107 | {showCode && ( 108 | 113 | )} 114 | 115 | 116 |
117 |
118 | ); 119 | } 120 | 121 | export default ArtifactPreview; -------------------------------------------------------------------------------- /client/src/components/ChatInterface.jsx: -------------------------------------------------------------------------------- 1 | // client/src/components/ChatInterface.jsx 2 | import React, { useState, useRef, useEffect } from 'react'; 3 | 4 | function ChatInterface({ messages, onSendMessage, isLoading }) { 5 | const [input, setInput] = useState(''); 6 | const messagesEndRef = useRef(null); 7 | const textareaRef = useRef(null); 8 | 9 | const scrollToBottom = () => { 10 | // Use 'auto' for instant scroll, smoother if preferred ('smooth') 11 | messagesEndRef.current?.scrollIntoView({ behavior: "auto", block: "end" }); 12 | }; 13 | 14 | // Effect for scrolling: triggers on messages change or loading state change 15 | useEffect(() => { 16 | scrollToBottom(); 17 | // Optional: Slight delay might help if rendering is slow 18 | // const timer = setTimeout(scrollToBottom, 50); 19 | // return () => clearTimeout(timer); 20 | }, [messages, isLoading]); // Scroll whenever messages update or loading changes 21 | 22 | // Effect for textarea auto-resize 23 | useEffect(() => { 24 | if (textareaRef.current) { 25 | textareaRef.current.style.height = 'auto'; // Reset height 26 | const scrollHeight = textareaRef.current.scrollHeight; 27 | // Consider a max-height if you haven't set one via CSS 28 | textareaRef.current.style.height = `${scrollHeight}px`; 29 | } 30 | }, [input]); 31 | 32 | const handleSend = (e) => { 33 | e.preventDefault(); 34 | if (input.trim() && !isLoading) { 35 | onSendMessage(input); 36 | setInput(''); 37 | // Explicitly reset height after sending 38 | if (textareaRef.current) { 39 | textareaRef.current.style.height = 'auto'; 40 | } 41 | } 42 | }; 43 | 44 | const handleKeyDown = (e) => { 45 | // Send on Enter, newline on Shift+Enter 46 | if (e.key === 'Enter' && !e.shiftKey) { 47 | e.preventDefault(); 48 | handleSend(e); 49 | } 50 | }; 51 | 52 | return ( 53 | // This component should fill the vertical space given by its parent in App.jsx 54 |
55 | {/* Chat Messages Area */} 56 | {/* Added custom-scrollbar class (ensure CSS is in index.css) */} 57 |
58 | {messages.map((msg, index) => ( 59 |
60 | {/* Added dark mode text color for user */} 61 |
68 | {/* Render message content with preserved whitespace */} 69 |
{msg.content || ' '}
70 | {/* Added non-breaking space for empty content to maintain bubble height */} 71 |
72 |
73 | ))} 74 | 75 | {/* Loading Indicator */} 76 | {/* Shows only when loading AND the last message is the empty assistant placeholder */} 77 | {isLoading && messages[messages.length - 1]?.role === 'assistant' && messages[messages.length - 1]?.content === '' && ( 78 |
79 |
80 |
{/* Reduced spacing */} 81 |
82 |
83 |
84 |
85 |
86 |
87 | )} 88 | {/* Invisible element to scroll to */} 89 |
90 |
91 | 92 | {/* Input Form Area */} 93 | {/* Ensure it doesn't shrink and stays at the bottom */} 94 |
95 |